diff options
51 files changed, 80114 insertions, 0 deletions
diff --git a/numpy/doc/numpybook/Figures/contiguous.eps b/numpy/doc/numpybook/Figures/contiguous.eps new file mode 100644 index 000000000..006babe7a --- /dev/null +++ b/numpy/doc/numpybook/Figures/contiguous.eps @@ -0,0 +1,374 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: contiguous.fig +%%Creator: fig2dev Version 3.2 Patchlevel 4 +%%CreationDate: Thu Aug 18 12:08:29 2005 +%%For: oliphant@oliphant (Travis Oliphant) +%%BoundingBox: 0 0 434 215 +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +newpath 0 215 moveto 0 0 lineto 434 0 lineto 434 215 lineto closepath clip newpath +-197.3 306.7 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06000 0.06000 sc +% +% Fig objects follow +% +% +% here starts figure with depth 50 +% Polyline +30.000 slw +n 5700 1575 m 6900 1575 l 6900 2175 l 5700 2175 l + cp gs col0 s gr +% Polyline +n 7500 1575 m 8700 1575 l 8700 2175 l 7500 2175 l + cp gs col0 s gr +% Polyline +7.500 slw +n 3300 1575 m 10500 1575 l 10500 2175 l 3300 2175 l + cp gs col0 s gr +% Polyline +n 3900 1575 m + 3900 2175 l gs col0 s gr +% Polyline +n 4500 1575 m + 4500 2175 l gs col0 s gr +% Polyline +n 5100 1575 m + 5100 2175 l gs col0 s gr +% Polyline +n 5700 1575 m + 5700 2175 l gs col0 s gr +% Polyline +n 6300 1575 m + 6300 2175 l gs col0 s gr +% Polyline +n 6900 1575 m + 6900 2175 l gs col0 s gr +% Polyline +n 7500 1575 m + 7500 2175 l gs col0 s gr +% Polyline +n 8100 1575 m + 8100 2175 l gs col0 s gr +% Polyline +n 8700 1575 m + 8700 2175 l gs col0 s gr +% Polyline +n 9300 1575 m + 9300 2175 l gs col0 s gr +% Polyline +n 9900 1575 m + 9900 2175 l gs col0 s gr +/Helvetica-Bold ff 180.00 scf sf +10125 1950 m +gs 1 -1 sc (11) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +9525 1950 m +gs 1 -1 sc (10) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +9000 1950 m +gs 1 -1 sc (9) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +8400 1950 m +gs 1 -1 sc (8) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +7800 1950 m +gs 1 -1 sc (7) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +7200 1950 m +gs 1 -1 sc (6) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +6600 1950 m +gs 1 -1 sc (5) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +6000 1950 m +gs 1 -1 sc (4) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +5400 1950 m +gs 1 -1 sc (3) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4800 1950 m +gs 1 -1 sc (2) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4200 1950 m +gs 1 -1 sc (1) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +3600 1950 m +gs 1 -1 sc (0) col0 sh gr +% Polyline +30.000 slw +n 4200 3300 m 5400 3300 l 5400 4500 l 4200 4500 l + cp gs col0 s gr +% Polyline +7.500 slw +n 4200 2700 m + 4200 5100 l gs col0 s gr +% Polyline +n 4800 2700 m + 4800 5100 l gs col0 s gr +% Polyline +n 3600 3300 m + 5400 3300 l gs col0 s gr +% Polyline +n 3600 3900 m + 5400 3900 l gs col0 s gr +% Polyline +n 3600 2700 m 5400 2700 l 5400 5100 l 3600 5100 l + cp gs col0 s gr +% Polyline +n 3600 4500 m + 5400 4500 l gs col0 s gr +/Helvetica-Bold ff 240.00 scf sf +5625 3975 m +gs 1 -1 sc (C) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +5175 4725 m +gs 1 -1 sc (11) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4575 4725 m +gs 1 -1 sc (10) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4050 4725 m +gs 1 -1 sc (9) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +5250 4125 m +gs 1 -1 sc (8) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4650 4125 m +gs 1 -1 sc (7) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4050 4125 m +gs 1 -1 sc (6) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +5250 3525 m +gs 1 -1 sc (5) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4650 3525 m +gs 1 -1 sc (4) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4050 3525 m +gs 1 -1 sc (3) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +5250 2925 m +gs 1 -1 sc (2) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4650 2925 m +gs 1 -1 sc (1) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4050 2925 m +gs 1 -1 sc (0) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +3675 3225 m +gs 1 -1 sc (\(0,0\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4875 3225 m +gs 1 -1 sc (\(0,2\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +3675 3825 m +gs 1 -1 sc (\(1,0\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4875 3825 m +gs 1 -1 sc (\(1,2\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4275 3825 m +gs 1 -1 sc (\(1,1\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4875 4425 m +gs 1 -1 sc (\(2,2\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4875 5025 m +gs 1 -1 sc (\(3,2\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4275 3225 m +gs 1 -1 sc (\(0,1\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +3675 4425 m +gs 1 -1 sc (\(2,0\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +3675 5025 m +gs 1 -1 sc (\(3,0\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4275 4425 m +gs 1 -1 sc (\(2,1\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +4275 5025 m +gs 1 -1 sc (\(3,1\)) col0 sh gr +% Polyline +30.000 slw +n 7650 3375 m 8850 3375 l 8850 4575 l 7650 4575 l + cp gs col0 s gr +% Polyline +7.500 slw +n 7050 3975 m + 9450 3975 l gs col0 s gr +% Polyline +n 7050 3375 m + 9450 3375 l gs col0 s gr +% Polyline +n 7650 4575 m + 7650 2775 l gs col0 s gr +% Polyline +n 8250 4575 m + 8250 2775 l gs col0 s gr +% Polyline +n 8850 4575 m + 8850 2775 l gs col0 s gr +% Polyline +n 7050 4575 m 7050 2775 l 9450 2775 l 9450 4575 l + cp gs col0 s gr +/Helvetica-Bold ff 240.00 scf sf +9600 3750 m +gs 1 -1 sc (Fortran) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +9225 4200 m +gs 1 -1 sc (11) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +9225 3600 m +gs 1 -1 sc (10) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +9300 3000 m +gs 1 -1 sc (9) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +8625 4200 m +gs 1 -1 sc (8) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +8625 3600 m +gs 1 -1 sc (7) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +8625 3000 m +gs 1 -1 sc (6) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +8100 4200 m +gs 1 -1 sc (5) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +8100 3600 m +gs 1 -1 sc (4) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +8100 3000 m +gs 1 -1 sc (3) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +7500 4200 m +gs 1 -1 sc (2) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +7500 3600 m +gs 1 -1 sc (1) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +7500 3000 m +gs 1 -1 sc (0) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +7125 3300 m +gs 1 -1 sc (\(0,0\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +7725 3300 m +gs 1 -1 sc (\(0,1\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +8325 3300 m +gs 1 -1 sc (\(0,2\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +7125 3900 m +gs 1 -1 sc (\(1,0\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +7725 3900 m +gs 1 -1 sc (\(1,1\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +8325 3900 m +gs 1 -1 sc (\(1,2\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +7125 4500 m +gs 1 -1 sc (\(2,0\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +7725 4500 m +gs 1 -1 sc (\(2,1\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +8325 4500 m +gs 1 -1 sc (\(2,2\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +8925 3900 m +gs 1 -1 sc (\(1,3\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +8925 4500 m +gs 1 -1 sc (\(2,3\)) col0 sh gr +/Helvetica-Bold ff 180.00 scf sf +8925 3300 m +gs 1 -1 sc (\(0,3\)) col0 sh gr +% here ends figure; +$F2psEnd +rs +showpage diff --git a/numpy/doc/numpybook/Figures/contiguous.fig b/numpy/doc/numpybook/Figures/contiguous.fig new file mode 100644 index 000000000..c2416dafa --- /dev/null +++ b/numpy/doc/numpybook/Figures/contiguous.fig @@ -0,0 +1,133 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 3300 1500 10500 2250 +2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5700 1575 6900 1575 6900 2175 5700 2175 5700 1575 +2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 7500 1575 8700 1575 8700 2175 7500 2175 7500 1575 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3300 1575 10500 1575 10500 2175 3300 2175 3300 1575 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3900 1575 3900 2175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4500 1575 4500 2175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 5100 1575 5100 2175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 5700 1575 5700 2175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6300 1575 6300 2175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6900 1575 6900 2175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 7500 1575 7500 2175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 8100 1575 8100 2175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 8700 1575 8700 2175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 9300 1575 9300 2175 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 9900 1575 9900 2175 +4 0 0 50 -1 18 12 0.0000 4 135 210 10125 1950 11\001 +4 0 0 50 -1 18 12 0.0000 4 135 210 9525 1950 10\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 9000 1950 9\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 8400 1950 8\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 7800 1950 7\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 7200 1950 6\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 6600 1950 5\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 6000 1950 4\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 5400 1950 3\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 4800 1950 2\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 4200 1950 1\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 3600 1950 0\001 +-6 +6 3600 2700 5850 5100 +2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4200 3300 5400 3300 5400 4500 4200 4500 4200 3300 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4200 2700 4200 5100 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4800 2700 4800 5100 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 3300 5400 3300 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 3900 5400 3900 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3600 2700 5400 2700 5400 5100 3600 5100 3600 2700 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 4500 5400 4500 +4 0 0 50 -1 18 16 0.0000 4 180 180 5625 3975 C\001 +4 0 0 50 -1 18 12 0.0000 4 135 210 5175 4725 11\001 +4 0 0 50 -1 18 12 0.0000 4 135 210 4575 4725 10\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 4050 4725 9\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 5250 4125 8\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 4650 4125 7\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 4050 4125 6\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 5250 3525 5\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 4650 3525 4\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 4050 3525 3\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 5250 2925 2\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 4650 2925 1\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 4050 2925 0\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 3675 3225 (0,0)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 4875 3225 (0,2)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 3675 3825 (1,0)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 4875 3825 (1,2)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 4275 3825 (1,1)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 4875 4425 (2,2)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 4875 5025 (3,2)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 4275 3225 (0,1)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 3675 4425 (2,0)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 3675 5025 (3,0)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 4275 4425 (2,1)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 4275 5025 (3,1)\001 +-6 +6 7050 2775 10500 4650 +2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 7650 3375 8850 3375 8850 4575 7650 4575 7650 3375 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 7050 3975 9450 3975 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 7050 3375 9450 3375 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 7650 4575 7650 2775 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 8250 4575 8250 2775 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 8850 4575 8850 2775 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 7050 4575 7050 2775 9450 2775 9450 4575 7050 4575 +4 0 0 50 -1 18 16 0.0000 4 180 840 9600 3750 Fortran\001 +4 0 0 50 -1 18 12 0.0000 4 135 210 9225 4200 11\001 +4 0 0 50 -1 18 12 0.0000 4 135 210 9225 3600 10\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 9300 3000 9\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 8625 4200 8\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 8625 3600 7\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 8625 3000 6\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 8100 4200 5\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 8100 3600 4\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 8100 3000 3\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 7500 4200 2\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 7500 3600 1\001 +4 0 0 50 -1 18 12 0.0000 4 135 105 7500 3000 0\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 7125 3300 (0,0)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 7725 3300 (0,1)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 8325 3300 (0,2)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 7125 3900 (1,0)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 7725 3900 (1,1)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 8325 3900 (1,2)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 7125 4500 (2,0)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 7725 4500 (2,1)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 8325 4500 (2,2)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 8925 3900 (1,3)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 8925 4500 (2,3)\001 +4 0 0 50 -1 18 12 0.0000 4 180 450 8925 3300 (0,3)\001 +-6 diff --git a/numpy/doc/numpybook/Figures/contiguous.pdf b/numpy/doc/numpybook/Figures/contiguous.pdf Binary files differnew file mode 100644 index 000000000..3e3a55e64 --- /dev/null +++ b/numpy/doc/numpybook/Figures/contiguous.pdf diff --git a/numpy/doc/numpybook/Figures/fig1.eps b/numpy/doc/numpybook/Figures/fig1.eps new file mode 100644 index 000000000..6b77676c8 --- /dev/null +++ b/numpy/doc/numpybook/Figures/fig1.eps @@ -0,0 +1,4577 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: fig1.eps +%%Creator: matplotlib version 0.85.1.cvs, http://matplotlib.sourceforge.net/ +%%CreationDate: Fri Jan 6 00:09:47 2006 +%%BoundingBox: 13 175 598 616 +%%EndComments +%%BeginProlog +/mpldict 7 dict def +mpldict begin +/m { moveto } bind def +/l { lineto } bind def +/r { rlineto } bind def +/box { +m +1 index 0 r +0 exch r +neg 0 r +closepath +} bind def +/clipbox { +box +clip +newpath +} bind def +/ellipse { +newpath +matrix currentmatrix 7 1 roll +translate +scale +0 0 1 5 3 roll arc +setmatrix +closepath +} bind def +%%BeginFont: Verdana +%!PS-TrueType-1.0-1.0 +8 dict begin +/FontName /Verdana def +/FontMatrix [1 0 0 1 0 0] def +/FontType 42 def +/Encoding StandardEncoding def +/FontBBox [-102 -423 2963 2049] def +/PaintType 0 def +/FontInfo 7 dict dup begin +/Notice (Typeface and data © 1996 Microsoft Corporation. All Rights Reserved) def +/FamilyName (Verdana) def +/FullName (Verdana) def +/version (Version 2.35) def +/isFixedPitch false def +/UnderlinePosition -180 def +/UnderlineThickness 120 def +end readonly def +/sfnts [ +<00010000001301000004003044534947CD5006A400020D64000014144C5453485694D82F +00001530000003814F532F32477590C3000001B80000005656444D5874F17C6D000018B4 +000005E0636D6170E84D8B8B000007A80000068C637674204CA740E3000022AC00000198 +6670676DEE371553000021740000013867617370001700090000021000000010676C7966 +01F195F700009EC000013BB668646D7809490ECD0000323800006C8868656164C748722C +0000013C0000003668686561133B09D00000017400000024686D7478C905723E00002444 +00000DF46B65726E75BF7E53000200CC00000C966C6F63616784B57700000E34000006FC +6D617870086A023E00000198000000206E616D65A93B95720000022000000587706F7374 +C58F55450001DA7800002651707265701240C02F00001E94000002E00001000000010000 +16FBFC3A5F0F3CF5001B080000000000AA7E442900000000B26DE2ABFF9AFE590B930801 +00000009000200000000000000010000080BFE5200000C2CFF9AFBD40B93000100000000 +00000000000000000000037D00010000037D00620007006B000500020010002F00380000 +0495013F0003000100010411019000050000059A053300000125059A0533000003A00078 +02A70800020B0604030504040204000002870000000000000000000000004D5320200040 +0020FB02061EFE5900CA080B01AE2000019F000000000000000000030008000200100001 +FFFF00030000002801E60001000000000000004300000001000000000001000700430001 +0000000000020007004A0001000000000003002F00510001000000000004000700800001 +000000000005000C00870001000000000006000700930001000000000007002F009A0003 +000104030002000C00C90003000104050002001000D50003000104060002000C00E50003 +000104070002001000F10003000104080002001001010003000104090000008601110003 +000104090001000E01970003000104090002000E01A50003000104090003005E01B30003 +000104090004000E021100030001040900050018021F0003000104090006000E02370003 +000104090007005E024500030001040A0002000C02A300030001040B0002001002AF0003 +0001040C0002000C02BF00030001040E0002000C02CB0003000104100002000E02D70003 +000104130002001202E50003000104140002000C02F70003000104150002001003030003 +000104160002000C03130003000104190002000E031F00030001041B00020010032D0003 +0001041D0002000C033D00030001041F0002000C03490003000104240002000E03550003 +0001042D0002000E036300030001080A0002000C03710003000108160002000C037D0003 +00010C0A0002000C0389000300010C0C0002000C0395547970656661636520616E642064 +61746120A92031393936204D6963726F736F667420436F72706F726174696F6E2E20416C +6C2052696768747320526573657276656456657264616E61526567756C61724D6963726F +736F66743A56657264616E6120526567756C61723A56657273696F6E203120284D696372 +6F736F66742956657264616E6156657273696F6E20322E333556657264616E6156657264 +616E6120697320612074726164656D61726B206F66204D6963726F736F667420436F7270 +6F726174696F6E004E006F0072006D0061006C006F00620079010D0065006A006E00E900 +6E006F0072006D0061006C005300740061006E0064006100720064039A03B103BD03BF03 +BD03B903BA03AC0054007900700065006600610063006500200061006E00640020006400 +6100740061002000A9002000310039003900360020004D006900630072006F0073006F00 +66007400200043006F00720070006F0072006100740069006F006E002E00200041006C00 +6C0020005200690067006800740073002000520065007300650072007600650064005600 +65007200640061006E00610052006500670075006C00610072004D006900630072006F00 +73006F00660074003A00560065007200640061006E006100200052006500670075006C00 +610072003A00560065007200730069006F006E0020003100200028004D00690063007200 +6F0073006F00660074002900560065007200640061006E00610056006500720073006900 +6F006E00200032002E0033003500560065007200640061006E0061005600650072006400 +61006E006100200069007300200061002000740072006100640065006D00610072006B00 +20006F00660020004D006900630072006F0073006F0066007400200043006F0072007000 +6F0072006100740069006F006E004E006F0072006D0061006C004E006F0072006D006100 +61006C0069004E006F0072006D0061006C004E006F0072006D00E1006C004E006F007200 +6D0061006C0065005300740061006E00640061006100720064004E006F0072006D006100 +6C004E006F0072006D0061006C006E0079004E006F0072006D0061006C041E0431044B04 +47043D044B0439004E006F0072006D00E1006C006E0065004E006F0072006D0061006C00 +4E006F0072006D0061006C004E0061007600610064006E006F0041007200720075006E00 +740061004E006F0072006D0061006C004E006F0072006D0061006C004E006F0072006D00 +61006C004E006F0072006D0061006C00000000020001000000000014000300010000011A +000001060000010000000000000001020000000200000000000000000000000000000001 +0000030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324 +25262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748 +494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60610062636465666768696A6B +6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F +909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAB03ACADAEAFB0B1B2 +B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD000D1D2D3D4D5 +D6D7D8D9DADBDCDDDEDF0004057200000084008000060004007E017F019201A101B001FF +02C702C902DD0301030303090323037E038A038C03A103CE040C044F045C045F04911E85 +1EF92015201E2022202620302033203A203C203E2044207F20A420A720AC210521132116 +21222126212E215E22022206220F22122215221A221E222B22482260226525A125AB25CA +25CF25E6F002F00DFB02FFFF0000002000A0019201A001AF01FA02C602C902D803000303 +03090323037E0384038C038E03A30401040E0451045E04901E801EA02013201720202026 +203020322039203C203E2044207F20A320A720AB21052113211621222126212E215B2202 +2206220F221122152219221E222B22482260226425A125AA25CA25CF25E6F001F004FB01 +FFFFFFE30000FF1400A60099FF8A0000FE0F0000FF4C0078FF41FF28FCA00000FE170000 +0000FDD9FDD8FDD7FDD6FDA6E30B0000000000000000E085E095E109E084E0F9E156E077 +E0B70000E0900000E038E02BE123DF6ADF79E068E03CDE96DEA2DE8B0000DEA60000DE74 +DE71DE5FDE2FDE30DB9EDB96DAEEDB73DB5D10BE000005BE000100000082000000000000 +000002380000023800000000000000000000023800000242026800000000000000000000 +000002B203640368037600000000000000000000000000000000036A0000036A00000000 +000000000000000000000000000000000358000003580000000000000000000000000000 +0000000000000000034400000000000300A300840085037C009600E60086008E008B009D +00A900A40010008A01000083009300F000F1008D00970088010100DC00EF009E00AA00F3 +00F200F400A200AC00C800C600AD006200630090006400CA006500C700C900CE00CB00CC +00CD00E7006600D100CF00D000AE006700EE009100D400D200D3006800E900EB0089006A +0069006B006D006C006E00A0006F0071007000720073007500740076007700E80078007A +0079007B007D007C00B700A1007F007E0080008100EA00EC00B901440145010201030104 +010500FB00FC014601470148014900FD00FE01060107010800FF014A014B014C014D014E +014F0109010A010B010C0150015100F600F701520153015401550156015701580159015A +015B015C015D015E015F0160016100F800D50138013901620163016401650166010D010E +01670168010F01100111011200E000E1011301140169016A01150116013A016B016C016D +016E016F01700117011800AF00B00119011A01710172011B011C011D011E0173017400F9 +00FA00E200E3011F01200121012201750176017701780179017A017B017C012301240125 +0126017D017E017F01800181018200BA012701280129012A00E400E5018300D600DF00D9 +00DA00DB00DE00D700DD019D019E019F018A01A001A101A201A401A501A601A701A8012B +01A901AA01AB01AC012C01AD01AE01AF01B001B101B201B301B401B501B601B701B8012D +01B901BA01BB01BC01BD01BE01BF01C001C101C2012E01C301C4012F013001C501C601C7 +01C801C901CA01CB01CC01CD01CE023A01CF01D00131013201D1013301D201D301D401D5 +01D601D701D801D9025D025E025F0260026102620263026402650266026702680269026A +026B026C026D026E026F0270027102720273027402750276027702780279027A027B027C +027D027E027F028002810282028302840285028602870288034C034D034E034F03500351 +03520353035403550356035703580359035A035B035C035D035E035F0360036103620363 +036403650366036703680369036A036B036C036D036E036F037003710191019203740375 +037603770378037900B100B20238013400B500B600C3019300B300B400C4008200C10087 +00F50195037A00BC009900ED00C200A5019B019C023B023C023D023E023F024002410242 +0000001F001F001F001F00470070010401C0025F033C035503A203F10461049604C004DE +04F50520057F05B9063806DB072D07A70830086B090B099309B509F10A350A640AAA0B13 +0BF80C600CDC0D4F0DA00DD60E060E7A0EAE0EDB0F180F860FA61000104C10B8111711AE +122012B812DF132C13881407148814DF15221544156F159015C815DE15FE168916E71747 +17A01803184F18D11912193D198C19E51A001A761AB61B011B5D1BB81BF51C8B1CDB1D1B +1D741DD91E641EC21F041F631F7E1FDC203B205520FE21AA21BD21D021E9220222142226 +2238225322652278230A231C232E234023562369237C23B423EE2400241224242436244C +245E24702482249424AB24E62520259A260826EB270B274327C928832929297B299C29C2 +2A2D2A912B412BCD2C0D2C5A2CA82D0C2D4C2DCB2E3D2E722E9F2EE92F5E2F9F301130E7 +316D31D831FF3223326032DF336433A233F33443346D3480349334A6350E35AD35C735DD +361C365B368036A736E33728373F37593777382D3858388438E139313986399E39C43A03 +3AD73AEA3AFD3B103B243B373B4A3B5D3B773B8A3B9D3BB03BC33BD63BE93BFC3C173C47 +3C8E3CA63CEC3D003D493D7D3DB53DEA3E1B3E5B3E923EA53EB73ECA3EDC3F043F6B3FFF +40124024408840E441014135416941BB4239425A427E42AA42F643024314432743F044AF +44C244D444E744F9456F4586459E45B145C3465F47144727479D47A54806489348A648B8 +48CB48F0492B4961499249BC49CF49E149F44A064A1A4A2D4A404A534A664A794A8C4A9E +4AEE4B6C4B7F4BEC4C354C484C5C4C6F4C824C954CA84CBA4CDA4D584DDD4E3C4EC24F58 +4FB24FE1505D5081509D50E951DF51EF52085268528B52CA538353FD5425543F54665491 +54EA54FC550D551F55345546555B556D557E559055A455B655C755D955EE5600561556B8 +575B576D578757DE583458A458FC593F596C59C05A035A595AB15AC85B225B335B495BA2 +5BEB5C305C465C5C5CD25D2E5D405D515D635D745D855DEA5DFC5E105E4E5EBA5ECC5EDD +5EEF5F005F125F235FA2600E6020603260446055608561656246625C626E6285629A62B1 +62C362D562E762F963166332634963606388639E6422648E64AA64D76504653065556589 +65A265DD65F36611662F664F666E668E66B16700670867106752675A6762676A6772677A +67C367CB67D36812681A6840684868DA68E268EA68F2695D69DC69F66A106A216A376A48 +6A5B6A6F6AFD6B4A6BBD6BFF6C866C8E6D226D7A6DC16DC96E726E7A6ECF6F3B6F7A6FEA +705A70F370FB7112712371347146715A71C571DD7255725D7265727F7287731C738773DE +73F3749074C174C97521752975497594759C765676F2773A77AE783B7892789A78A278AA +78D078D878E078E8795979DE79E67A167A5D7A907ACD7B297B907BE47C5F7CCD7D367D3E +7DCA7E4C7E6C7EBC7EC47F7D8015804D80B18126817B81D38203820B82308238829A82C9 +82D1836C837483AC83EF8425846784C3852B858085F4865386BD86D38757876887D587DD +87E587ED87F5888B88F9894F896489EE8A258A4E8A7B8A918B238B488B6C8BBD8C398C73 +8CD88D0C8D8E8D8E8D8E8D8E8D8E8E208E8D8EF48F598F9F8FB58FBD8FC59006904590BD +9126916491A19209927292C09334938093D1944E94D395479558956C9586959B95B195C7 +95DD95F3960B96219633964996659683969596AA96BC96D196E396F8970A971F973E9759 +976A977B979697AE97C497D597ED97FF98179829983F985598679879989898B198C998DB +98ED98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF9911 +9922994099549970998999A199B399CB99E499FC9A159A359A4E9A659A769A909AA59ABB +9ACC9AE29AF99B0B9B1C9B2D9B3E9B549B659B7C9B949BAF9BC79BDD9BEE9C009C119C22 +9C339C4E9C649C759C8B9CA49CB89CCE9CDF9D639D6B9DDB0000037D01011C1C300E0E0B +0E010A01010E0E010F01010B0B0B0B0B0B0B0B0B0B01010E0E0E0B0C320E101923150E0F +740A0E2D240E0D0D0D0E322C1D322E1C111C0101010101010D0D0E0D0D1C0D0BB4010EB4 +110B100D0D2A11110B0A100F0A11010E0101323210230E0D1D0D0D0D0D0D0D0E0D0D0D0D +B4B4B4B40B10101010100B0B0B0B0B010B0B01010B0101010101010E330D010E0E0E0B10 +010101010B0101010E100B300E010B010127270132320D011C0B01010101010E010A1101 +01010101010B010101013223322323747474740D0D0D1D1D1DB401010101010101010101 +0AD732111C110E1001110A0D0D0E01010101010101010E0D743211100E100E0D0101320D +320D190D10230D230D2DB42D322D010E0B0E0B0D100E2A0E2A32112C112C111D0B1D0B1C +111C11100D130D2612181110010D010A0A110E01240A121901011901320D100E100E230D +230D230D0E0D0E0D0E0D0F0B0F0B74B474B474B474B40A010E0E0E2DB40E0B0E0B0D100D +100E2A32112C111D0B1D0B1D491D182E10110A01320D330E0D10012E102E102E10110A01 +010B01010101012E010101320E1C10160C27B4320E01231C0F740E0A240E300D0F0D1E2C +111C111474110D120BB40B0B0F0D0B0DB40D0A130A011010010B0C1010B40B100B10230A +100D3274740A0C0E010E1111320E0E10012311010E0E0E12240F0D0F0D102C11131C2D22 +11111F2D0E0D01100D240A010D0D301210100B011D1010100D0F110A170F270D11320C11 +0C0E0D0A0D0B010E11B4B4010A0E0B0B0A10100A01011001010101010101010101012D10 +282001010101010101010101010101010101010101320D320D320D320D320D320D320D32 +0D320D320D320D320D230D230D230D230D230D230D230D230D74B474B401010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010D100D100D100D100D100D100D102D102D102D102D102D101D0B1D0B +28202820282028202820110A110A110A110A0D010B00000000000001000101010101000C +00F808FF00080008FFFE0009000AFFFE000A000AFFFE000B000BFFFE000C000CFFFE000D +000DFFFD000E000EFFFD000F000FFFFD0010000FFFFD00110011FFFD00120012FFFC0013 +0013FFFC00140015FFFC00150015FFFC00160016FFFC00170017FFFB00180018FFFB0019 +001AFFFB001A001BFFFB001B001BFFFB001C001CFFFA001D001DFFFA001E001EFFFA001F +0020FFFA00200020FFFA00210021FFF900220022FFF900230023FFF900240025FFF90025 +0026FFF900260026FFF800270027FFF800280028FFF800290029FFF8002A002BFFF8002B +002BFFF7002C002CFFF7002D002DFFF7002E002EFFF7002F0030FFF700300031FFF60031 +0031FFF600320032FFF600330033FFF600340034FFF600350036FFF500360036FFF50037 +0037FFF500380038FFF500390039FFF5003A003BFFF4003B003CFFF4003C003DFFF4003D +003DFFF4003E003EFFF4003F003FFFF300400041FFF300410041FFF300420042FFF30043 +0043FFF300440044FFF200450046FFF200460047FFF200470047FFF200480048FFF20049 +0049FFF1004A004AFFF1004B004CFFF1004C004DFFF1004D004DFFF1004E004EFFF0004F +004FFFF000500051FFF000510052FFF000520052FFEF00530053FFEF00540054FFEF0055 +0055FFEF00560057FFEF00570058FFEE00580058FFEE00590059FFEE005A005AFFEE005B +005CFFEE005C005DFFEC005D005DFFEC005E005EFFEC005F005FFFEC00600060FFEC0061 +0062FFEB00620062FFEB00630063FFEB00640064FFEB00650065FFEB00660067FFEA0067 +0068FFEA00680068FFEA00690069FFEA006A006AFFEA006B006BFFE9006C006DFFE9006D +006DFFE9006E006EFFE9006F006FFFE900700070FFE800710072FFE800720072FFE80073 +0073FFE800740074FFE800750075FFE700760076FFE700770078FFE700780078FFE70079 +0079FFE7007A007AFFE6007B007BFFE6007C007DFFE6007D007DFFE6007E007EFFE6007F +007FFFE500800080FFE500810082FFE500820083FFE500830083FFE500840084FFE40085 +0085FFE400860086FFE400870088FFE400880088FFE400890089FFE3008A008AFFE3008B +008BFFE3008C008DFFE3008D008EFFE3008E008EFFE2008F008FFFE200900090FFE20091 +0091FFE200920093FFE200930093FFE100940094FFE100950095FFE100960096FFE10097 +0098FFE100980099FFE000990099FFE0009A009BFFE0009B009BFFE0009C009CFFE0009D +009EFFDF009E009EFFDF009F00A0FFDF00A000A0FFDF00A100A1FFDF00A200A3FFDE00A3 +00A4FFDE00A400A4FFDE00A500A6FFDE00A600A6FFDE00A700A7FFDD00A800A9FFDD00A9 +00A9FFDD00AA00ABFFDD00AB00ABFFDD00AC00ACFFDC00AD00AEFFDC00AE00AFFFDC00AF +00B0FFDC00B000B0FFDC00B100B1FFDB00B200B2FFDB00B300B4FFDB00B400B5FFDB00B5 +00B6FFDB00B600B6FFDA00B700B7FFDA00B800B9FFDA00B900BAFFDA00BA00BBFFDA00BB +00BBFFD900BC00BCFFD900BD00BDFFD900BE00BFFFD900BF00C0FFD900C000C1FFD800C1 +00C1FFD800C200C2FFD800C300C4FFD800C400C5FFD800C500C5FFD700C600C6FFD700C7 +00C7FFD700C800C8FFD700C900CAFFD700CA00CBFFD600CB00CCFFD600CC00CCFFD600CD +00CDFFD600CE00CFFFD600CF00D0FFD500D000D0FFD500D100D1FFD500D200D2FFD500D3 +00D3FFD500D400D5FFD400D500D5FFD400D600D7FFD400D700D7FFD400D800D8FFD400D9 +00DAFFD300DA00DBFFD300DB00DCFFD300DC00DCFFD300DD00DDFFD300DE00DEFFD200DF +00E0FFD200E000E0FFD200E100E2FFD200E200E2FFD200E300E3FFD100E400E5FFD100E5 +00E6FFD100E600E7FFD100E700E7FFD100E800E8FFD000E900E9FFD000EA00EBFFD000EB +00EBFFD000EC00ECFFD000ED00EDFFCF00EE00EEFFCF00EF00F0FFCF00F000F1FFCF00F1 +00F2FFCF00F200F2FFCE00F300F3FFCE00F400F4FFCE00F500F6FFCE00F600F7FFCE00F7 +00F7FFCD00F800F8FFCD00F900F9FFCD00FA00FBFFCD00FB00FCFFCC00FC00FDFFCC00FD +00FEFFCC00FE00FEFFCC00FF00FFFFCCB8FFC0401EB229323610B220B240B250B270B280 +B2A0B2B0B2D0B2E0B20AC0B2F0B202B8FFC04070B51718361F44010F561F56024F555F55 +026F54019F54AF54025153170452531604535215044A4952044649370447493204484932 +04493539043C3F32043D3F3D043E3F2104433F1D04423F5204413F5204403F52043F3532 +0432336404333534043534540434351E04D034E034F03403B8FFEEB3B4254836B8FFE0B3 +B4102336B8FFEE400DB4090F36B41A480476B386B302B8FFF0B3B3254836B8FFFA40FFB3 +092436B314480489881304706C7078020F9CDF9E02409D161936409C161B364097171936 +4096171B368685131F0F840F850F8E0F8F0F901F841F8E1F8F2F8E808580888F91908590 +8790880F40820910360F721F72024071090C360F6D0120C80120C7013FC6EFC60220C540 +C50200620100621062024061A061020F5B012D1411042C1425042B1439042A1413042914 +15041F141E042120430420143C04C91A45041A1B47041B1A3C041A143204151439041314 +480412141A0411141A0470140140144143360F0E2A1F0006010DC34B1F0CC24B1F0AC04B +1F09C04B1F05BC4B1F04BD4B1F03B94B1F02BA4B1F01B64B1F00B74B1FC3C22A1FC0BF2A +1FBD4056BC211FBAB9211FB7B6211FC2C3C40DBFC0C10DBCBDBE0CB9BABB0CB6B7B80C10 +BC80BC0240B980B9020FB63FB64FB67FB6040FB62FB63FB66FB67FB6BFB6CFB6FFB6080A +0937040C0D02050402030202010002500501B801FF858D8D1DB0964B5258B0801D59B808 +004B5458B001B0018E59B0084B5358B001B0018E59002B2B2B2B2B737473732B2B2B2B2B +2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB00345B006456861B006234473B00345B00E456861 +B00E2344B00E45B00F456861B00F23442B01B0144568B01423442B732B2B2B2B2B2B2B2B +2B2B2B2B2B2B2B2B7373737373737373732B732B732B2B2B2B2B73732B2B2B2B732B2B2B +2B00752B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73747373742B73742B400C3736 +26251F13120D0C0504022C20B003254523452361688A204568208A234460442D2C4B5258 +45441B2121592D2C202045684420B001602045B0467668188A4560442D2CB0122BB00225 +45B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C +60B0022523442121212D2CB100032545685458B0032545B0032545606820B004252344B0 +042523441BB00325204568208A2344B00325456860B003252344592D2CB0032520456820 +8A2344B00325456860B0032523442D2C4B525845441B2121592D2C462346608A8A462320 +468A608A61B8FF8062232010238AB14B4B8A70456020B0005058B00161B8FFBA8B1BB046 +8C59B0106068013A2D2C2045B003254652583F1B2111592D2C4B53234B515A5820458A60 +441B2121592D2C4B53234B515A58381B2121592D061E061405F005D1047C045D03DD0010 +0000FFE7FFE1FE78FE64FE590394001FFFFF009600AA00B900C600CEFFFFFFFFFFFFFFFF +00BC00C2FFFFFFFF007600B200C000CBFFFFFFFFFFFFFFFFFFFFFFFF0081009400A600CC +00DA00EFFFFFFFFFFFFFFFFF0098009E00AB00B0FFFFFFFFFFFFFFFFFFFFFFFF00900098 +009E00A400A900AE00B300BA00C3FFFF00880091009800A500ACFFFFFFFFFFFFFFFFFFFF +006F0087008F009B00A000D3011DFFFFFFFFFFFF00C3021401C2FFFFFFFF00E9000C02D1 +0173018E001A002C0044005C0073007E008600B200C8014C001A003D00440050005C0072 +0078009200B200B900C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003D0056005D006A +006E00B100B900C1FFFFFFFF002A003D00540064006A00B100B9FFFFFFFFFFFF0071007A +008900A100A700BB006F007A00870091009AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +008102210221007400E500B900CA019502C600AC00A700850614000A000005D1001F0000 +045D001F00000000FFE10000FE64FFF50000036202F402A2029100AF026A004C08000100 +0000000002D0000002D000000326012303AC00A8068C00C30516009B089C009505D00073 +022600A403A200B503A20093051600A7068C00D202E9009303A2009902E900FD03A2FFE2 +0516008905160116051600A1051600A70516004D051600BB051600890516009A0516007A +0516007103A2015A03A200E6068C00FE068C00F5068C010C045D00A0080000B00578001A +057C00C805960073062A00C8050F00C8049900C806340073060300C8035E008903A3002C +058B00CD047400C806BE00C805FC00C8064C007304D300C8064C0073059000C805780086 +04EE000005DB00B20578001A07E9005C057B004404EC0006057B007E03A200EF03A20046 +03A200AB068C00BA0516FFFC0516015404CE006804FC00B9042B006904FC006C04C4006A +02D0004404FC006C051000B9023200AF02C1FFC204BC00C1023200BB07C800B9051000B9 +04DB006A04FC00B904FC006C036A00B9042B006E0327003E051000B104BC003D068C0056 +04BC003C04BC003D0434005D051400AD03A2017A051400BB068C00BB0578001A0578001A +05960073050F00C805FC00C8064C007005DB00B204CE006804CE006804CE006804CE0068 +04CE006804CE0068042B006904C4006A04C4006A04C4006A04C4006A023200A00232FFEB +0232FFF502320005051000B904DB006A04DB006A04DB006A04DB006A04DB006A051000B1 +051000B1051000B1051000B1051600BB0456009A0516009F05160089051600AC045D00B9 +0516008904F600B90800009F0800009F07D000AA0516021D0516015A068C00F507E0000E +064C0073080000A1068C00D7068C00FE068C010C0516006C052200BE0516009505D100BB +068C009005A900710516008A045D0097045D0079068C006B07A4006804DB005D045D0071 +03260123068C00D2068C00860516FFDC068C00F305D10032052800A6052800AE068C00B2 +0578001A0578001A064C0073088F007807DA006A051600990800009903ACFFED03AC0096 +0226FFED022600A0068C00D2068C00AC04BC003D04EC000602E4FF9A0516000003A200BA +03A200C20500004405020044051600BB02E900FD0226FFF603ACFFF60C2C00950578001A +050F00C80578001A050F00C8050F00C8035E0089035E005D035E007E035E0089064C0073 +064C0073064C007305DB00B205DB00B205DB00B2023200BB05160136051600ED05160118 +05160113051602210516012D05160161051601560516019F05160132047E001802460018 +05780086042B006E057B007E0434005D03A2017A0634000E04E5006A04EC000604BC003D +04D800C804FC00B9068C00DC068C012304560123045600CF045600CF080000AB080000AB +0800008C0516003C0634007304FC006C035E008905780086042B006E05960073042B0069 +05960073042B006904FC006C0516FFFC02E900FD0578001A04CE00680578001A04CE0068 +062A00C8052E006C0634000E050F00C804C4006A050F00C804C4006A047400C8023200AB +047400C8025E00BB047400C803AB00BB05FC00C8051000B905FC00C8051000B9064C0073 +04DB006A059000C8036A00B9059000C8036A009205780086042B006E04EE00000327003E +04EE00000327003E05DB00B2051000B105DB00B2051000B1057B007E0434005D057B007E +0434005D048800C8064C0073068D006904FC006C04DD006A041A006D050B006A03F8000A +065200680516FFFC04FF0123045D009A094F00C806F7008904E900AF05D8000002E400D5 +047500D5089C00950296000F04D5009202D6008302D6008304D500B102D600700578001A +04CE006805960073042B006905960073042B0069050F00C804C4006A050F00C804C4006A +050F00C804C4006A0634007304FC006C0634007304FC006C0634007304FC006C060300C8 +051000B90603002005100013035E002C0232FFF2035E005F0232FFFC035E008002320001 +035E00890232008E03A3002C02C1FFC2058B00CD04BC00C104BC00C1047400C802320005 +05FC00C8051000B905FC00C8051000B9064C007304DB006A064C007304DB006A059000C8 +036A001B05780086042B006E04EE00000327003E05DB00B2051000B105DB00B2051000B1 +05DB00B2050B00B105DB00B2050B00B107E9005C068C005604EC000604BC003D026700B9 +0578001A04CE006807E0000E07A40068064C007304DB005D03A2015A07E9005C068C0056 +07E9005C068C005607E9005C068C005604EC000604BC003D0226FFED0516FFD005160089 +05BE00B1080000AB0800008C0800008A0800009901B00061051601610516021205160100 +057800070602000006F6000004510000070C000006070000074300000232FFCB0578001A +057C00C805A0001A050F00C8057B007E060300C8035E0089058B00CD057C001A06BE00C8 +05FC00C805310072064C0073060300C804D300C80561007604EE000004EC0006057B0044 +06F700B3068C006C035E007E04EC000604FC006C041A006D051000B9023200A0050D00B1 +04F600B904BC003D03A9006C051000B904FE0089023200BB04BC00C104BC003D051E00B9 +04BC003D0406006804DB006A050000B904100069050D00B104B80030069300B006820071 +02320005050D00B104DB006A050D00B106820071050F00C80657FFFF048800C8059B0073 +05780086035E0089035E007E03A3002C08F2001208D300C8068BFFFF058B00CD04EC0006 +060300C80578001A057C00C8057C00C8048800C805F7000A050F00C807C9002004ED0051 +060100C8060100C8058B00CD05E0001206BE00C8060300C8064C0073060300C804D300C8 +0596007304EE000004EC0006068D0069057B0044061700C805B2008E083E00C8085C00C8 +06440000075D00C8057200C8059C0061084600C805A6002C04CE006804EA007404C200B9 +03C500B904F9000904C4006A0662003404320041051F00B9051F00B904BC00C104F7001D +059200B9051900B904DB006A051900B904FC00B90446006A03F8000A04BC003D06BA006F +04BC003C052800B904D8008E070200B9071A00B90520000A065B00B9049100B904600053 +06B600B904CC004304C4006A0510001303C500B90460006A042B006E023200AF02320005 +02C1FFC20750001D075000B90510001304BC00C104BC003D051900B9048800C803C500B9 +080000CB096000C8051900B904560119045600EF045600E6045600B3045600E6045600F3 +045600C5000000000000000000000000000000000674007304DB006A060D00B2054700B1 +0000020900000221000001540000021D0516013605160003051601360516012505160142 +051601420516014205160125051602090516013605160142051601420516014205160142 +051601360578001A04CE00680578001A04CE00680578001A04CE00680578001A04CEFFE3 +0578001A04CE00680578001A04CE00680578001A04CE00680578001A04CE00680578001A +04CE00680578001A04CE00680578001A04CE00680578001A04CE0068050F00C804C4006A +050F00C804C4006A050F00C804C4006A050F00C804C4006A050F002904C4FFFC050F00C8 +04C4006A050F00C804C4006A050F00C804C4006A035E008902320096035E0089023200AF +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000064C007304DB006A064C0073 +04DB006A064C007304DB006A064C007304DBFFE5064C007304DB006A064C007304DB006A +064C007304DB006A0674007304DB006A0674007304DB006A0674007304DB006A06740073 +04DB006A0674007304DB006A05DB00B2051000B105DB00B2051000B1060D00B2054700B1 +060D00B2054700B1060D00B2054700B1060D00B2054700B1060D00B2054700B104EC0006 +04BC003D04EC000604BC003D04EC000604BC003D04EC000604BC003D04FC006C000000ED +0516008A0000001F00000380090E09000303050507070B07030404070703050304070707 +070707070707070404070707060A08070808070608080505070609080907090707070808 +090707070404040706060606060606030606030306030906060606040604060607060605 +060506070808080708090806060606060606060606060303030306060606060606060606 +07050707060507060909090606070A090907070707060607070607050507090606050707 +0707070606070808090A0907090404020207070607030604040606070302040E08070807 +070505050509090908080803060606060606060606060603070607050508060706070607 +070505050909090608060507060806080606060308060806080608070607060603060306 +040806080609060704070407060704070408060806070507050609070606050605090606 +050B09060703050B03050303050308060806080607060706070608060806080608060806 +050305030503050305030706060603080608060906090607040706070408060806080608 +06090707060308060A090906040907090709070706020607060909090902060606080809 +060908090308070607070805070809080709080706070707090905070605060306060505 +060603060606060506060506050907030606060707080608070505050A0A070707070807 +070607070906080807070908090807080707070708070909080907080907060606040606 +070506060606070606060606050609060705090907080606080606060406060303030909 +060606060505090B06050505050505050000000009060806000000000606060606060606 +060606060606060806080608060806080608060806080608060806080608060706070607 +060706070607060706070605030503000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000090609060906 +090609060906090609060906090609060906080608060806080608060806080607060706 +07060706060007000A0F0A000404040508070B0703050507080405040507070707070707 +0707070505080808060A070708080606080805050706090709070908070708070B070707 +0505050806060707050707040707030307030B0707070704060407060707060606050608 +070708060709080707070707070507070707030303030707070707070707070707050707 +060507060A0A0A0606080A090A080808070706070807070505080A070604080807080706 +06080707090B0A070A0505030308080607040605050606070403050F0706070606050505 +050909090808080306060606060606060606060307060706050806070607070808050505 +0A0A0A060807050706080508050706040707070708070806070607060306030605070707 +0709070804080407060704070408070807070607060609090707050705090606050C0906 +0704060B0306040406040707080508050607060706070807080708070807080705030503 +0503050305030707070603070707070907090708040706070408070807080708070B0707 +060307070A0A0907050B070B070B070706030607070A0A0A0A0206060607070906090909 +030707070607080507070907070908070707070709090507070507030707070507070307 +0607060507070507060909030707070906080608070505050B0B08070708070707060706 +0906080807070908090807080707090709070B0B080907080A0707070605060707050707 +0706070707070705050609070706090A0708060608060707050606030303090907070607 +06050A0C0705050505050505000000000907080700000000060606060606060606060606 +060606070707070707070707070707070707070707070707070707060706070607060706 +070607060706070503050300000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000009070907090709070907 +090709070907090709070907090708070807080708070807080708070706070607060706 +070007000B110B000404040509070C080305050709040504050707070707070707070705 +05090909060A080809090706090805050806090809070908080708080B08070805050509 +07070707060707040707030407030B070707070506040707090707060705070908080907 +080908070707070707060707070703030303070707070707070707070706070707060707 +0B0B0B0707090B090B090909070707080908070606090B07060409090709080707090808 +090C0B070B05050303090907070407050507070704030511080708070705050505090909 +08080803070707070707070707070603080608060509070707070709090606060B0B0B07 +090705080609060906070704080708070907090707070706030603060508070807090708 +05080508060704070408070807080608060609090707060705090707060D0A070804060C +040704040704080709060906070707070707090709070907080708070503050305030503 +05040807070603080708070907090708050806070408070807080708070B090707030807 +0B0B0907050B090B090B090707030707080B0B0B0B02070707080809060A090903080808 +070808050808090807090807070707080909050707060703070707050707030707070706 +07070607070909030707070907090609080505050D0C090808080808080608070B070808 +08080908090807090708090809080B0C090A07090B080707070508070906070707070707 +07070706050709070807090A080907070A0707070507060303040A0B0707070706050B0D +070606060606060600000000090708070000000007070707070707070707070707070708 +070807080708070807080708070807080708070807080707070707070707070707070707 +070707050305030000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000907090709070907090709070907 +090709070907090709070807080708070807080708070807070707070707070707000700 +0C120C00040405060A080D09030505080904050405080808080808080808080505090909 +070C0808090908070909050508070A090A080A08080709080D0807080505050A08080808 +060808040808030407030B0808080805070508070B0707070805080A08080908090A0908 +08080808080608080808030303030808080808080808080808070808080708070C0C0C08 +08090C0A0C090909080808090A080807070A0B080705090A080A0908080A08080A0D0D08 +0C06060303090A070704080505080808040306120808080808050505050A0A0A09090903 +0808080808080808080807030807080705090707070808090A0707070C0C0C0809080508 +07090609060808040808080809090908080808070307040706090809080A080805080508 +07070507050908090808070807070A0B0808060807090808070E0A070904070D04070404 +070408080906090608080808080809080908090809080908050305030503050305040807 +070703090809080A080A0808050807070509080908090809080D0B07070408080C0B0A08 +050D0B0D0B0D0B0707030808090C0C0C0C0308080808090A060B090B0308080808080905 +08080A09080A0908080707080B0A05070806080308070706080803080708070608080608 +070B0B030808080B080A0709080505050D0D0A0808090808080709080D07090908090A09 +0A09080907080B0809090D0E090B08090C080808070608080B0608080707080808080806 +07070B0709080B0C080907080B0708080608070303040B0B0807070807060C0E08070707 +07070707000000000A080908000000000808080808080808080808080808080808080808 +080808080808080808080808080808080808080808080808080808080808080808080805 +030503000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000A080A080A080A080A080A080A080A080A08 +0A080A080A0809080908090809080908090809080707070707070707080008000D140D00 +050505050A080D09030606090905070506080808080808080808080606090909070D0908 +090908080909050608070B090A080A08090909090D0909090606060B0808080808080805 +0808030407030B0808080805070608080B0708070807080B09090908090A090808080808 +080808080808030303030808080808080808080808070808080708080D0D0D0808090C0A +0D090909080808090B090807070B0B080705090B080B0908080B09090A0E0D080D060603 +03090B080905080606080808050306140908090808050505050A0A0A0909090308080808 +08080808080807030907090707090809080808090B0707070D0D0D080908050907090809 +080808050908090809080908080808070307040706090809080A08080508050907090609 +060908090809070907070A0B08080708070B0808070F0B080A05070E0408050508050908 +090809080808080808080908090809080908090805030503050305030604080707070309 +0809080A080A0808050907090609080908090809080D0B09080409080C0B0A08060D0B0D +0B0D0B0908030808090D0D0D0D0308080809090A060B0A0C030908090809090508090B09 +080A0908090909090B0B05090807080308080906080803080808080708080708080B0B03 +0808080B080A0709090505060F0D0B080909090808070A080D080909080A0B090A090809 +09090B090A090D0E0A0C08090D080808080608080B070808080809080808080807080B07 +09080B0C080907080B0808080608070303040C0D0808080807060D0F0807070707070707 +000000000A08090900000000080808080808080808080808080808090809080908090809 +080908090809080908090809080908080808080808080808080808080808080503050300 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000A080A080A080A080A080A080A080A080A080A080A08 +0A0809080908090909090909090909090908090809080908080008000E150E0005050606 +0B090F0A040606090B050705060909090909090909090906060B0B0B080E0A0A0A0B0908 +0B0A05060A080B0A0B080B0A0A090A0A0F0A090A0606060B090908090709080509090305 +08030D0909090906080609080B0908080906090B0A0A0A090A0B0A080808080808070808 +0808030303030909090909090909090909080909090809090E0E0E09090B0E0B0E0B0B0B +0909090A0B0A0908080B0D0908060B0B090B0A09090B0A0A0B0F0E090E060604040B0B08 +0905090606090909050406150A090A0909050505050B0B0B0A0A0A030909090909090909 +090908030A080A08060B09090808090B0B0808080E0E0E090B09050A080A070A07090905 +0A080A080B090B090809080803080408060A090A090B090A060A060A08090609060A090A +090A080A08080B0B09090709070B090908100C080A05080F0508050508050A080A070A07 +0908090809080B090B090B090A090A09050305030503050306050A080808030A090A090B +090B090A060A0809060A090A090A090A090F0B0908040A080E0D0B09060F0B0F0B0F0B09 +080409090A0E0E0E0E030909090A0B0C070C0B0C030A0A0A090A0A050A0A0B0A090B0A08 +0909090A0B0B05090907090309090906090903080809080709090709080B0B030909090B +090B080A0A050506100F0B0A090B0A0A0A080A090F090B0B0A0A0B0A0B0A080A09090B0A +0B0A0D0E0B0D0A0A0E0A0809080709080B07090908090A090909090807080B090A080B0C +090B08080C0808090708080303050D0D0908080908070E10090808080808080800000000 +0B090B0A000000000909090909090909090909090909090A080A080A080A080A080A080A +080A080A080A080A080A0809080908090809080908090809080908050305030000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000B090B090B090B090B090B090B090B090B090B090B090B090A09 +0A090B0A0B0A0B0A0B0A0B0A0908090809080908090009000F170F00050506070C0A100B +0407070A0C050705070A0A0A0A0A0A0A0A0A0A07070C0C0C080F0A0A0B0B09090C0B0507 +0A080D0B0C090C0A0A090B0A0F0A090A0707070C0A0A0909080909050909030509030F09 +0A090906080609090D0909090A070A0C0A0A0B090B0C0B09090909090908090909090303 +0303090A0A0A0A0A090909090A080A0A0A080A090F0F0F0A0A0C0F0C0F0C0C0C0A090A0B +0C0B0A08080C0E0A08060C0C0A0C0B0A0A0C0A0A0C100F0A0F070704040C0C0909050A07 +0709090A050407170A090A0909050505050C0C0C0B0B0B030A0A0A0A0A0A0A0A0A0A0803 +0A080A09070B09090909090C0C0808080F0F0F0A0C09050A080B080B08090A050A090A09 +0B0A0B090909090803080408070B090B090C0A0A060A060A08090609060B090B090A090A +09090C0D090A080A070B0A0908110D080B0508100509050509050A090B080B0809090909 +09090C090C090C090B090B09050305030503050307050A090908030B090B090C0A0C0A0A +060A0809060B090B090B090B080F0D0909050A090F0E0C0A070F0D0F0D0F0D0909040A0A +0B0F0F0F0F030A0A0A0A0B0D070D0B0D030A0A0B090A0B050A0A0D0B0A0C0B090A09090A +0D0C0509090809030909090709090309090909080A0A0809090B0D03090A090D090C090B +0A05050711110C0A0A0B0A0A0A090B090F090B0B0A0B0D0B0C0B090B090A0D0A0B0B0F10 +0C0E0A0B100A0909090709090D08090909090A090A09090807090D090A090D0E0A0C0908 +0D0909090708080303050E0E0909090909070F120908080808080808000000000C0A0C0A +000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090A090A090A090A090A +090A090A090A090909090909090909090909090909090905030503000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B090B090C0A +0C0A0C0A0C0A0C0A090909090909090909000A0010181000060606070D0A110C0407070A +0D060706070A0A0A0A0A0A0A0A0A0A07070D0D0D09100B0B0B0C0A090C0C07070B090D0C +0D0A0D0B0A0A0C0B110B0B0B0707070D0A0A0A0A080A0A060A0A050609050F0A0A0A0A06 +09070A090D0909090A070A0D0B0B0B0A0C0D0C0A0A0A0A0A0A080A0A0A0A050505050A0A +0A0A0A0A0A0A0A0A0A090A0A0A090A0A1010100A0A0D100D100D0D0D0A0A0A0C0D0B0A09 +090D0F0A09060D0D0A0D0C0A0A0D0B0B0D11100A10070704040D0D090B060A07070A0A0A +060407180B0A0B0A0A070707070D0D0D0C0C0C050A0A0A0A0A0A0A0A0A0A09030A090B09 +070C0A0B090A0A0D0D0909091010100A0C0A070A090B080B080A0A060B0A0B0A0C0A0C0A +0A0A0A0905090509070C0A0C0A0D0A0B060B060A090A070A070C0A0C0A0B090B09090D0D +0A0A090A070D0A0A09130E0B0C060911050A06060A060B0A0B080B080A0A0A0A0A0A0C0A +0C0A0C0A0C0A0C0A070507050705070507060B090909050C0A0C0A0D0A0D0A0B060A090A +070C0A0C0A0C0A0C0A110D0B09050B0A100F0D0A07110D110D110D0B09040A0A0B101010 +10030A0A0A0B0C0E090E0C0E050B0B0B0A0B0C070B0B0D0C0A0D0C0A0B0A0B0B0D0D070B +0A090A050A0A09070A0A0509090A09080A0A080A090D0D050A0A0A0D0A0D090B0A070707 +12120D0B0B0B0B0B0B090C0A110A0C0C0B0C0D0C0D0C0A0B0A0B0D0B0C0B0F100D0E0B0B +110B0A0A0A080A0A0D090A0A090A0B0A0A0A0A0907090D090A0A0D0E0A0C09090D0A0A0A +0809090505060F0F0A09090A090810130A09090909090909000000000D0A0D0B00000000 +0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B +0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0705070500000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0A0C0A0D0B0D0B0D0B +0D0B0D0B0B090B090B090B090A000A00111A1100060607080E0B120C0508080B0E060806 +080B0B0B0B0B0B0B0B0B0B08080E0E0E09110C0C0C0D0B0A0D0D08080C090E0D0D0A0D0C +0C0A0C0C110C0A0C0808080E0B0B0A0B090B0A060B0B05060A05110B0A0B0B0709070B0A +0E0A0A090B080B0E0C0C0C0B0D0D0C0A0A0A0A0A0A090A0A0A0A050505050B0A0A0A0A0A +0B0B0B0B0B090B0B0B090B0B1111110B0B0E110D110E0E0E0B0B0B0C0E0C0B09090E100A +09070E0E0B0E0C0B0B0E0C0C0D12110B11080805050E0E0A0A060B08080B0B0B0605081A +0C0B0C0B0B080808080D0D0D0C0C0C050B0B0B0B0B0B0B0B0B0B0A050C090C09080D0A0A +0A0A0B0E0E0909091111110B0D0B080C090C090C090B0B060C0A0C0A0D0B0D0B0A0B0A09 +05090509080D0B0D0B0D0A0C070C070C090A070A070C0B0C0B0C090C090A0D0E0B0A080B +080D0B0B09140F0A0C060912060A06060A060C0A0C090C090B0A0B0A0B0A0D0B0D0B0D0B +0D0B0D0B080508050805080508060C0A0A09050D0B0D0B0D0A0D0A0C070C090A070C0B0C +0B0C0B0C0B110E0A0A050C0A11100D0A08110E110E110E0A0A050B0B0C11111111040B0B +0B0C0D0F090F0D10050C0C0C0B0C0D080C0C0E0D0B0D0D0A0B0A0A0C0F0E080A0B080B05 +0B0B0A080B0B050A0A0B0A090A0B090B0A0E0E050B0A0B0E0B0D0A0C0C08080813130E0C +0A0D0C0C0C0A0D0B110A0D0D0C0D0E0D0D0D0A0C0A0A0E0C0D0C12120D100C0C120C0A0A +0A080B0A0E080B0B0A0B0C0B0A0B0B09080A0D0A0C0A0F0F0B0E0A090E0A0A0B08090905 +050610100B0A0A0B0A0811140B09090909090909000000000D0A0D0B000000000B0B0B0B +0B0B0B0B0B0B0B0B0B0B0B0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B +0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A080508050000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000D0A +0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0B0C0B0D0B0D0B0D0B0D0B0D0B +0A0A0A0A0A0A0A0A0B000B00121B1200060607080F0B130D0508080B0F070807080B0B0B +0B0B0B0B0B0B0B08080F0F0F0A120C0C0D0E0B0A0E0E08080C0A0F0D0E0B0E0D0C0B0D0C +120C0B0C0808080F0B0B0B0B090B0B060B0B05060B05120B0B0B0B0809070B0B0F0B0B09 +0B080B0F0C0C0D0B0D0E0D0B0B0B0B0B0B090B0B0B0B050505050B0B0B0B0B0B0B0B0B0B +0B0A0B0B0B0A0B0B1212120B0B0F120E120F0F0F0B0C0B0D0F0D0B0A0A0F110B0A070F0F +0B0F0D0C0C0F0C0C0E13120B12080805050F0F0B0B070B08080B0B0B0705081B0C0B0C0B +0B080808080E0E0E0D0D0D050B0B0B0B0B0B0B0B0B0B0A050C090C09080E0B0B0B0B0B0F +0F0A0A0A1212120B0E0B080C090D090D090B0B070C0B0C0B0E0C0E0B0B0B0B0A050A050A +080D0B0D0B0E0B0D080D080C090B070B070D0B0D0B0C090C090A0E0E0B0B090B090E0B0B +0A15100B0D070A13060B06060B060C0B0D090D090B0B0B0B0B0B0E0B0E0B0E0B0E0B0E0B +080508050805080508060C0B0B0A050D0B0D0B0E0B0E0B0D080C090B070D0B0D0B0D0B0D +0B120F0B0B050C0B12110E0B08120F120F120F0B0B050B0B0D12121212040B0B0B0C0E10 +0A100E10050C0C0D0B0C0E080C0C0F0D0C0E0E0B0C0B0B0C100E080B0B090B050B0B0B08 +0B0B050B0B0B0B090B0B090B0B0F0F050B0B0B0F0B0E0A0D0C08080814140F0C0B0E0C0C +0C0A0D0B120B0E0E0C0D0F0E0E0E0B0D0B0B0E0C0E0D13130E110C0D130D0B0B0B080B0B +0E090C0C0B0B0D0B0B0B0B0A090B0F0B0C0B10100C0E0A0A0F0B0B0B080A090505061010 +0B0B0B0B0A0812150B0A0A0A0A0A0A0A000000000E0B0D0B000000000B0B0B0B0B0B0B0B +0B0B0B0B0B0B0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0B0B0B0B0B +0B0B0B0B0B0B0B0B0B0B0B08050805000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000E0B0E0B0E0B +0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0B0B0B0B +0B0B0B0B0B000B00131D130007070709100C140E0509090C10070907090C0C0C0C0C0C0C +0C0C0C09091010100A130D0D0D0F0C0B0F0E08090D0B100E0F0B0F0D0D0C0E0D130D0C0D +090909100C0C0B0C0A0C0B070C0C06070B06120C0C0C0C080A070C0B100B0B0A0C090C10 +0D0D0D0C0E0F0E0B0B0B0B0B0B0A0B0B0B0B060606060C0C0C0C0C0C0C0C0C0C0C0A0C0C +0C0A0C0C1313130C0C10130F131010100C0C0C0E100D0C0A0A10120C0A0710100C100E0C +0C100D0D0F14130C130909050510100B0C070C09090C0C0C0705091D0D0C0D0C0C080808 +080F0F0F0E0E0E060C0C0C0C0C0C0C0C0C0C0B060D0A0D0A090F0C0C0B0C0C10100A0A0A +1313130C0F0C080D0A0D0A0D0A0C0C070D0B0D0B0F0C0F0C0B0C0B0B060B060B090E0C0E +0C0F0C0D080D080D0A0C070C070E0C0E0C0D0A0D0A0B0F100C0C0A0C090F0C0C0A16110C +0E070B14060B07070B070D0B0D0A0D0A0C0B0C0B0C0B0F0C0F0C0F0C0E0C0E0C08060806 +0806080609070D0B0B0B060E0C0E0C0F0C0F0C0D080D0A0C070E0C0E0C0E0C0E0C13100C +0B060D0B13120F0C091310131013100C0B050C0C0E13131313040C0C0C0D0E110A110E11 +060D0D0D0C0D0E080D0D100E0C0F0E0B0D0C0C0D110F080C0C0A0C060C0C0B090C0C060B +0B0C0B0A0C0C0A0C0B100F060C0C0C0F0C0F0B0D0D0808091515100D0C0E0D0D0D0B0E0C +120C0E0E0D0E100E0F0E0B0D0C0C100D0E0E14140F110D0D140D0B0C0B090C0B0F0A0C0C +0B0C0D0C0C0C0C0A090B100B0D0C11110C0F0B0A100B0B0C090A0A06060711110C0B0B0C +0B0913160C0A0A0A0A0A0A0A000000000F0C0E0C000000000C0C0C0C0C0C0C0C0C0C0C0C +0C0C0C0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0C0B0C0B0C0B0C0B0C +0B0C0B0C0B0C0B0806080600000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000F0C0F0C0F0C0F0C0F0C +0F0C0F0C0F0C0F0C0F0C0F0C0F0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0C0B0C0B0C0B0C0B +0C000C00141E140007070809100D160F0509090D10070907090D0D0D0D0D0D0D0D0D0D09 +091010100B140E0E0E0F0D0C100F08090E0B110F100C100E0E0C0F0E140E0C0E09090910 +0D0D0C0C0A0C0C070C0D06070C06130D0C0C0C090A080D0C100C0C0B0D090D100E0E0E0D +0F100F0C0C0C0C0C0C0A0C0C0C0C060606060D0C0C0C0C0C0D0D0D0D0D0B0D0D0D0B0D0C +1414140D0D101310141010100D0D0D0F100E0D0B0B10130C0B0810100D100F0D0D100E0E +1015140D140909050510100C0C070D09090D0D0D0705091E0E0D0E0D0D08080808101010 +0F0F0F060D0D0D0D0D0D0D0D0D0D0B060E0A0E0B09100C0C0C0C0C10100B0B0B1414140D +100C080E0A0E0A0E0A0C0D070E0C0E0C0F0D100D0C0D0C0B060B060B090F0D0F0D100C0E +090E090E0A0C080C080F0D0F0D0E0B0E0B0B10100C0C0A0D0A100D0C0B17110C0F070B16 +060C07070C070E0C0E0A0E0A0D0C0D0C0D0C100C100C100C0F0D0F0D0806080608060806 +09070E0C0C0B060F0D0F0D100C100C0E090E0A0C080F0D0F0D0F0D0F0D14100C0C060E0C +1313100C091410141014100C0C050D0D0E14141414040D0D0D0E0F110B120F12060E0E0E +0D0E0F080E0E110F0D100F0C0D0C0C0E1110080C0C0A0D060D0C0C090D0C060C0C0D0C0A +0C0D0A0D0C1010060D0C0D100D100B0E0E0808091616100E0C0F0E0E0E0B0F0D130C0F0F +0E0F110F100F0C0E0C0C100E0F0E151510120E0E150E0C0C0C090C0C100A0D0D0C0C0E0D +0C0D0C0B0A0C110C0D0C12120D100B0B110C0C0D090B0A06060712120D0C0C0D0B091417 +0D0B0B0B0B0B0B0B00000000110C0F0D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E +0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0D0C0D0C0D0C0D0C0D0C0D0C0D +0C0D0C080608060000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000100C100C100C100C100C100C100C +110C110C110C110C110C0F0D0F0D0F0D0F0D0F0D0F0D0F0D0C0C0C0C0C0C0C0C0C000D00 +152015000707080A110D170F060A0A0D11080A080A0D0D0D0D0D0D0D0D0D0D0A0A111111 +0B150E0E0F100D0C1010080A0F0C1210110D110F0E0D0F0E150E0D0E0A0A0A110D0D0D0D +0B0D0D070D0D06070C06140D0D0D0D090B080D0C110C0C0B0D0A0D110E0E0F0D10110F0D +0D0D0D0D0D0B0D0D0D0D060606060D0D0D0D0D0D0D0D0D0D0D0B0D0D0D0B0D0D1515150D +0D111411151111110D0D0D0F110F0D0B0B11140D0B0811110D110F0E0E110E0E1116150D +150A0A060611110C0D080D0A0A0D0D0D08060A200E0D0E0D0D080808081111110F0F0F06 +0D0D0D0D0D0D0D0D0D0D0C060E0B0E0B0A100D0D0C0D0D11110B0B0B1515150D100D080E +0B0F0B0F0B0D0D080E0D0E0D100E100D0D0D0D0C060C060C0A100D100D110D0F090F090E +0B0D080D080F0D0F0D0E0B0E0B0C11110D0D0B0D0A110D0D0B18120D0F080C17070D0707 +0D070E0D0F0B0F0B0D0D0D0D0D0D100D100D100D100D100D08060806080608060A070F0C +0C0C06100D100D110D110D0F090E0B0D080F0D0F0D0F0D0F0D15110D0C060E0D1414110D +0A1511151115110D0C060D0D0F15151515040D0D0D0E10120B131013060E0E0F0D0E1008 +0F0E12100E11100D0E0D0D0E1211080D0D0B0D060D0D0C0A0D0D060C0C0D0C0B0D0D0B0D +0C1111060D0D0D110D110C0F0E08080A1717110F0D100E0E0E0C100D140D10100F0F1210 +11100D0F0D0D110E100F161610130E0F160F0D0D0C0A0D0D110B0D0D0C0D0F0D0D0D0D0B +0A0C120C0E0D12130D110C0B120D0D0D0A0B0B06060713130D0C0C0D0C0A15190D0B0B0B +0B0B0B0B00000000120D100D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0D0E0D0E +0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D08 +060806000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000110D110D110D110D110D110D110D120D120D +120D120D120D0F0D0F0D100D100D100D100D100D0D0C0D0C0D0C0D0C0D000D0016211600 +0808090A120E1810060A0A0E12080A080A0E0E0E0E0E0E0E0E0E0E0A0A1212120C160F0F +0F110E0D11110A0A0F0C1310110D110F0F0E100F160F0E0F0A0A0A120E0E0D0E0B0E0D08 +0E0E06080D06150E0D0E0E090B090E0D120D0D0C0E0A0E120F0F0F0E1011100D0D0D0D0D +0D0B0D0D0D0D060606060E0D0D0D0D0D0E0E0E0E0E0C0E0E0E0C0E0E1616150E0E121511 +161212120E0E0E1012100E0C0C12150D0C0912120E12100E0E120F0F1118160E160A0A06 +0612120D0E080E0A0A0E0E0E08060A210F0E0F0E0E0A0A0A0A111111101010060E0E0E0E +0E0E0E0E0E0E0C060F0B0F0C0A110D0E0D0D0E12120C0C0C1616160E110E0A0F0B0F0B0F +0B0E0E080F0D0F0D110E110E0D0E0D0C060C070C0A100E100E110D0F090F090F0B0E090E +09100E100E0F0C0F0C0C11120E0D0B0E0B110E0E0C1A130E10080C18070D08080D080F0D +0F0B0F0B0E0D0E0D0E0D110E110E110E110E110E0A060A060A060A060A080F0D0D0C0610 +0E100E110D110D0F090F0B0E09100E100E100E100E16120E0D070F0D1515110D0A161216 +1216120E0D060E0E1016161616050E0E0E0F11130C131114060F0F0F0E0F110A0F0F1310 +0E11110D0F0E0E0F13120A0E0E0B0E060E0E0D0A0E0E060D0D0E0D0B0D0E0B0E0D121206 +0E0D0E120E110C0F0F0A0A0A1918120F0E110F0F0F0C100E150E11110F10131111110D0F +0E0E120F1110171711140F0F17100D0E0D0A0E0D120C0E0E0D0E0F0E0D0E0E0C0B0D130D +0E0D13140E110D0C120D0D0E0A0C0B06060814140E0D0D0E0C0A161A0E0C0C0C0C0C0C0C +00000000120D110F000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0D0F0D0F0D0F0D0F +0D0F0D0F0D0F0D0F0D0F0D0F0D0F0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0A060A0600 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000110D110D110D110D110D110D110D120D120D120D120D +120D100E100E110F110F110F110F110F0E0D0E0D0E0D0E0D0E000E00172317000808090B +130F1911060A0A0F13080A080A0F0F0F0F0F0F0F0F0F0F0A0A1313130D17101010120F0D +12110A0A100D1311120E1210100E111017100E100A0A0A130F0F0E0E0C0E0E080E0F0608 +0E06160F0E0E0E0A0C090F0E130E0E0C0F0A0F131010100F1112110E0E0E0E0E0E0C0E0E +0E0E060606060F0E0E0E0E0E0F0F0F0F0F0C0F0F0F0D0F0E1717160F0F13161217131313 +0F0F0F1113100F0D0D13160E0D0913130F13110F0F1310101219170F170B0B060613130E +0E080F0A0A0E0E0F08060B23100F100F0F0A0A0A0A121212111111060F0F0F0F0F0F0F0F +0F0F0D06100C100C0A120E0E0E0E0E13130C0C0C1717170F120E0A100C100C100C0E0F08 +100E100E120F120F0E0F0E0D060D070D0B110F110F120E100A100A100C0E090E09110F11 +0F100C100C0D12130E0E0C0F0B120F0E0D1B140E11080D19070E08080E08100E100C100C +0F0E0F0E0F0E120E120E120E110F110F0A060A060A060A060A08100E0E0D06110F110F12 +0E120E100A100C0E09110F110F110F110F17130E0E07100E1616120E0A1713171317130E +0E060F0F1117171717050F0F0F1011140C141115061010100F10110A101013110F12110E +0F0E0E1014130A0E0E0C0F060F0E0E0B0F0E060E0E0F0E0C0E0E0C0F0E1313060F0E0F13 +0F120D10100A0A0A1A1913100E111010100D110F160E11111011131112110E100E0E1310 +121018181215101018100E0E0E0B0E0E120C0F0F0E0E100F0E0F0E0C0B0E130E0F0E1414 +0F120D0D130E0E0F0B0D0C06060815150F0E0E0F0D0B171B0F0C0C0C0C0C0C0C00000000 +130E1110000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E10 +0E100E100E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A060000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000120E120E120E120E120E120E120E130E130E130E130E130E110F +110F111011101110111011100E0E0E0E0E0E0E0E0E000F00182518000808090B140F1A11 +060B0B0F14090B090B0F0F0F0F0F0F0F0F0F0F0B0B1414140D18101011130F0E13120A0B +110D1412130E1311100F121018100F100B0B0B140F0F0E0F0D0F0E080F0F06080E06170F +0F0F0F0A0D090F0E140E0E0D0F0B0F141010110F1213120E0E0E0E0E0E0D0E0E0E0E0606 +06060F0F0F0F0F0F0F0F0F0F0F0D0F0F0F0D0F0F1818170F0F141713181414140F0F0F11 +14110F0D0D14170F0D0914140F14110F0F141010131A180F180B0B060614140E0F090F0B +0B0F0F0F09060B25100F100F0F0A0A0A0A131313121212060F0F0F0F0F0F0F0F0F0F0D06 +100D100D0B130F0F0E0F0F14140D0D0D1818180F130F0A100D110D110D0F0F09100E100E +1310130F0E0F0E0D060D070D0B120F120F130F110A110A100D0F090F09120F120F100D10 +0D0E13140F0F0C0F0C130F0F0D1C150F12090D1A080F09090F09100E110D110D0F0E0F0E +0F0E130F130F130F120F120F0A060A060A060A060B08110E0E0D06120F120F130F130F11 +0A100D0F09120F120F120F120F18140F0E07100E1717130F0B1814181418140F0E060F0F +1118181818050F0F0F1012150D151216061010110F10120A111014121013120E100F0F10 +15140A0F0F0C0F060F0F0E0B0F0F060E0E0F0E0C0F0F0C0F0E1414060F0F0F140F130E11 +100A0A0B1B1A14110F121010100E120F170F12121112141213120E110F0F141012111919 +1316101119110E0F0E0B0F0E130D0F0F0E0F110F0F0F0F0D0C0E140E0F0F15150F130E0D +140E0E0F0B0D0D06060816160F0E0E0F0E0B181C0F0D0D0D0D0D0D0D00000000130F1210 +000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E100E100E10 +0E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A06000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000130F130F130F130F130F130F130F130F130F130F130F130F120F120F1210 +12101210121012100F0E0F0E0F0E0F0E0F000F001B291B000A0A0B0C16111D14070C0C11 +160A0C0A0C111111111111111111110C0C1616160F1B12131315111015140B0C130F1714 +15101513121114121B1311130C0C0C16111110110E11100A1111070910071A111011110C +0E0B11101610100E110C1116121213111415141010101010100E10101010070707071110 +1010101011111111110F1111110F11111B1B1A1111161B151B161616111111141613110F +0F161A100F0B16161116141111161212151D1B111B0C0C0707161610110A110C0C111111 +0A070C2912111211110B0B0B0B15151514141407111111111111111111110F07120E130E +0C15111110101116160F0F0F1B1B1B1115110B120E130E130E11110A1210121015111511 +1011100F070F080F0C141114111510130C130C120E110B110B14111411130E130E0F1516 +11100E110D1511110F1F1811140A0F1D09100A0A100A1210130E130E1110111011101511 +15111511141114110B070B070B070B070C091310100F071411141115101510130C120E11 +0B14111411141114111B1611100812101B1A15100C1B161B161B161110071111131B1B1B +1B061111111214180F181419071213131113140B13131714121514101211111318160B11 +110E11071111100C111107101011100E10110E11101616071110111611150F13120B0B0C +1E1E161311141213130F14111A11141413141714151410131111161315131C1C15191213 +1C131011100D1110160E1111101113111011110E0D1017101110181811150F0F17101011 +0D0F0E0707091919111010110F0D1B20110F0F0F0F0F0F0F000000001610141200000000 +111111111111111111111111111111121012101210121012101210121012101210121012 +101210111011101110111011101110111011100B070B0700000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000015101510151015101510151015101610161016101610161014111411141214121412 +141214121110111011101110110011001D2C1D000A0A0B0D18121F15080D0D12180B0D0B +0D121212121212121212120D0D181818101D14141416121116160D0D1410181617111714 +141215141D1412140D0D0D18121211120F12110A1212090A11091C121212120C0F0B1211 +1811110F120D1218141414121617151111111111110F1111111109090909121212121212 +1212121212101212121012121D1D1C1212181D171D181818121312151815121010181C12 +100B18181218151313181414171F1C121D0D0D0808181811120A120D0D1212120B080D2C +14121412120D0D0D0D17171715151509121212121212121212121009140F140F0D161212 +11121218181010101D1D1D1216120D140F140F140F12120B141114111613161211121110 +091009100D161216121712140C140C140F120B120B15121512140F140F10171812120F12 +0E17121210221912150A101F09120A0A120A1411140F140F121112111211161216121612 +161216120D090D090D090D090D0A14111110091612161217121712140C140F120B151215 +12151215121D1812110914111D1C17120D1D181D181D181211081212151D1D1D1D061212 +12141619101A161A091414141214160D14141816131716111412121419180D12120F1209 +1212110D121209111113110F12120F12111818091212121812171014140D0D0D20201814 +12161414141016121C12161614151816171611141212181416151E1E171B14141E141112 +110E1211170F1313111214121212120F0E1118111312191A13171110181111120E100F09 +090A1B1B12111112100E1D22121010101010101000000000171216130000000012121212 +121212121212121212121214111411141114111411141114111411141114111411141112 +1112111211121112111211121112110D090D090000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000001712 +171217121712171217121712171217121712171217121512151216131613161316131613 +121112111211121112001200203120000B0B0D0F1A142217090F0F141A0C0F0C0F141414 +141414141414140F0F1A1A1A112016161619141219180D0F16121B181913191616141716 +201614160F0F0F1A141413141114130B1414090B13091F141314140E110D14131A131311 +140F141A1616161418191713131313131311131313130909090914131313131314141414 +141114141411141420201F14141A1F19201A1A1A141514171A171411111A1F13110D1A1A +141A1715151A161619221F14200F0F09091A1A13140C140F0F1414140C090F3116141614 +140D0D0D0D19191917171709141414141414141414141209161116110F1914141313141A +1A1111112020201419140D16111611161114140C16131613191519141314131209120912 +0F181418141913160E160E1611140D140D171417141611161112191A1413101410191414 +11251C14170C12220A130B0B130B16131611161114131413141319141914191418141814 +0D090D090D090D090F0B16131312091814181419131913160E1611140D17141714171417 +14201A14130A16131F1F19130F201A201A201A141309141417202020200714141416181C +111C181D091616171416180D16161B1815191813161414161C1A0D14141014091414130F +141409131314131013141014131A1A091413141A14191216160D0D0F24231A1614181616 +161218141F14181816181B181918131614141A1618172121191D161621171314130F1413 +1A111414131416141314141110131B1315131C1C151912121B1313140F121109090B1D1D +14131314120F20261411111111111111000000001A131815000000001414141414141414 +141414141414141613161316131613161316131613161316131613161316131413141314 +13141314131413141314130D090D09000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000191319131913 +19131913191319131A131A131A131A131A13171417141815181518151815181514131413 +1413141314001400213221000C0C0D0F1B152418090F0F151B0C0F0C0F15151515151515 +1515150F0F1B1B1B12211717171915131A190D0F17121C191A141A171714181721171417 +0F0F0F1B151514151115140C1515090B140920151415150E110D15141B141411150F151B +17171715191A181414141414141114141414090909091514141414141515151515121515 +1512151421212015151B201A211B1B1B151515181B171512121B2014120D1B1B151B1815 +151B17171A232015210F0F09091B1B14140C150F0F1515150C090F3217151715150D0D0D +0D1A1A1A18181809151515151515151515151309171117110F1A14141414151B1B121212 +212121151A150D17111711171115150C1714171419151A151415141209120A120F191519 +151A14170E170E1711140D140D1815181517111711131A1B15141115101A151512261D14 +180C12240B140C0C140C1714171117111514151415141A151A151A15191519150D090D09 +0D090D090F0B1714141209191519151A141A14170E1711140D1815181518151815211B14 +140A171420201A140F211B211B211B141409151518212121210715151517191D121D191E +091717171517190D17171C19151A1914161414171D1B0D14151115091514140F15150914 +1415141114151115131B1B091514151B151A1317170D0D0F25241B171419171717131915 +2014191917181C191A19141714141B17191822221A1E161722171414141015141A111515 +141417151415151210141C1415141D1D151A13121C14141510121109090B1E1E15141415 +131021271512121212121212000000001B14191600000000151515151515151515151515 +151515171417141714171417141714171417141714171417141714151415141514151415 +141514151415140D090D0900000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000001A141A141A141A141A14 +1A141A141B141B141B141B141B1418151815191619161916191619161414141414141414 +15001500253825000D0D0F111E18281B0A1111181E0D110D111818181818181818181811 +111E1E1E142519191A1D17151D1C10111A151F1C1D161D1A19171B19251917191111111E +181816171317160D17170A0D160A241716171710130F17161E1616131711171E19191A17 +1C1D1B16161616161613161616160A0A0A0A171616161616171717171814181818141817 +25252418181E241D251E1E1E1818181B1E1A1814141E2316140F1E1E181E1B18181E1919 +1D2824182511110A0A1E1E16170D1811111717180D0A11381917191717101010101D1D1D +1B1B1B0A18181818181818181818150A19131913111D17171616171E1E14141425252518 +1D171019131A131A1317180D191619161D181D17161716150A150B15111C171C171D161A +101A101913170F170F1B171B1719131913151D1E17171317121D1817142B20171B0D1528 +0C160D0D160D19161A131A131716171617161D171D171D171C171C17100A100A100A100A +110D1A1616150A1C171C171D161D161A101913170F1B171B171B171B17251E17160B1916 +24231D1611251E251E251E17160A18181B2525252508181818191C2014211C220A19191A +17191C101A191F1C181D1C1619171719201E10171713170A1717161117170A1616181613 +16171317161E1E0A1716171E171D151A1910101129291E1A171C191919151C1724171C1C +1A1B1F1C1D1C161A17171E191C1A26271D22191A261A1617161117161E13181816171A18 +1618171412161F1618162021181D15141F1616171114130A0A0D2222171616181511252B +1814141414141414000000001E161C180000000018181818181818181818181818181819 +161916191619161916191619161916191619161916191617161716171617161716171617 +161716100A100A0000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000001D161D161D161D161D161D161D16 +1E161E161E161E161E161B171B171C181C181C181C181C18171617161716171617001800 +2A402A000F0F1113221B2D1F0B13131B220F130F131B1B1B1B1B1B1B1B1B1B1313222222 +172A1D1D1D201B18212012131D17231F2119211D1D1A1F1D2A1D1A1D131313221B1B191A +161A190F1A1B0C0E190C291B191A1A1216111B19221919161B131B221D1D1D1B1F211F19 +191919191916191919190C0C0C0C1B19191919191B1B1B1B1B171B1B1B171B1A2A2A291B +1B222A212A2222221B1B1B1F221E1B1717222819171122221B221F1B1B221D1D212D291B +2A13130B0B2222191A0F1B13131A1A1B0F0B13401D1B1D1B1B121212122121211F1F1F0C +1B1B1B1B1B1B1B1B1B1B180C1D161D1613211A1A19191A22221717172A2A2A1B211A121D +161D161D161A1B0F1D191D19201B211B191B19170C170C17131F1B1F1B21191D121D121D +161A111A111F1B1F1B1D161D161821221A1A161A15211B1A1731251A1F0F172D0E190F0F +190F1D191D161D161B191B191B19211A211A211A201B201B120C120C120C120C130E1D19 +19170C1F1B1F1B211921191D121D161A111F1B1F1B1F1B1F1A2A221A190D1D192A282119 +132A222A222A221A190B1B1B1E2A2A2A2A091B1B1B1D2025172520260C1D1D1E1B1D2012 +1D1D231F1B2120191C1A1A1D2522121A1A161B0C1B1A19131B1A0C19191B1915191A151B +1923220C1B191B221B21181D1D1212132F2E221D1A201D1D1D181F1B291A20201D1F2320 +2120191D1A1A221D201E2B2C21271D1D2B1E191A19141A1922161B1B191A1D1B191B1A16 +151923191B1925251B2118172319191B1417160C0C0E26261B19191B18142A311B171717 +17171717000000002219201C000000001B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1D191D191D +191D191D191D191D191D191D191D191D191D191B191B191B191B191B191B191B191B1912 +0C120C000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000211921192119211921192119211922192219 +2219221922191F1B1F1B201C201C201C201C201C1A191A191A191A191A001B002E462E00 +10101215261D32210C15151D26111511151D1D1D1D1D1D1D1D1D1D1515262626192E1F20 +20231D1A24231215201A2722241C24201F1C221F2D201C20151515261D1D1C1D181D1B10 +1D1D0C101B0C2D1D1C1D1D1418121D1B261B1B181D151D261F1F201D2224221C1C1C1C1C +1C181B1B1B1B0C0C0C0C1D1C1C1C1C1C1D1D1D1D1D191D1D1D191D1D2E2E2D1D1D262E24 +2E2626261D1E1D2126211D1919262C1C191226261D26211E1E261F1F24312D1D2E15150C +0C26261B1C111D15151D1D1D110C15461F1D1F1D1D121212122424242222220C1D1D1D1D +1D1D1D1D1D1D1A0C1F18201815241C1C1B1C1D26261919192E2E2E1D241D121F18201820 +181D1D111F1C1F1C231E241D1B1D1B1A0C1A0E1A15221D221D241C201420141F181C121C +12221D221D201820181A24261D1C181D17241D1D1936281C22111A320F1C10101C101F1C +201820181D1B1D1B1D1B241D241D241D231D231D120C120C120C120C1510201B1B1A0C22 +1D221D241C241C20141F181C12221D221D221D221D2D261C1B0E1F1C2E2C241C152D262D +262D261C1B0C1D1D212E2E2E2E0A1D1D1D1F23281929232A0C1F20201D20231220202722 +1E24231C1F1C1C202826121C1D181D0C1D1D1B151D1D0C1B1B1D1B171C1D171D1B26250C +1D1C1D251D241A201F121215333326201C231F20201A221D2D1C23232022272324231C20 +1C1C262023212F30242A1F2030201C1C1B161D1B25181D1D1B1D201D1C1D1D19171B271B +1E1C28291D251A19271C1B1D1619180C0C102A2A1D1B1B1D1A162E361D19191919191919 +00000000251C231E000000001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1F1C1F1C1F1C1F1C1F +1C1F1C1F1C1F1C1F1C1F1C1F1C1F1C1D1B1D1B1D1B1D1B1D1B1D1B1D1B1D1B120C120C00 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000241C241C241C241C241C241C241C251C251C251C251C +251C221D221D231E231E231E231E231E1C1B1C1B1C1B1C1B1D001D00324C320012121417 +292036240D17172029121712172020202020202020202017172929291B3222222327201D +27261517231C2A25271E2723221F252231221F221717172920201E1F1A1F1E121F200F11 +1E0F31201E1F1F151A14201E291E1E1A20172029222223202527251E1E1E1E1E1E1A1E1E +1E1E0F0F0F0F201E1E1E1E1E20202020201B2020201B201F323231202029322732292929 +202020242923201B1B29301E1B1429292029242020292222273531203217170D0D29291E +1F122017171F1F20120D174C2220222020151515152727272525250F2020202020202020 +20201C0F221A221A17271F1F1E1E1F29291B1B1B32323220271F15221A231A231A1F2012 +221E221E272027201E201E1C0F1C0F1C1725202520271E23152315221A1F141F14252025 +20221A221A1C27291F1E1A201928201F1B3A2C1F25121C36101E12121E12221E231A231A +201E201E201E271F271F271F26202620150F150F150F150F1711231E1E1C0F2520252027 +1E271E2315221A1F14252025202520252031291F1E0F221E3230271E173129312931291F +1E0D202024323232320B20202022262C1B2C262D0F2222232022261523222A252027261E +221F1F222C29151F1F1A200F201F1E17201F0F1E1E201E191E1F19201E29290F201E2029 +20281C2322151517383729231F262222221C2520311F262623252A2627261E231F1F2922 +26243434272E222334231E1F1E181F1E281A20201E1F23201E201F1B191E2A1E201E2C2C +20281D1B2A1E1E20181B1A0F0F112E2E201E1E201C18323B201B1B1B1B1B1B1B00000000 +281E262100000000202020202020202020202020202020221E221E221E221E221E221E22 +1E221E221E221E221E221E201E201E201E201E201E201E201E201E150F150F0000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000271E271E271E271E271E271E271E281E281E281E281E281E2520 +2520262126212621262126211F1E1F1E1F1E1F1E1F00200036523600131315192C223A27 +0F1919222C141914192222222222222222222219192C2C2C1D362525262A221F2A291719 +251E2E282B212B2625212825352521251919192C222220221C22201322220F13200F3522 +212222171C1522202C20201C2219222C25252622282B282020202020201C202020200F0F +0F0F22212121212122222222221D2222221D222136363522222C362B362C2C2C22232227 +2C26221D1D2C34211D152C2C222C2723232C25252B3A35223619190F0F2C2C2021142219 +19222222140F19522522252222171717172B2B2B2828280F222222222222222222221E0F +251C251C192A21212021222C2C1D1D1D363636222A2217251C261C261C22221425202520 +2A232A222022201E0F1E101E19282228222B2126172617251C2115211528222822251C25 +1C1F2B2C22211C221B2B22221D3F2F2127141E3A1121131321132520261C261C22202220 +22202A222A222A2229222922170F170F170F170F19132520201E0F282228222B212B2126 +17251C21152822282228222822352C212010252036342B2119352C352C352C21200F2222 +27363636360B22222225292F1D3029310F2525262225291725252E28232B292124212125 +2F2C1721221C220F2221201922220F202023201B21221B22202C2C0F2221222C222B1F26 +251717193C3C2C2521292525251F28223521292925282E292B29212621212C2529263838 +2A32252638262021201922202B1C2323202226222122221D1B202D2023212F30232B1F1E +2D202022191E1C0F0F133131222020221F19363F221D1D1D1D1D1D1D000000002C212924 +000000002222222222222222222222222222222520252025202520252025202520252025 +2025202520252022202220222022202220222022202220170F170F000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000002B212B212B212B212B212B212B212C212C212C212C212C21282228222924 +29242924292429242120212021202120220022003A583A001414171B2F253E2A101A1A25 +2F151A151A252525252525252525251A1A2F2F2F203A2828292D25212D2C181A2820312B +2E232E2828242A28392824281A1A1A2F252523241E24231424250F14220F382523242419 +1E1725222F22221E251A252F282829252B2E2A2323232323231E232323230F0F0F0F2523 +2323232325252525251F2525252025243A3A3925252F392E3A2F2F2F2525252A2F292520 +202F372320172F2F252F2A25252F28282E3E39253A1B1B10102F2F222415251A1A242425 +15101B582825282525181818182E2E2E2A2A2A0F25252525252525252525210F281E281E +1A2D23242223242F2F1F1F1F3A3A3A252D2418281E291E291E242515282328232D262D25 +232523200F2011201B2B252B252E2328192819281E241724172A252A25281E281E212E30 +24231E251D2E2524204333242A15203E1323151523152823291E291E2523252325232D24 +2D242D242C252C25180F180F180F180F1A14282222200F2B252B252E232E232819281E24 +172A252A252A252A25392F242211282339372E231A392F392F392F24221025252A3A3A3A +3A0C252525282C321F332C350F28282925282C182828312B262E2C2327242428332F1824 +241E250F2524221B25240F222225221D23241D2522302F0F2523252F252E21292818181A +41402F28242C282828212B2538242C2C282B312C2E2C2329242430282C293C3D2D352729 +3C292324231B24232E1E2525222428252325241F1D22312225233333252E212031232325 +1B201E0F0F14353525222225211B3A44251F1F1F1F1F1F1F000000002F232C2600000000 +252525252525252525252525252525282328232823282328232823282328232823282328 +23282325232523252325232523252325232523180F180F00000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00002E232E232E232E232E232E232E232F232F232F232F232F232A252A252C262C262C26 +2C262C262422242224222422240025004366430018181A1F372B4831121E1E2B37181E18 +1E2B2B2B2B2B2B2B2B2B2B1E1E37373725432E2E2F342A2734321D1E2E2538323528352F +2E29312E422E292E1E1E1E372B2B282A232A28182A2A12172812412A292A2A1D231A2A28 +372828232B1E2B372E2E2F2A3235312828282828282328282828121212122A2929292929 +2A2A2A2A2B242B2B2B252B2A4343412B2B374335433737372B2B2B31372F2B2525374029 +251A37372B37312B2B372E2E3548422B431F1F121237372829182B1E1E2A2A2B18121F66 +2E2A2E2A2A1D1D1D1D353535313131122B2B2B2B2B2B2B2B2B2B26122E232E231E342929 +28292A37372424244343432B342A1D2E232F232F232A2B182E282E28342B342A282A2825 +122514251F322A322A35292F1D2F1D2E23291A291A312A312A2E232E232635372A29222A +21352B2A254E3A29311825481628181828182E282F232F232A282A282A28342A342A342A +322A322A1D121D121D121D121E172E28282512322A322A352935292F1D2E23291A312A31 +2A312A312A42372928142E28434035291E4237423742372928122B2B30434343430E2B2B +2B2E323A243B323D122E2E2F2A2E321D2E2E38322B3532282D29292E3A371D292A222A12 +2A2A281F2A2A1228282B2822292A222A283737122A292A372A35262F2E1D1D1E4B4A372E +29322E2E2E26322A412932322E3138323532282F2929372E33304546343E2E2F452F2829 +28202A2835232B2B282A2F2B292B2A24212838282B293B3B2B3526253828282A20252312 +12173D3D2A28282B2620434F2B24242424242424000000003629332C000000002B2B2B2B +2B2B2B2B2B2B2B2B2B2B2B2E282E282E282E282E282E282E282E282E282E282E282E282A +282A282A282A282A282A282A282A281D121D120000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000003529 +35293529352935293529352936293629362936293629312A312A332C332C332C332C332C +29282928292829282A002B004B724B001A1A1E223D305137142222303D1B221B22303030 +3030303030303022223D3D3D294B3333343A2F2B3A381F22342A3F383B2D3B34332E3733 +4A332E332222223D30302D2F272F2D1A2F2F151A2C15492F2E2F2F20271E2F2C3D2C2C27 +3022303D3333342F383B372D2D2D2D2D2D272D2D2D2D151515152F2E2E2E2E2E2F2F2F2F +302930303029302F4B4B4930303D4A3B4B3D3D3D303030373D353029293D482E291E3D3D +303D3730303D33333B504A304B222214143D3D2C2E1B3022222F2F301B142272332F332F +2F1F1F1F1F3B3B3B37373715303030303030303030302A1533273327223A2E2E2C2D2F3D +3D2929294B4B4B303A2F1F3327342734272F301B332D332D3A313A2F2D2F2D2A152A162A +22382F382F3B2E3420342033272E1E2E1E372F372F332733272A3B3D2F2E262F253B302F +2957412E371B2A51182D1B1B2D1B332D342734272F2D2F2D2F2D3A2F3A2F3A2F382F382F +1F151F151F151F15221A342C2C2A15382F382F3B2E3B2E342033272E1E372F372F372F37 +2F4A3D2E2C17332D4A483B2E224A3D4A3D4A3D2E2C143030364B4B4B4B10303030333841 +28423944153333352F33381F34333F38313B382D322E2E33413D1F2E2F262F152F2F2C22 +2F2F152C2C302C262E2F262F2C3E3D152F2E2F3D2F3B2A35331F1F2254533D342E383333 +332A382F492E383834373F383B382D342E2E3D3339354D4E3B4533354E352D2E2D232F2D +3C2730302C2F34302E302F28252C3F2C302D4243303C2B293F2D2D2F23292715151A4545 +2F2C2C302A234B583029292929292929000000003D2E3931000000003030303030303030 +30303030303030332D332D332D332D332D332D332D332D332D332D332D332D2F2D2F2D2F +2D2F2D2F2D2F2D2F2D2F2D1F151F15000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000003B2E3B2E3B2E +3B2E3B2E3B2E3B2E3D2E3D2E3D2E3D2E3D2E372F372F393139313931393139312E2C2E2C +2E2C2E2C2F003000537E53001D1D21264435593C16262635441E261E2635353535353535 +35353526264444442D5339393A403430403E22263A2E463E4132413A39333D3952393339 +26262644353532342B34311D3435181D31185135323434232B2135314431312C35263544 +39393A343E413D3232323232322B313131311818181835323232323235353535352D3535 +352D35335353513535445241534444443535353C443B352D2D444F322D21444435443C36 +36443939415951355326261616444431331E3526263434351E16267E3934393434222222 +224141413D3D3D18353535353535353535352F18392B392C2640333331323444442D2D2D +53535335403422392B3A2B3A2B34351E39323932403640343134312E182E192E263E353E +3541323A233A23392B332133213D353D35392C392C2F414434322B34294235342D614833 +3D1E2E591B321D1D321D39323A2B3A2B3431343134314034403440343E353E3522182218 +22182218261D3A31312E183E353E35413241323A23392B33213D353D353D353D34524433 +31193932524F41322652445244524433311635353C5353535312353535393E482D493F4B +1839393A34393E223A39463E36413E323833333948442233342B35183433312635341831 +3135312A32342A34314444183432344434422F3A392222265D5C443A333E3939392F3E34 +51333E3E3A3D463E413E323A333344393F3B5657414C393A563B323331273431422C3535 +31343A353235342C293146313632494A35422F2D46323135272D2B18181D4C4C35313135 +2F275361352D2D2D2D2D2D2D0000000043323F3700000000353535353535353535353535 +353535393239323932393239323932393239323932393239323932343134313431343134 +313431343134312218221800000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000041324132413241324132 +41324132433243324332433243323D353D353F373F373F373F373F373331333133313331 +340035005C8C5C002020242A4B3A6343192A2A3A4B212A212A3A3A3A3A3A3A3A3A3A3A2A +2A4B4B4B325C3F3F40473A354745272A40334E45483748403F39433F5B3F393F2A2A2A4B +3A3A373930393720393A18203618593A3839392730243A364B3636303A2A3A4B3F3F403A +4548433737373737373037373737181818183A38383838383A3A3A3A3A323A3A3A323A39 +5C5C5A3A3A4B5B485C4B4B4B3A3B3A434B413A32324B583832244B4B3A4B433B3B4B3F3F +48625A3A5C2A2A19194B4B3639213A2A2A3A3A3A21192A8C3F3A3F3A3A27272727484848 +434343183A3A3A3A3A3A3A3A3A3A34183F303F302A4738393638394B4B3232325C5C5C3A +4739273F3040304030393A213F373F37473C473A373A373318331B332A453A453A483840 +2740273F3039243924433A433A3F303F3034484B39382F3A2E493A39326B503843213363 +1E38212138213F37403040303A373A373A37473947394739453A453A2718271827182718 +2A204036363318453A453A4838483840273F303924433A433A433A433A5B4B39361C3F37 +5B5848382A5B4B5B4B5B4B3936193A3A425C5C5C5C133A3A3A3F455032514554183F3F41 +3A3F4527403F4E453C4845373E39393F504B2739392F3A183A39362A3A391836363B362E +383A2F3A364C4B183A383A4B3A4934403F27272A67654B4039453F3F3F34453A5A394545 +40444E454845374039394B3F46425F6048553F415F413739372B393749303B3B3639403B +383B39312E364D363B3851523B4935324D37373A2B323018182054543A36363B342B5C6C +3B32323232323232000000004A38463D000000003A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3F +373F373F373F373F373F373F373F373F373F373F373F373A373A373A373A373A373A373A +373A37271827180000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000004838483848384838483848384838 +4A384A384A384A384A38433A433A463D463D463D463D463D393639363936393639003A00 +649864002323272E52406C491B2D2D4052242D242D404040404040404040402D2D525252 +37644445464D3F394E4B2A2D4538544B4F3C4F46443E494463453E452D2D2D5240403C3E +343E3C233E3F1B223B1B613F3D3E3E2B34273F3B523B3B353F2D3F524444463F4B4F493C +3C3C3C3C3C343C3C3C3C1B1B1B1B3F3D3D3D3D3D3F3F3F3F403640404037403E64646240 +4052634F6452525240404049524740373752603D3727525240524940405244444F6B6240 +642E2E1B1B52523B3E24402D2D3F3F40241B2E98443F443F3F2A2A2A2A4F4F4F4949491B +40404040404040404040381B443445352D4E3D3E3B3D3E5252363636646464404E3E2A44 +34463446343E4024443C443C4D414E3F3C3F3C381B381E382E4B3F4B3F4F3D462B462B44 +343E273E27493F493F45354535394F523E3D333F324F403E3774573D4924386C203C2323 +3C23443C463446343F3C3F3C3F3C4E3E4E3E4E3E4B3F4B3F2A1B2A1B2A1B2A1B2D22453B +3B381B4B3F4B3F4F3D4F3D462B44343E27493F493F493F493F63523E3B1E443C63604F3D +2D6352635263523E3B1B4040486464646415404040444B5736584B5B1B4445463F454B2A +4545544B414F4B3C433E3E4557522A3E3E333F1B3F3E3B2E3F3E1B3B3B403B323D3F333F +3B52511B3F3D3F513F4F3946442A2A2D706E52453E4B444545394B3F613E4B4B4549544B +4F4B3C463E3E52454C4767694E5C444667473C3D3B2F3E3C503440403B3E46403D403E35 +323B543B403D5859404F3937543C3C3F2F37341B1B225B5B3F3B3B40392F647540363636 +3636363600000000513D4C4200000000404040404040404040404040404040443C443C44 +3C443C443C443C443C443C443C443C443C443C3F3C3F3C3F3C3F3C3F3C3F3C3F3C3F3C2A +1B2A1B000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000004F3D4F3D4F3D4F3D4F3D4F3D4F3D513D513D +513D513D513D493F493F4C424C424C424C424C423E3B3E3B3E3B3E3B3E00400000020100 +000007000600000300070014B706020400060204002FCDDDCD002FCDDDCD313021112111 +2521112101000600FA800500FB000600FA0080050000000201230000020305D100030007 +0027401703030202075505080F0901005D042B035D0F051F0502052F5DE4FDE45D003FED +332F3F3130010323031323353302031AAA1CD6CCCC05D1FBC90437FA2FD3000200A803D1 +0304061400030007002640150206060307010F09400902032C0040000100042C072FED33 +5D2FED5D003F3C332F3C3130010323032303230303042B842BA82B842B0614FDBD0243FD +BD024300000200C3000005C905D1001B001F00B1407140215609740570097B137B167B17 +7B1A080A091E1D160F1501671501151E0C0F1013140B1407081F1C17001801681801181E +0502011A06190662191462700B010B03110B111903040D001B011B1B0D171A011D0410B5 +131E020509040CB50F070F1318040B00140114030F0B4F0B020B08003F5D3F5D1217392F +ED17392FED1739012F332F5D1217392F2F2F5DE42FE4313087C0C0C0C0FD5D71C0C0C0C0 +C08710C0C0C0C0FD5D71C0C0C0C0C0015D01210321152103231321032313213521132135 +2113330321133303210521032105C9FEB35C0134FEA9688168FEF2688168FED6014D5CFE +CC0157698169010E698169012AFE35FEEE5E011203A4FE8887FE5B01A5FE5B01A5870178 +8701A6FE5A01A6FE5A85FE840003009BFE9704880628002C0033003A00BC408D7D087E16 +70197620702C7A36060E16012B1B16122B230D350D3C163C24352B430D4A164C24432B5A +08532053335A356B0865206529632B6A30643A171D40090B371D382E11221D2226471B18 +312D1227373400030A067F1E011E050A11470A05060F3C1F3C0221210334207F00010031 +201818063F094F09020900112D1B1E263706031E0930064006700603062F5D33ED173932 +2F5D12392FED2F5DED12392F5D002F3333ED2F2F2F5D121739ED33332F1139392F2B3130 +5D5D011406071123112E012735331E01171E0117112E01272E01353436371133111E0117 +15232E0127111E01171E0125110E0115141601342627113E010488F2C47684E855101362 +2E348B4F28441DA38EE9D17665D4480E4BA3851E461A95A3FDD46B926C02007584788101 +7C9BCD13FE960165013127C60E351113210301B1080F0829A57994CC110110FEF2022C1D +C42E4709FE51051105209CE8019D08655A5B5CFE585E5719FE620C6200050095FFE30807 +05ED000B000F001B00270033009C40720908060A0918061A0F351808170A1818171A2908 +260A2918261A460D480F4035560D580F680E13791F7625792B76310425512F034F030203 +031F5109020F030E082B51201940190219193151130A4F0C400E020C0E2E2A0016011616 +282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D123939ED33 +2F5DED2F2F5D003FED332F5DED3F3F3FED332F5DED5D3130015D01140623222635343633 +321625012309011406232226353436333216013426232206151416333236013426232206 +1514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6BAFABB59 +64665858666459049359646658586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADC +DDE0DADA01B8AC8888ADAD8787FE17AC8888ADAD878700030073FFE1061305F0000B0018 +004500E1406F090F190F3C0C3015301D352D3E3D4F1A471D4F44791C0B6A25603F7B0576 +087B0F761D7A25703E703F090508062A06371408161D142A1437153F290C2A1D26373008 +300A4008400A490C41144F1C431D46204C21412D413C5108590D5B25690566086B0F601D +1E3F0C161D20231903B8FFC0403B12173703AA190D2C093E05233502163F230A1E082C0D +3E032F00143806142F3F0C4513201D2F38041A26001E011E1E45140D1A011A1A13152673 +4610F6ED332F5DED332F5D11121739111239392FED2FED121739003F3FED3F121739ED2B +2F12393912393931305D5D015D013426232206151416173E0113010E01070E0115141633 +323601151406070123270E01232224353436373E01372E01353436373E01333216151406 +070E0107013E0137362635031871585C744F836265C2FE221F3E1F1C24AB9D5DB7016B32 +3C017AF6E573F07FD0FEED34232368356E61353532A161ADD6181D20765E01730E0E0102 +0104A75F6D7B594B744F2387FD0001D20F312A276E4592B35B02AE6060F06DFE90E08E71 +F3C55C86312F531F48926F437932303CAF862C6F2C315A20FE96286034388A30000100A4 +03D10182061400030015400A020203010F0501002C032FED5D003F332F31300103230301 +822B882B0614FDBD0243000100B5FE64030F061400150048403709010907190119072803 +28054F01480348054F075F015F076F016F077F01780278067F07120701010C7A04010830 +000100000F1F04881610F4ED332F5D3C5D003F3F3130015D012326021110123733150E01 +070602151412171E0117030FE5B1C4C4B1E551933F3C4B493E3C9A4DFE64CB01E0012D01 +2D01E0CB0A49BF7F7BFED8A4ABFEE4807BC7450000010093FE6402ED06140015004E403D +060306131503151326012603261326154701400340134715500350136003601379007602 +700370137614151201040C750001123F040104040B1F00921710F6ED332F5D3C5D003F3F +3130015D0110020723353E01373612353402272E01273533161202EDC4B1E54D9B3B3E49 +4A3D3F9351E5B1C4023CFED3FE20CB0A45C77B80011CABA401287B7FBF490ACBFE200001 +00A70276047106140011009040094F1301114009103708B8FFC040580910375B025B0554 +0B540E6B026B05640B640E7B027B05730B730E0C01060F0A0B0E08110502060C064F0450 +0402040A0F0C01040C010F131F130200110D4010011008070C4F090109100E020304050B +060D2809700C010C2F5D33ED1739322F5D1239392F5D1239395D003F335D332F5D331217 +392F332F3331305D012B2B5D01072513231305272D013705033303251705047140FE9606 +8105FE9741017DFE8341016A068107016B40FE8403776ED5FE980168D66ECFCF6ED50167 +FE99D46ECD00000100D2001B05BA04FD000B0039402303AC01045408AC0A0F070107400D +01300D400D0200AB0A800101012A05AB07400401042F5D3CE4FD5D3CE45D5D002F5D3CE4 +FD3CE4313001211123112135211133112105BAFDDFA6FDDF0221A60221023CFDDF0221A0 +0221FDDF00010093FE8E023F011D0003003540261A012A012B0235003902450048025500 +590264007400C5030C0202035604000004021A0202022F5D332F0010F4322F3130015D09 +012313023FFEE692AE011DFD71028F00000100990231030902E600030020401401420F02 +01020F054F004F055F005F05050000022F332F5D002F5DED3130012135210309FD900270 +0231B500000100FD000001EC011D00030016400C02560108002D2F013F0102012F5DED00 +3FED31302123113301ECEFEF011D0001FFE2FED0035C0614000300364025030100050116 +01250138004900440156016701770186010A011202032F02010200010000022F332F003F +2F5D31300187ED5D87C009012301035CFD33AD02CA0614F8BC07440000020089FFE1048F +05EF000B0023004140303601390B340C3B123B18341E4501490B440C4B124B18441E0C15 +4909022149030A0F21009E250F251F25021B2106982410F6ED5D10F6ED003FED3FED3130 +5D011002212002111012212012013E01353426272E01232206070E01151416171E013332 +36048FFBFEF8FEF4F7FA0109010CF7FEF92319192423795F5E7B24221916242179645E7C +02E9FE6FFE89017C018A018D017BFE7FFCB551DB9A98E04E4D4E4E4F4AEE8E9CD2534E52 +4E00000101160000043C05D6000F003A4023054606060C030E034801080F111F11020502 +1F0F010F0F0C0E20023F036F03700303032F5D33ED39322F5D2F335D003FFD323F332FED +3130290135211121353236373E0137331121043CFCDA0136FECA3F90252E35049B013098 +03E6881514194D41FAC2000100A10000049105F000200097407B501F601F020503061116 +03151124113B05380D350E3F1D3F1E391F4B05480D450E4F1D4F1E491F5F035D045D055B +0956115F195E1B5D1C5F1D5F1E6A036406651162156F1E700274117F1A7F1C7F1E25000F +100F2D082F1C300F400F060F0F0B4A1302021F4A01081F0208211616209E220F221F2202 +101002992110F6322F5D10F6322FED1239003FFD323FED332F5D31305D015D2901353E01 +373E013534262322060723353E01333204151406070E01070E0107210491FC1069D35BC0 +8E99895BD4650A47ED6FE501042B2A27694B6BE4630321D15AB459BADB7F74834042D223 +3ADDBD5593423E784969C554000100A7FFE1047C05F0003D009540700B0B052F1A0B152F +290B262F293C3C0B35143122342F4A0B45144322432F56015905590B552F6A0B662F6A3C +780B762F74357B3C1A343A443A023B3A1E491F012D112D022D2D294A1F0931020F0D1F0D +020D0D114A090A2321371E2E1621032E1E3A37040C03A03F0F3F1F3F020C9A3E10E65D10 +E611173910ED2F2F2FED003FED332F5D3F1239ED332F5D2FFD39395D31305D011E011514 +06070E012322262735331E01333236373E01353426272E012B0135333236353426272E01 +2322060723353E01333216171E0115140607151E01040E303E4A434BCB797CF04D0F55E6 +6B3F8E2C2E2D332D2D804A5A4698B52E292B623E5FD65F0A47ED6F6DA643484AAF77307C +02CD2B826766AA3F46433B23D1384A2A292C6A5150691E1F17A67F7A36511A1A14443ED1 +233B282C30885B7CB9180E0833000002004D000004B305D1000A000D00684041040D140D +240D340D440D700D060C0D480606070C0607090D4901050503070303083F0A4F0A020A0F +0F1F0F02070C04200A090D064F060101010F061F063F0603062F5D332F5D12393333ED39 +395D2F5D003F3F12392F3CFD321239393130018710FD04C0015D01231123112135013311 +3321110104B3DDC0FD3702D1B8DDFE63FDBF01A3FE5D01A3E60348FC7202A0FD60000001 +00BBFFE1048505D1002A0070404E0A081A082B083D0835113D164B0844115A0854296A08 +7A080C1D1D1A490F251F2540250325214A25061E020F0A1F0A020A0A0E4A060A2022204F +1D011D142100201D09009F2C0F2C1F2C02099B2B10E65D10E611393910ED2F5DED2F003F +ED332F5D3F1239ED2F5DFD322F31305D011406070E012322262735331E01333236373E01 +353426272E012322060711211521113E01333216171E0104854C4248C7837AE24E0E52DC +6A4785342C2D352F34955C58A33B0380FD412B5A2179B64C505801D968BE41464B3324D3 +344928322B784F4D6A20261F180C02FFAFFE740404293437AE0000020089FFE104A705ED +0022003700644044060D160D3925333133374925423143375F01560D5020502165217531 +0E1A0329491D1313174A1D030F023549030A1A2C2F122321001209009C390F391F39022F +2109983810F6ED5D10E6113910ED2F123939003FED3F1239FD322F2FED123931305D0114 +002322262726023534123736243332161715232E01232200073E01333216171E01073426 +272E01232206070E01151416171E0133323604A7FED5D96EB445565D555D580116B93B50 +290A1C713BD7FF001554A36B5F914C5859CB373F2E703D55924D020241392E6B3F91A601 +E3E3FEE14443530112C1C6013277717F0A0DBF0F1BFEF3E5333523353DBA8D5D7A2D2014 +282A16291F9EB7352C29B1000001009A0000049505D10006004F403209010A0224014801 +4B0258027903070301000120020203000002034A050302080F081F087B02030300020204 +0F00010000042F332F5D12392F12395D003F3FFD11392F3130018710ED87C0015D090123 +012135210495FD5ED602CDFCB003FB04F2FB0E0522AF0003007AFFDE049C05F300190028 +0037009440702D2B3415332234273433441541224427453350155B195A1B5A1F54225F2B +592C5F31543354376008620E6212621960236027760E76127B2C86121DA926A62F022616 +0A2F04031D4710023548030A1A200013011313002F0A0D292100162620009D390F391F39 +0220210D0D322106973810F6ED332FED5D10E411393910ED11393911332F71ED003FED3F +ED1217395D31305D01140023222435343637352E0135342433320415140607151E010334 +26232206151416171E01173E01133426272E01270E01151416333236049CFED3E4F2FEE1 +908378730114D5DF010A7E7A8C94EDA5807EA15152258B42634C1F51762F705D5A6DBA8F +92AF019FC1FF00FAC37CC93B06409872A8E0D6A565C337063CB0024F6B7F786648692912 +3A13428EFD735C6F3816262231A86A87B09600020071FFE3048F05EF0022003700644045 +0804190429043C253C2B352E4C254C2B432E58045F175D18521B70017B250F111D324914 +294914061D020A0A0E4A060A351109232100091A009E390F391F39022C211A963810F6ED +5D10E6113910ED2F3939003FFD322F3F1239ED2FED123931305D01140207060423222627 +35331E01333212370E01232226272E01353400333216171612073426272E012322061514 +16171E01333236373E01048F595A5BFEEEB9345C240A1D6A41DDFB145DA4615C954B5859 +012CD86CB845555CCA40382F6C3F90A736402D6C424EA04601030342C3FEC270727C0B0C +BF0F1B0109E9383024343DBC83E4011E434353FEFBA49BBC342D27B4A35F782D1F152A28 +15290002015A00000249045D00030007001E4010015602050656050807002D0600010101 +2F5D3CFD3C003FED3FED313001231133112311330249EFEFEFEF0340011DFBA3011D0002 +00E6FE8E0292045D00030007004C40370A050A061A051A062A052B063504390645044806 +5504590664047404C5070F01560205060607560806063F044F04020404002D000101012F +5DFD322F5D332F0010F4322F3FED3130015D01231133130123130249EFEF49FEE692AE03 +40011DFCC0FD71028F00000100FE004D058004CB0006005E401073050105045403020306 +540001002C00B8FFE240260A1837031E0A1837031F002F0002030F000100400801300840 +080204050100004001500102012F5D332F1239395D5D002F5D335D2F2B2B31304B535887 +10FD8710FD05C059015D250135011509010580FB7E0482FC72038E4D02017C0201B4FE75 +FE75000200F5016A059703AE00030007003540200554060154060F020102400901300940 +09020405012F004000020000400101012F5D332F5D1239395D5D002F5D33ED2FED313001 +213521112135210597FB5E04A2FB5E04A2030EA0FDBCA0000001010C004D058E04CB0006 +006040107C030103045405050602540101002C01B8FFE240280A1837051E0A1837051F01 +2F0102050F010101400801300840080203050100002F013001400103012F5D332F123939 +5D5D002F5D335D2F2B2B31304B53588710FD8710FD05C059015D09013509013501058EFB +7E038EFC720482024EFDFFB4018B018BB4FDFF00000200A0000003ED05EF001C00200069 +40470F221F2224140335184F024F034F0544185C0554186904691064187418741C0C0870 +090109061A1E161612341A02081F551E08202B1F1F061F7F0901090F1509172000010000 +172F332F5D1239ED2F5DED332FED003FED333FFD322F111239395D2F31305D015D011406 +070E01071523113E01373E013534262322060723353E013332160123353303ED46393892 +52B34197303A4099796CC1380A46D760D7F9FE75CCCC047362993B39642FE1013125582D +346F56716F4423CC1B2BD1FAE2D3000200B0FF1E074E05EF0042004F00D640A206020F04 +0B050A090F1B0E1C0F3F0F4016021F041C051F1B1F1C142214271F3F1F4125022C042C05 +2F1B2F1C242220272F3F2F414740444856481D0A05052759496E09650D691A6821652766 +3F664174167B1B70277439743B0F120511081247520E1440151B371404044D53082D2D2A +510E083D311E51313D020F2D012D051143122D144A123F0B010B0F512051021829140B37 +0F0020007F000300002429376B5010F6ED332F5D123939ED5D2F5DED2F33FD32322F5D00 +3F33ED2F123939ED332F2FED332FCD2B2FED331239392F31305D015D0114020721270E01 +23222635341233321617353311333E013534022726242322040706021514121716043332 +3637150E0123222427260235341237362433320417161201112E01232206151416333236 +074E514BFE481B4A8858A8C9F6AB4970419FF32A2B5B5858FEFCA5A0FEF75F606D685F63 +010A9D56B75461A859BAFEC2727380867474013EB5C401346A6A71FD8F3F64398192747B +438602978BFEFC6B743C40FEE4E3010E212130FCB64BE159A4010C606067746262FEEF9A +A5FEEF61656716188E150F7F72730142C3B9013F7575867C7070FEC5FE4002061D19B4A6 +A3A73E000002001A0000055E05D10007000A009840694009014A0645070209090A080287 +01010114000700090A0387040104140505067C067307020334300A400A700A030A090A06 +03017A050105080F0C0106070903050C002400390042005A006A0074000700006E0C0F0C +010A052B0536054D05550565057B050705640B10E65D5D10F62F5D1217395D003F5D3C3F +39392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D005D2123032103230121 +130901055ED392FD7C92C9021E01087CFEFBFEFA019FFE6105D1FC7802DBFD25000300C8 +0000052B05D100150024003300524033050C150C270C550256157F190612112C341E1E07 +1D3408032D3407081615122C0F0F0725150071350F354035021E2C14076C3410F6FD325D +10F6ED12392F1239ED003FED3FED12392FED39393130015D011406070E01232111213216 +171E0115140607151E01013426272E012B0111213236373E01133426272E012321112132 +36373E01052B544754C99BFDF001B9A3A24A524A6C5A97AEFEB324282F8663EC01005D6E +2F2F277F3647308962FEC9010682A635383401CA6FAA37423805D118262B875E6A952D08 +1FCB0204364A171B0DFE52131E1E5FFD9A5A6A25190FFDD61B24276400010073FFE50546 +05EC002A0061404A05010D09061416011B0914152515361543145B08580A580E5B105B28 +600361147002760F70141316161A3412022A2A2634060A1600712C0F2C010F2C1F2C2F2C +3F2C6F2C0520150C682B10F6ED5D5D10F63C003FED332F3FED332F3130015D250E01070E +012322242726023534123736243332161715232E01232206070E01151416171E01333236 +373305463759483D8F56A2FEF762606C68625F010DA478EF920F7BF28A71B547454D5543 +46BB688FFA6D0E6C182A17131B5B615F0125C2B801226461663A49EB675E494D4BE5969D +E2474A476262000200C8000005B205D1000E001D003A4027391249126902680D04163408 +03173407087600010F1500741F0F1F2F1F401F601F041714076C1E10F6ED5D10F6ED5D00 +3FED3FED3130015D011402070E01232111213204171612073426272E012B011133323637 +3E0105B2B19366FBCDFE880174DA01015998AACF7A7958C68ABABA8FD5596F6F02E7CBFE +B65B3F3805D13F375FFEC4D6AFF0453227FB832A3947E800000100C80000049D05D1000B +003B402309350006100602060601053502030A350108040008010800730D0F0D01060914 +016C0C10F6FD325D10F63C5D3C003FED3FED12392F71ED31302901112115211121152111 +21049DFC2B03D5FCF1030FFCF1030F05D1B0FE68B0FDD700000100C80000047F05D10009 +0034401E053502020701350803070800034F0B02030300640B0F0B01020514076C0A10F6 +FD325D10F4322F5D003F3FED12392FED313001211121152111231121047FFD0F0287FD79 +C603B70521FE5CB0FD3305D100010073FFE305A205EC00240069404907010906060E1D06 +130E210E350E4901410E510E6506650B630E740E741C0F223540230123230C0310101734 +0C021D34030A7609012210220910216C0075260F264026021A1509682510F6ED5D10F6ED +3312392F2F5D003FED3FED332F1112392F5DED3130015D25060423222427260235100021 +32041715232E01272E01232200111000213236371121352105A27AFEDF87AEFEDE666770 +01A1016C7F010999121F763945AF6FFAFEDD0130010660BF48FE7102536E385360606101 +23C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAE00000100C80000053B +05D1000B003A4023033500081008020808050A070301050809021400780D0F0D400D500D +03080314056C0C10F6FD325D10F6FD32003F3C3F3C12392F71ED31302123112111231133 +11211133053BC6FD19C6C602E7C602D9FD2705D1FDB8024800010089000002D505D1000B +002E401909043206030A033201080D6D0A080B5A0A140305025A036D0C10F6F43210FDF4 +3210E6003FFD323FFD32313029013533112335211523113302D5FDB4C3C3024CC3C39804 +A19898FB5F000001002CFFEB02EA05D100150030401C6A017C01021233150307070B3403 +09131312140077170F170106651610E65D10F6ED332F003FFD322F3FED31305D01140623 +22262735331E01333236373E01351121352102EAEFC930A0360B29783F5C6D1A1B0FFEC5 +02010183C4D4110CB90E1E2A2728744C03659E00000100CD0000057505D1000B00A74075 +190956015C09030509280938094A0968098A09D809070F010A091E0119022A012B093901 +3909350B49014909450B5C01650B72007908100202038801C8010201B3000B000809B302 +0B0A030A840A010802050A07030105080B02030A0A0F0D20003000400004500001006E0D +400D01080314056C0C10F6FD325D10F65D5D322F123939003F3C3F3C1239393130015D87 +10C0C07AFD1804C00187107AFD5D1808C0015D71722901010711231133110133010575FE +FFFDB394C6C602D3F0FD6702979EFE0705D1FCF70309FD44000100C80000047605D10005 +002040110203043501080000070F07010414016C0610F6ED5D11332F003FED3F31302901 +113311210476FC52C602E805D1FADF00000100C8000005F605D1000C00794059560A0138 +023805360A6F0260036F05600A7F0270037F05700A0B5509560A5A0B0364037403750903 +050A020309000410043404440454046A04060404070B0903010708090A0B030502140078 +0E0F0E1F0E500E030513076C0D10F6ED5D10F6ED111739003F3C3F3C12392F5D12173931 +30015D72005D722123110123011123112109012105F6C6FE6276FE65B9010E018D018001 +130503FC970369FAFD05D1FCC3033D00000100C80000053805D10009006B404E0C071F07 +34074507510761077107077606010F0102061F0115063406440653066B0160067F017006 +0B0C010406025A01550602020701080603010408060102071300780B0F0B400B02021304 +6C0A10F6ED5D10F6FD113939003F3C3F3C12393931300172715D5D005D21230111231121 +0111330538F5FD3EB901330284B90534FACC05D1FB4004C000020073FFE105DA05F00017 +002300564042040004060B0C0B1217001706190C19125701570553075F0B580D58115F13 +53171076097915021B3415022134090A18150373250F25010F251F253F25031E150F6824 +10F6ED5D5D10F6ED003FED3FED5D3130015D011612151402070E01232224272602353412 +373624333216131000232200111000333200051E5B6163595CFBA19DFEFF5A5A61605C58 +01059AA0FF47FEFCE1E3FEFD0108DEDE0107052664FEDEB8B8FEDD6165666863630120B9 +B6012167626869FD610122013BFEC5FEDEFEDBFEC9013700000200C80000049605D10010 +001F0056403D3A143D1D4B144B1D500E540F650F071934000710070207070918340A0309 +080F211F21021115200030004000700004006F210F213F2102190714096C2010F6FD325D +10F45DED5D003F3FED12392F5DED3130015D011406070E012B01112311213216171E0107 +3426272E012B0111333236373E010496453E4DD2A0C6C6019486BA48555DCE3637307B5E +C4A778962F2F27040F63A93E4D4DFDD505D12D3039AA874D72241F1BFDAD2B2F306A0002 +0073FE7705F805F000250031008640610B0C0B120418041D190C19121518161D5C0B590D +59115C1353175719571D742010551F651F751D742D0425252135030B29341E0609760979 +150215022F34090A1E130600337326151B0009061D030F1B73330F33010F331F333F3303 +2C150F683210F6ED5D5D10E61117393210EDE62F2FED003FED3F5D123939ED3FFD322F31 +305D015D010E01232226270E01232224272602353412373624333216171612151002071E +01333236373303100023220011100033320005F83C753DAED309182D159DFEFF5A5A6160 +5C5801059AA0FF595B61DFBC0464842971181BECFEFCE1E3FEFD0108DEDE0107FE930F0D +BFB204036863630120B9B60121676268696164FEDEB8FEEFFE8A4B727E190A039F012201 +3BFEC5FEDEFEDBFEC9013700000200C80000059805D10010001F007A405408011D012D01 +3A01391D450F4814481D5A01560F59146F016902600A650B7E01750B110201B300100010 +071A34400201020205183407030105080F211F2140210311150F0D010D0D102000010019 +031400056C2010F632FD322F5D39392F5DED5D003F3C3FED12392F5DED12393130018710 +7AFD18C0015D29010121112311213216171E0115140607133426272E012B011133323637 +3E010598FEFFFE0EFEE9C601A187B448515BA28E612D342B7650E9C85E8C312D2B0250FD +B005D1232D339B77A1D93701A34063221D17FDCE212D2A6D00010086FFE5050205EC0030 +009A40790B09031F00231B08141F29082818241F242F390836103813351F362A4A084510 +4913451F4A27442A5802551B551F552D6B19661B651F662B602F7B16701F7020742A742D +86122309400E103708400E103700111A28041D06212125341D020A0A0E34060A2128151A +111500211A090074320F32703202096A3110E65D10E611393910ED2FED2F003FED332F3F +ED332F1112173931302B2B5D011406070E012322242735331604333236353426272E0127 +2E013534243332041715232624232206151416171E01171E010502514950D596A1FEFF85 +0E71012882B8CD61634BAF62C6BF013CF39D0106650E55FEEB919FC1607940EC52A6A801 +A957AA3B40483C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E28 +152CB20000010000000004EE05D1000700274018010435060303080F091F094F0903005B +0114045B4F0501052F5DF4FDE45D003F3FFD323130012111231121352104EEFDECC6FDEC +04EE0521FADF0521B000000100B2FFE1052905D1001D003A4029231223183D033D094C03 +4C0977137717081C0D031534060A1B1400761F0F1F1F1F401F030F140C6B1E10F6ED5D10 +F6ED003FED3F3C31305D011406070E01232226272E01351133111416171E01333236373E +01351133052947514DCE898CD0475147C621272C976A6B962D2721C60256A2F1504C464A +4852E8A9037BFC7B798C394142414239936D038A0001001A0000055E05D10006008C4066 +470148020205040507065706860603061400000105070457048604030414030203080144 +014B02580273017C02060005027503010303020845004A0302020103040024003A005A00 +6A00740006006E080F08010F08010B032B033503550365037B030603640710E65D5D5D10 +F65D1139395D003F3F5D1239393130015D8710FD5DC08710FD5D08C0015D090121013309 +01055EFDE2FEF8FDE2D401D301D305D1FA2F05D1FAE2051E0001005C0000078D05D1000C +00BB409E470367037903030D010B020404020505080C0B1701190318051908190B290329 +08290B3B023903320434083C09330A3A0B4B02440444084C09430A4B0B55015A0255045A +0557075909550A65016A0265046A056A09650A7F02700473087C09720A7C0B2E0C140001 +000714060506030301000300090205080B03090C0602060302083B0034064B0044067A00 +75060600720E1F0E3F0E5F0E7F0E0406670D10EE5D10E65D003F3F1217395D5D31300187 +10FD8710FD015D005D09012309012301330901330901078DFE7DDFFEC7FECEDAFE76CB01 +390134C90137013705D1FA2F04D4FB2C05D1FB2A04D6FB1E04E2000100440000053805D1 +000B00C2409775017A07020A04050A1A04150A2C04230A37094D04420A58035F04580557 +09500A570B68036D0468056709600A670B7B04730A170B14000100091408070803140201 +020514060607050407010A0B0602080302080F0D01060216022602360247020509081908 +290839084808050208070A04010406020D00160026003600470050000600660D08090619 +062906390648065F060606660C10F65D3210F65D321117392F2F5D5D5D003F3F12173931 +30018710ED8710ED8710ED8710ED005D015D09022309012309013309010538FDFE0201E5 +FE6AFE60D80207FE05E40191019A05D1FD20FD0F0265FD9B02E802E9FDA3025D00010006 +000004E605D10008007C405D2C012C04280735074001400440075007680470070A160619 +08270628085606590865066A08080814000100061405040502000D050200010004000703 +040107080402050302080F0A1F0A4F0A7F0A04005B01070114045B4F057F0502052F5DF4 +ED3910E45D003F3F1217395D3130015D8710ED8710ED015D005D09011123110133090104 +E6FDF4C6FDF2DB0197019B05D1FCBCFD7302780359FD66029A000001007E0000050805D1 +000900594036030708060813082608360846085608660876080808B30202030707033506 +03020208350108040803020707040209730B0F0B0102690A10E65D10E61139392F123939 +2F003FFD322F3FFD322F31300187107AED5D1887C0290135012135211501210508FB7603 +91FC910452FC6603B0B80469B0B3FB92000100EFFE7802F706140007001C400E05520201 +0652010B030000061F012FED332F3C003FED3FED3130012111211521112102F7FDF80208 +FEA6015AFE78079C8FF9820000010046FED003C006140003003A40280301020A0119012A +0138014B01590168017801890109011200032F000100030100006002700202022F5D332F +003F2F5D31300187ED5D87C00123013303C0ADFD33B0FED00744000100ABFE7802B30614 +0007001C400E045207010352010B031F000005012F3C332FED003FED3FED313001213521 +1121352102B3FDF8015AFEA60208FE788F067E8F000100BA02AA05D205D1000600474034 +3B0133034B0145035F0150036F0160037F0170030A69027B02020102050F031F033F035F +036F0305030305030000004F000200042F335D2F003F332F5D12393931305D015D012309 +0123013305D2C6FE39FE3AC5024D7E02AC0273FD8B0327000001FFFCFED4051AFF4C0003 +0011B6015002000005022F11332F002FED313001213521051AFAE2051EFED47800010154 +051602FA068C000300244016480159026902790204500360037003030303010000022F33 +2F002F332F5D3130015D0123013302FA95FEEFF30516017600020068FFE1041D04780026 +0033007A40540C0A0423190A152304590E511E5C2C690E601D6F2D7B0A7A14701D7B2C0A +0208283D3011401102111120084F1C011C1C183F20043141080A01080F1D011D1127021A +001D0B0091350F351F353F35032E1B0B853410F6ED5D10E6113910FD32322F5D003F3FED +3FED332F5D1112392F5DED123931305D015D2123350E01070E0123222635343637362437 +353426272E012322060723353E01333216171E011503110E01070E01151416333236041D +BB1955282F7A5297D26D6566011EA42D2A28703D4AB6610A37D06576AF403F42BB56E944 +5164747763A477113D12171FC89B7F9D2D2D20081D40541817102725BF0F24272F2E926C +FE1D013705141317615560614D00000200B9FFE10490061400130020005140393402350F +3B1530204402450F4B154020571267127F087B1C0C0E0906174211040C011E40060A0B08 +141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED3F3FED123939 +31305D011406070E012322262707231133113E0133321203342623220607111E01333236 +04904F4347AA665F8E450CB0BC4FB26FC6E5C2849352A8485073499CB102378CE04C4F4F +2D26340614FDD44153FED0FEE6C8CF4738FD80241CCD00010069FFE703F3047700210057 +40410F234F23022B01220E2A1624183A01350E3A16351849014F0A440E4F164118590155 +0E6901650E7A01730E131010143F0C0421211A3F03090F008D23171B09852210F6ED10F6 +3C003FED332F3FED332F31305D015D250E01232226272E013510003332161715232E0123 +2206151416333236373E01373303F35EA95F79CA484950012DF760B94D0A56B757A0B9B5 +A439762F2948150A462D32474848DC93011201383627D14348D7D0CAD91E18152F110002 +006CFFE10443061400130020004B40333C1A301C38204F1A421C48205806680670100912 +0102110518410E0401081E42050A1114021A0092221F223F22021B1B08852110F6ED5D10 +F6FD3232003FED3F3FED1239393F31305D2123350E01232202113436373E013332161711 +3303112E012322061514163332360443BC51B067C8EB514544B56158884BBCBC4C78479E +B0889650A475464E013401118EDE4E4C50252701E4FAFF0281221ADCCAC7CF470002006A +FFE60460047C0018001F005A404026042B0D30043B0D3C1E43044B0D4B1E5A0D50166A0D +6017780D7A1E0E013C1F1F0F1C3D15040B0B073F0F090C0C191A008F210F211F213F2103 +1F011B12852010F6FD325D10F4ED332F003FED332F3FED12392FED31305D01211416171E +013332363733150E0123200011100033321215272E01232206070460FCC93E36348F5672 +E7310A5FC66DFEEAFEC8012BF4E2F5B701939697B30C021B67993130305B2CCD2836012D +011501120142FEF8F32A94A2B2840001004400000312061E0018004B402D081439147505 +030000043F15000B0E3E0811050D080009400902090F090E00080B1A0F11000E400D1037 +0E891910F62B323232FD322F12392F2F5D003F3F33FD323FFD322F3130015D01232E0123 +22061D012115211123112335333534363332161703120A1F6426796D0153FEB3BC7F7FC6 +BB3F652A055E09136B8C269EFC4103BF9E25C7D50C080002006CFE590443047C00230030 +006E404E3D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C05 +702011220512211528401E0407070B40030D2E4115070F0601062124121A000618009232 +1F323F32022B1B18853110F4ED5D10E4113910FD32322F5D003FED3FED332F3FED123939 +3F31305D2510002122262735331E01333236373E013D010E01232202113436373E013332 +1617373303112E012322061514163332360443FEFEFEF459A9520A2EC864607E23231E55 +9B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A57FFEE4FEF61917C012352E29 +276E446644430121010790D14C474F272830FCD60261221DD0C6BCC23F00000100B90000 +045F061400160037402203151615751503100D084213040E01010D08021A0091181F1860 +1802100B1A0D881710F6FD325D10F6ED003F3C3F3FED123931305D2123113426272E0123 +22060711231133113E0133321615045FBC1218195E4B4DA84DBCBC58BC63B5BE027C4D87 +262A294C3BFCBE0614FDCD4952DACD00000200AF0000018305DB000300070030401E0144 +02400B0D370203060505087F090109920060041A01607F050105880810F65DE4FDE4E65D +003F3F3F2BED313001233533032311330183D4D40CBCBC0518C3FA25045D0002FFC2FE59 +021505DB000300190049402E0A051C0502014402400B0D370203163E19050B0B0F40070D +4F1701177F0A010A0160161A00600A1770190119921B10F65D3232E4FDE42F5D2F5D003F +FD322F3FED3F2BED31305D012335330314062322262735331E01333236373E0135112335 +210215D4D40CC8A828832C0A1C5F2D485816160DE901A50518C3FA0AC4C8100CB30B1C28 +2828715103849E00000100C1000004AF0614000B007D40512802D801DB090309010F0D1F +011D021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A +0802050A0507010105080B02600A700A020A0A00000D200D400D0208031A05890C10F6FD +325D11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0 +015D7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B0614FC +1A022FFDFC00000100BB0000017706140003001E4011020101087F05010592001A7F0101 +01880410F65DFDE65D003F3F3130212311330177BCBC0614000100B900000717047C002B +006A4048032403291324132944204426B72A07B62501251F1D1C0817422822041D050110 +1C08402D011F2D302D402D502D702D05001A016110250B1C0F1A101F1A1A1C611F104010 +801003102F5DF4FD3210FD11393910F4ED5D5D003F3C3C3F3F3CFD32111239395D31305D +2123113426272E01232206071E01151123113426272E012322060711231133153E013332 +16173E01333216150717BC0D151756514F9E4F0304BC0D151756514D9B4DBCBC58AF6372 +9F2772BC6BB8AF027C4886282B2C4F3D173D1EFD35027C4A85282B2B4C3BFCBE045D7C49 +5260556055DFC800000100B90000045F047C00160037402203151615751503100D084213 +040E05010D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3C3F3FED +123931305D2123113426272E012322060711231133153E0133321615045FBC1218195E4B +4DA84DBCBC58BC63B5BE027C4D87262A294C3BFCBE045D7C4952DACD0002006AFFE10471 +047C000B0017003E402C3B0E341034143B164B0E441044144B16080F3F0904153F030A0C +1B0090190F191F193F196F1904121B06851810F6ED5D10F6ED003FED3FED3130015D0110 +002322001110003332000334262322061514163332360471FEE8EBEDFEE90117EDEB0118 +C2AA9799A9AA9896AB022EFEEFFEC4013C01110111013DFEC3FEEFD9D3D3D9D2D9D70002 +00B9FE640490047C00130020004D4035320239153220430249154220561267127E087C1C +0A0E0906174211040C051E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD +32325D10F4ED003F3FED3F3FED12393931305D011406070E012322262711231133153E01 +33321203342623220607111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F +51A44B5073499DB0023C88E14E4A512628FE2C05F9753F55FECFFEECCAC84639FD87241A +D4000002006CFE640443047C00130020004B40333B033D1A301C3A204C034B1A461C4A20 +701009120502110418400E04010C1E4205091114021A0092221F223F22021B1B08852110 +F6ED5D10F4FD3232003FED3F3FED1239393F31305D0123110E01232202113436373E0133 +321617373303112E012322061514163332360443BC57AC64C7ED534442B2635A8B480CB0 +BC4E7846A3AA899352A4FE64021A4B490133010E90DD4B4950282730FCBF0278231CDDC2 +C4D34700000100B900000372045D001200384021000D100D200D030C090F000004430A0F +05090800001440147014020C071A09881310F6FD325D11332F003F3F3CFD322F11123931 +305D01232E012322060711231133153E013332161703720A2A4F3657A24BBCBC70AB5931 +2C2C03900A094D3DFCE7045DA55A4B0507000001006EFFE503D704780033009340710602 +091B1502191B26092A2432093C2442094C245E055D165321562F54326F056C166020642F +6532147A057F1174207928742B8A01880D851A872894019A1B0B000E1829041E03802201 +2222263E1E0407070B3E030921291B180E1B00211807008E350F351F353F355F357F3505 +07863410E65D10E611393910ED2FED2F003FED332F3FED332F5D1112173931305D015D01 +14062322262735331E0133323635342726272E01272E01353436373E013332161715232E +0123220615141716171E011716171603D7FDDB7CCF460A59DA647C8C26266C288135937B +393A38AD6B64CD440A48CE63678E2B2A5E34812B834747014299C43B23D3434F50564222 +221809180E27976E457A302F373123C935494F4E452323160C180A1E494A0001003EFFEA +02FD059E001B0048402C0C051A052B05030B10073E0D0B0A051B1B173F03094F1D7F1D02 +0E008C1D080D101A0A0807400D103707881C10F62B3232FD322F10F6325D003FFD322F3F +3333FD322F31305D250E012322263511233533113311211521111416171E013332363733 +02FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A0A0E12B8CB02529E0141FEBF9E +FE0358632B28251B0900000100B1FFE10457045D0016003740220B0619077A0703020515 +09051142050A010814021A0092181F186018020B1A08871710F6ED5D10F6FD32003F3FED +3F3C123931305D2123350E01232226351133111416171E013332363711330457BC5FAE69 +B0C4BC101A1B565249AD4BBC7C4B50D7D002D5FD8455792B2C284C3B03420001003D0000 +047F045D000600864041260429063604390646044906062905390540055105600505061A +000100041A03020328002703380037034A00470375017A02080005027503010305020802 +010300B8FFC0401E0910370C001C006A007A0004008D080F080103031303650375030403 +820710E65D5D10F45D2B113939003F3F5D1239393130015D8710FD8710FD005D015D0901 +2301330901047FFE3CBDFE3FCC015A0157045DFBA3045DFC870379000001005600000636 +045D000C0088406D0D031D032C012A0229032504260524082B0B34013B0544014B055701 +58045905570B6D02620464086A09640A6B0B79017D02720474087B09730A7A0B1E0C1A00 +0100071A060506000910090205080B03090C0602060502080F061F062F0603008E0E100E +3F0E6F0E030006830D10F6325D10E65D003F3F1217395D3130018710FD8710FD015D0901 +23090123013313013301130636FEDDAEFEE1FEE3ADFEDAC4CD01179B011EC2045DFBA303 +5DFCA3045DFC9F0361FC9F0361000001003C00000480045D000B00DA408C090B1B011403 +14071B09270327073C003B0134033404340634073B093D0A4C004B014403440444064407 +4B094D0A5A0155035A0555075A09550B6F016003690560076F09660B230F0200083F0230 +084F0240087D02700808091A0A0B0A071A060506011A000B00031A0405040102050B0809 +06047A047506020605040809060106020D010502080B04040A00B8FFC0401C0910370600 +01008D0D0F0D010F0D1F0D400D5F0D040602040104820C10F65D325D5D10F65D2B321117 +395D2F5D003F3F5D1217393130018710ED8710ED8710ED8710ED005D015D212309012309 +0133090133010480EDFEC3FEC1DB01B4FE50ED013B013CDCFE4901ADFE53022D0230FE5A +01A6FDDA0001003DFE64047F045D0007008C404104063406440650066006700606090307 +0519031705460149035800570179030902071A000100051A040304490046040200030204 +05020C02680101010203030400B8FFC040220910370C001C004A006A007A0005008D090F +0901030413044504650475040504820810E45D5D10F65D2B1117395D2F003F3F12393931 +30015D8710FD8710FDC0015D005D0901231301330901047FFD74C9D0FE43CC0157015A04 +5DFA0701D20427FCC4033C000001005D000003E3045D00090056403A15083A0335084A03 +45085C03540860087F0370080A0707033E06050202083E01080408030207070402098E0B +1F0B3F0B5F0B6F0B7F0B0502840A10E65D10E41139392F1239392F003FFD322F3FFD322F +3130015D2901350121352115012103E3FC7A028BFD830367FD72029F8B03359D86FCC800 +000100ADFE78045906140025005640382F1D3A074A07562367237523063A1D4A1D021D1C +09533F0A4F0A020A0A01145112012451010B140F00400002000919201F0E000940050105 +2F5D33333CFD3C2F2F5D3C003FED3FED12392F5DFD39395D3130015D012322263D013426 +2B01353332363D0134363B01152322061D01140607151E011D0114163B01045996B3DFA6 +AB3333ABA6DFB39672887B9A89899A7B8872FE78C7BC95A9BF9CBFA995BCC78A7E8CAF8B +BD371837BD8BAF8C7E000001017AFE78022806140003001B400F0F054F05020201010B00 +1F4F0101012F5DED003F3F3130015D012311330228AEAEFE78079C00000100BBFE780467 +0614002500544034211235023112400240127A0C06131200533F254F25022525091B511C +010A51090B1B0009010900170E1F050509004F200120202710D62F5D33333C10FD3C2F2F +5D3C003FED3FED12392F5DFD39393130015D012322061D0114062B01353332363D013436 +37352E013D0134262B01353332161D0114163B01046733ABA6DFB39672887B9A89899A7B +887296B3DFA6AB3301F8BFA995BCC78A7E8CAF8BBD371837BD8BAF8C7E8AC7BC95A9BF00 +000100BB018B05D1039F001F0056404206030609091309191908170A1518191A3B083418 +4B0844185A035A0A550D541B5B1D60056E14611875047A147518170F1C54060C54061F16 +1F2A000001000F2A00102F33ED2F5DED002F3333ED2FED333130015D010E01070E012322 +26272E0123220607233E01373E01333216171E013332363705D102292D2E82645E925466 +5C325E6409A702292C2B8A605D935550663D676103039F63C04B4D584F667D40AFC464BD +4D4A5B4D68625BCAA900FFFF001A0000055E07500236002400000117008E002F0175001A +40130320113011401170118011050200110E060725012B355D350003001A0000055E0801 +0012001E002100DF40442B2040205A18551A501E55206918651A651E09180B170D4A0646 +125906561278027703082020211F02870101011400120020210387040104140505067B06 +74120216510CB8FFC0405D0D10370C033470210121212006120405001C011C0301050813 +114F0F500F600F030F191140095F096F0903090F230106090F1204050C00240039004200 +5A006A0074000700006E230F23010A052B0536054D05550565057B050705642210E65D5D +10F62F5D1217395D2F5DED2F5DED003F3C3F5D1217392F5DED2F2BED3130015D8710FD5D +C0C0C08710FD5DC0C008C0015D005D212303210323012E01353436333216151406071334 +26232206151416333236130901055ED394FD8094C90207596BCC9293CB69592C72565672 +7355567236FEFEFEFD019FFE61057F2C9F668FC2C28F64A32A012F56737455567373FBF1 +02CBFD3500010073FE59054605EC00410097406F0A20032B1C20152B250B222B3402330B +342B4302430B452B5D1F582158255A275E3F6102602B70027626702B160B0B1B0B022D2D +313429021A061D41413D341D0A101014320C0D0F0F172A0009100920090309091D234371 +2C0071430F43010F431F432F433F436F4305371523684210F6ED5D5D10F43CE41239392F +5DED332F003FFD322F3FED332F1239393FED332F31305D015D250E01070E01071E011514 +062322262735331E01333236353426270E01232224272602353412373624333216171523 +2E01232206070E01151416171E01333236373305463759480B1A120203BB9326772D091A +5B326A620202132B12A2FEF762606C68625F010DA478EF920F7BF28A71B547454D554346 +BB688FFA6D0E6C182A17030903133317A2AC0E0CA20A1C5056132D1402025B615F0125C2 +B801226461663A49EB675E494D4BE5969DE2474A47626200FFFF00C80000049D08010236 +002800000117008D001E0175000BB601000D0D020325012B3500FFFF00C80000053807C8 +023600310000011700D7008C0175000BB60100170A050925012B3500FFFF0070FFE105D7 +075002360032FD000117008E009601750018401103002930295029702904020029240F03 +25012B355D35FFFF00B2FFE1052907500236003800000117008E00620175001840110210 +24202440246024040100241E0D1D25012B355D35FFFF0068FFE1041D068C023600440000 +0116008DE300000BB6020036371D2625012B3500FFFF0068FFE1041D068C023600440000 +01160043E800000BB6020035371D2325012B3500FFFF0068FFE1041D068C023600440000 +011600D6E000000BB6020038341D2625012B3500FFFF0068FFE1041D05DB023600440000 +0116008EE000001E4016030F39703902020039103920394039040039341D2625012B5D35 +5D35FFFF0068FFE1041D0653023600440000011600D7E200000BB6020041341D2525012B +3500FFFF0068FFE1041D07B1023600440000011600DBD300000DB70302003A341D262501 +2B35350000010069FE5903F3047700380080405B0F3A4F3A022A012A0726252A2D252F3B +01390735253B2D342F4B014F2140254F2D402F590153256C0166257A017525150B081B08 +0227272B3F230417031A3838313F1A090D0D113D090D0C0C142A06061A2026008D3A2E1B +20853910F6ED10F63C1139392FED332F003FFD322F3FED332F1239393FED332F31305D5D +015D250E01071E011514062322262735331E01333236353426270E01232226272E013510 +003332161715232E01232206151416333236373E01373303F3214D1D0305B79225742D09 +1A583268620302101D1979CA484950012DF760B94D0A56B757A0B9B5A439762F2948150A +460F1F0913391CA2AC0E0CA00A1A4E58162E140204474848DC93011201383627D14348D7 +D0CAD91E18152F11FFFF006AFFE60460068C0236004800000116008DFD00000BB6020022 +21121825012B3500FFFF006AFFE60460068C02360048000001160043FD00000BB6020021 +20121825012B3500FFFF006AFFE60460068C023600480000011600D6F900000BB6020024 +20120025012B3500FFFF006AFFE6046005DB0236004800000116008EF9000014400D0330 +2560250202002520120025012B355D35FFFF00A000000246068C023600D500000117008D +FE830000000BB601000505020325012B3500FFFFFFEB00000191068C023600D500000117 +0043FE970000000BB601000505020325012B35000002FFF50000023C068C0006000A003D +40247A0174037A057406040201030505030905080800047F0C01000C92071A047F080108 +880B10FD5D32FDE4335D2F2F003F3F2F332F1239393130015D01230B0123133303231133 +023C978F8E93B2E313BCBC0511010BFEF5017BF974045D00000300050000022D05DB0003 +0007000B0041402702010744600401040A050908011A7F000100041A700501057F0D0100 +0D92081A057F090109880C10F65D32FDE4335D2F5DED2F5DED003F3F2F5DED3939313001 +2335330523353313231133022DBDBDFE95BDBDB5BCBC0518C3C3C3FA25045D00FFFF00B9 +0000045F0653023600510000011600D70700000BB6010024170E1525012B3500FFFF006A +FFE10471068C0236005200000116008DE200000BB602001919060025012B3500FFFF006A +FFE10471068C02360052000001160043E200000BB602001919060025012B3500FFFF006A +FFE10471068C023600520000011600D6E200000BB602001C18060025012B3500FFFF006A +FFE1047105DB0236005200000116008EE2000014400D03301D501D0202001D1806002501 +2B355D35FFFF006AFFE104710653023600520000011600D7E200000BB602002518060025 +012B3500FFFF00B1FFE10457068C0236005800000116008DEE00000BB601001918101225 +012B3500FFFF00B1FFE10457068C023600580000011600430200000BB601001818091625 +012B3500FFFF00B1FFE10457068C023600580000011600D6F800000BB601001B17091625 +012B3500FFFF00B1FFE1045705DB0236005800000116008EFD000016400F02301C501C60 +1C0301001C17091625012B355D35000100BB0087045B0614000B003C4026070A0B000104 +0605AA0606080308010F0D1F0D02006302040708090A010602280563700301032F5DE6ED +173910E65D003F2F12392FED17393130012513231305350503330325045BFE6D058405FE +6D01930584050193040A05FC780388058105018EFE7205000002009A02CC03BC05EC000B +0017002840186A0F65157A0F751504155403030F5409020C2A0000122A062FED332FED00 +3FED332FED5D313001140623222635343633321607342623220615141633323603BCE8A9 +A9E8E8A9AAE7A58666668689636686045CA8E8E7A9A8E8E8A8668B8B6668898C0002009F +FE97046005C3001C0023007B40553C0A3F2030224B0A4F2040225A0153116C0164117901 +7611791F76230E1D1E180D3F134F130213130D1747060C030F0505201C301C401C031C18 +471C05030F251F2502130021202F090109001D0C0F1804031E09062F33ED1739322F5DED +2F3C5D002F3333ED2F5D2F3F123939ED33332F5D2F11393931305D250E01071123112600 +353400371133111E011715232E0127113E01373305110E01151416046047B46876E3FEFB +010BDD7668BA410B37AE7378AD330BFE2787A2984A1E2F03FE9D0167150120FAF2012B16 +0163FEA1032C1FCB2C5209FCB90A552985034214D2BDB5D2000100890000048B05EE0021 +00774050201D3415321D03031E151E251E410E530E5B16630E7302730E091B1805460F08 +1F084F0803081010144908010C0202204A01080F231F23021F02181B20080519060F0605 +190F040220004000020000022F332F5D1217392F2F2F2F33FD3211395D003FFD323F1239 +ED332F2F5DED393931305D015D2901353E01352335331134123332161715232E01232206 +1511211521151406071521048BFBFE7667B0B0FDCD6998400A3E98568C8B019FFE617C62 +0345CF20BDB98A0136C801012211CE2A30A590FEDD8A3D7EBB390B00000200ACFE7F0468 +05EF0043006100A9407F05050A2714051D273E2030424D104F20433240425C105E165132 +63096E106A2B63321152055F205F255F275B2D5B3950426B1F6A20653D654061427C097C +10742B7431107B50745F0218075F50293A062F0D3333373F2F021111153F0F0D1F0D020D +181B5F045607333A1B50262911471A1129330704221000010000561A222FED332F5D1217 +39ED2F2F3939ED2F2F123939ED002F5DFD322F3FFD322F111217395D31305D015D011406 +07151E01151406070E012322262735331E01333236353426272E01272627263534363735 +2E01353436373E013332161715232E01232206151416171E0117161716033E0135342627 +2E01272E01270E01070E01151416171E01171E01173E01046876636158424148C27C57A7 +5C0A4FB46C86A2272D299052D6525372666554404340C78057A85B0A3ABD797FA92B2B2B +845BC85A59F71C1E211D1C4E2C275D46123E1618261F1D1B512C266043144202596AA237 +072E915A4D8A3238361B1FC2253261573841191725143451518162A93907309259518334 +323A1C1DC21B3C5C573947171725152E4F4FFEAB21413A334617181F0C0B1514092D181A +563132461817200B0A18130B2F00000100B9012103A4040B000B0013B703030900000688 +0C10F6322F002F332F313001140623222635343633321603A4DC9A9ADBDB9A9ADC02969A +DBDB9A9ADBDB00010089FE95045205D1000D003B40245308610802010F0501054F060106 +0602AA0C030F0F1F0F020529040402290F0D010D0D092F332F5DED332FED5D003FED332F +5D2F5D3C31305D012311231123112E013534243321045294D695CEFC0104F301D2FE9506 +BAF94603BC05F8CCCFE8000100B9FFE8048D061E0036006D4048052E152E2E132C343913 +39343736490E4636532166217B1B0C3433143D151E3C15032D0007070B3D03092608181B +303400140C061C060206111B000614300325009038251A26883710F6ED10E611173910ED +2F5D2F12392FED003F3FFD322F3F1239ED2FED39393130015D0114002322262735331E01 +333236373E0135342623353236353426272E01232206070E01151123113436373E013332 +1615140607151E01048DFEF1DB2C73240A2A63384A6E21231FD3C69D9A161E1B583D395C +28252DBC48403CB35EB7E58E71A4BE01E1D6FEDD0F0DA518123A31347F4CA6A996778123 +421F1D231D2724845FFBC104387CB73E3A3BAE9770B2200925DF0004009FFF2E076105F0 +000B00170028003700AD407A7C0D7C11701370177A1A74277336070D1A04231E1A122314 +282C0E231022142C16211824233F1936234919472252186B0E641064146B166A19151A19 +2A182818292A25252818311B2A001D101D4F1D0318001D01901D011D0CAD1D06000012AD +06281AAA31311E19401D011D30AA1E15501D1E0903030F500902003FED332F123939ED2F +ED2F5D3C12392FED39012FED332F1239ED2F5D71335DFD3C2F39392FED8710FDC0313001 +5D005D011000212000111000212000031000212000111000212000072301231123112132 +16171E0115140607373426272E012B0111333236373E010761FE05FE9AFE9AFE0501FB01 +66016601FB74FE49FECAFECAFE4901B70136013601B7C0DFFEB5A2A501385E7A3B3F3B71 +63201C211F4635957F3E5A1D1F19028FFE9AFE0501FB0166016601FBFE05FE9A013601BC +FE44FECAFECAFE4401BC820163FE9D0393101F226149618126FD243812110AFECB131719 +3C000003009FFF2E076105F0000B001700330096406D7C0D7C117013701779197223062C +0E231022142C1633183324332A332E44184124442A442E54185424542A542E6B0E641064 +146B1662186A1D642417257F1801182C2A181E0CAD1E06000012AD06103320330233332F +521B1F252F2502252529522115501B210903030F500902003FED332F123939ED2FFD322F +5D2FFD322F5D012FED332F1239ED2F33ED2F5D3C3130015D005D01100021200011100021 +2000031000212000111000212000050E012322243534003332161715232E012322061514 +1633323637330761FE05FE9AFE9AFE0501FB0166016601FB74FE49FECAFECAFE4901B701 +36013601B7FE72569F4EE3FEF8010DDE59AC3E1036A9598E9F9994539D4810028FFE9AFE +0501FB0166016601FBFE05FE9A013601BCFE44FECAFECAFE4401BC572727F6EAE1010230 +1CB52846ABA59FAE3A34000200AA031106F105D1000E0016005240217B0478057A060379 +0C010B0C0D01030406080815121210135015030D280B0F370BB8FFC440110B0F37022800 +000728090FAE102814AE132FE4FDE42FED332FED2B2B003FFD3C332F1217395D3130005D +0123112303230323112311331B0133052311231123352106F17C14ED4FEF197BEEBFBFE3 +FC02E57FE5024903110269FE3D01CAFD9002C0FE82017E75FDB5024B75000001021D0516 +03C3068C000300244016470156006600760004500360037003030303010000022F332F00 +2F332F5D3130015D0901231303C3FEEF95B3068CFE8A01760002015A051803BE05DB0003 +000700264015020644016005010500140F010101041401000501052F5D33ED2F5DED002F +5D3CFD3C3130012335330523353303BEC7C7FE63C7C70518C3C3C300000100F5001B0597 +04FD0013008840541612010C0B080704030E111201020D80029002A002B0020402290303 +0C030D030112045307110E08530D070F0B010B40150130154015020407080B0112110E08 +030D0309030D1004062F004000020000400601062F5D332F5D1217392F2F1217395D5D00 +2F5D3333ED39392FED3939322F2F3130018710FD5D87C0C0C0C010C0C0C0C0C0015D0121 +0323132135211321352113330321152103210597FDA0689968FE5701DA54FDD2025E6999 +6901ABFE2453022F016AFEB1014F9C010C9C014FFEB19CFEF4000002000E0000076D05D1 +000F00130079404F04030B061B041B052A042B053B064A044A054D064D120B1213030414 +05050675057C06020A100E140115730601080B0440000100000F05010564140334130D35 +0A0A13050835123406030E35010508003F3CED3FEDED1239392FED2FED300110F65D322F +5D1739E62FED393931305D8710FDC0C0C0015D2901112103230121152111211521112101 +112303076DFC50FDF4D4CF0252050DFD1302EDFD1302EDFC50DBEF022CFDD405D1B0FE68 +B0FDD702230259FDA70000030073FF6E05DA064B001D002A003700A640850203000B0A0D +0C120F1A051C1103190D1F121F1A151C550254045A08590D59115B135017551C792A140B +090318061B1F0A1F0B1118161B2609272F75037F097F0A7F0B7F0C791270187019701A70 +1B132A2F1E2E043221340C09181B040615023234060A2A2F1E2E04272B15000C09181B04 +0F0073390F39010F391F393F390327150F683810F6ED5D5D10E411173910ED111739003F +ED3F121739FD11173931305D015D011402070E0123222627072313260235341237362433 +3216173733031612012E01232206070E011514161701342627011E01333236373E0105DA +63595CFBA173C94F9F84CD656D605C5801059A76C2528E84BC656FFE6F3990596EB44240 +453B3A035C3C3AFD683C91596EB73E434202E8B8FEDD6165663A37E4012664012CC4B601 +216762683737C9FEF464FED7013A2E2D4D4E4CE5938CE04C01B88BE44BFC432D2E504C52 +E100000300A1009D075F047C00170026003500724054051608311526192F2923262C3B34 +441C4B34510256075F0A5F0E5A1351165918553063026D0A631669236C24642C642D1821 +AF33AF0306120F09092AAF1BAF150F7B18743002272A0030180C0099371E2A0C993610F6 +ED10E411393910ED5D002F3CEDED332F1239393CEDED3130015D011402232226270E0123 +2202353412333216173E01333212052E01232206151416333236373E0125342623220607 +0E01071E01333236075FF5CF85DE454FD38FBFE2FACA86DE444FD58DBFE2FC683FB8608A +9C7F776E7C392225030C807658814A1E33133CBB608A9C0297EFFEF599929794010FD6EE +010C9A919695FEF1947575A79A85A6615E39470186A5477830672C7377A6000100D700B3 +05B505B6000F004540290E03540F010101010D045408AC0A070C401101301140110200AB +0A800D010D2A040105AB07400401042F5D3CF43C10FD5D3CF45D5D3C002F3CE4FD3C322F +5DFD3C31302521352111213521113311211521112105B5FB22021CFDE4021CA6021CFDE4 +021CB39E01A69E0221FDDF9EFE5A000200FE0000058005710006000A0061401605045403 +020306540001002C26012902360139020400B8FFE240240B1837031E0B18370954080303 +00400C01300C400C020504090A040100004001500102012F5D332F1217395D5D002F332F +2FED2B2B31305D4B53588710FD8710FD05C05909013501150901112135210580FB7E0482 +FC870379FB7E0482012F01E37C01E3B7FE96FE96FE1AA0000002010C0000058E05710006 +000A0063401603045405050602540101002C26002906360039060401B8FFE240260B1837 +051E0B1837095408050501400C01300C400C020503090A040100002F013001400103012F +5D332F1217395D5D002F332F2FED2B2B31305D4B53588710FD8710FD05C0590901350901 +350111213521058EFB7E0379FC870482FB7E04820312FE1DB7016A016AB7FE1DFC72A000 +0001006C000004A705D1001000834020300E3F10420E4F10540E5B10650E6A10730E7C10 +0A0020090B371020090B370EB8FFE0B3090B370DB8FFE04033090B374601550F700F0305 +0208320B0B0C010F0005070D0307080F121F1202030A005C0501030F05130D5C0C0A0F08 +BF0802082F5D3333E4ED39323210E42F2F5D003F3F1217392FED393931305D012B2B2B2B +5D090115211521112311213521350133090104A7FE400174FE8EBCFE8E0174FE3DD4014C +015005D1FCC15E8AFE5601AA8A490354FD6D0293000100BEFE640464045D001500384020 +080205140B051042050900080A0C0102131A0092171F176017020D091A0A881610F6FD3C +5D10F4FD3939003F3F3FED3F3C12393931302123270E012322262711231133111E013332 +363711330464B20A3B815B567F42BCBC209B5B5D8536BC76414A4640FDF305F9FCBA2752 +433C034000020095FFE0047905EF00220031006640481502151B162E2904241B310A351B +410A431B560A551A561F5020562A641A661E642A632E751B702E140F06263F0C0C061D19 +19153F1D022C3F060A1A0F232912141A0900002914092FED332F1239ED1139392F003FED +3FFD322F1112392FED123931305D011402070E01232226353400333216173E0135342623 +22060723353E01333216171E01032E01232206151416333236373E0104794E5255CB71C0 +F3010DCA5A9F4F02029E984EB74E0B51C96089CD3E2A1DCB3C98488DA8877080A322060B +0345A4FE987B7C62FDCBE4012134411A3B1AD9CA3F37C22C2D6D7C56CEFEC42F36B6AA91 +99C2BE215000000100BBFF43055905D1000C00A9406A01030F08450B8B03D903D30B0601 +08010B2B033208320B5D03660A600B08030203080908B3040304030B0A0BB30202030302 +03080908B3040304030B0A0BB30202030303610A010A07040304070A04020C0C0203090A +0A6B090109040202040309040B0835050301350B002FED3FED1117392F2F2F5D332F1239 +012F332F1217392F2F2F5D332F313087107AED87C0018710ED8708C00187107AED87C001 +8710ED8708C0015D71052135090135211521011501210559FB6202A1FD69046DFC850288 +FD6603B4BDBF029C0277BCB0FDA748FD730000010090FF3F05FC05D1000B003B40250307 +050009350A0270007F09020414005A6F017F010201010D0514095A00086008700803082F +5DE4ED11332F5DE4ED5D003FFD3C3C2F3C313001231123112111231123352105FCC8C6FD +B0C6C8056C0523FA1C05E4FA1C05E4AE0001007100000541045D000B002B401703070500 +093E0A05041A00B001010D051A09B0100801082F5DE4ED11332FE4ED003FFD3C3C2F3C31 +300123112311211123112335210541CABCFE3CBCCA04D003BFFC4103BFFC4103BF9E0001 +008AFE590490061E0021002C4018000004401E00111115400D0D0F231F2302001000091A +10192F33FD322F2F5D003FFD322F3FFD322F313001232E01232207061511140706232226 +2735331E013332373635113437363332161704900A2073208134356869BC346D310A216C +228135346868BD3A6636055708153D3D95FB9DCE6D6E0B0AB208153D3D950463CC6F6E0B +0A0000020097021303B005F000230030005740370A0A06211B0916212E0925215529600E +6029700E70290B02082552111120081C1C1853200201012E5308061D1125022A1D0B002B +2A000B2F33ED2F1239FD32322F003FED332F3FFD322F1112392FED12393130015D012335 +0E01070E01232226353436373E0137353426272E012322060723353E013332161503350E +01070E0115141633323603B0AA1C312C2D514980AF5D4D4EEF88242122573054A8270E2D +B84DD9BEAA45B736404E5B5E5283022A5E1425131415AA846A8724241F0612354013120A +300EAC0D20A99FFE74F504100F124D444C4C430000020079021303E405F0000B00170031 +40205D015D055207520B046A0F6515020F530902155303060C2A40000100122A00062F33 +ED2F5DED003FED3FED5D31305D0114022322023534123332120734262322061514163332 +3603E4F4C1C9EDEDC9C1F4B687787A86867A78870401EBFEFD0109E5E5010AFEFCEBACAC +AEAAAAADAB000001006B0000062105F00027006240440909090D1A091A0D2C092C0D3403 +300530113413460346136A1A641D64216A24101925140204160B341F0226183501160825 +1202191214081502141C272222290E15171C2FC4ED11332FC4123939ED2FED2FED003F3C +FD3C3FED12173931305D2901113E01373E01353426232206151416171E01171121352135 +26023510002120001114020715210621FDA443842D2F38F8E2E2F83A2F2F7F44FDA401B4 +A8D90172013601360172D9A801B40185275A373A9970C8FDFDC86E9E38395727FE7BAE7C +580132CC0116015AFEA6FEEACCFECE587C0000030068FFE3073F047C00390043005200B9 +40840B190B1D1C192604200D3604320D383D34414204420D4A3D4241520D5237554B630D +6137654B13161D4B2A512E622E7B0D7E137C1E7D24732E73387C4B0B47013C2170430143 +124333033018403D36042C2C283F30040B0B073F0F0A5041180A433A011A474412213304 +00470F2D012D0C0C3A1A00472D1B008F544054014D1B001B855310F632ED5D10E4113939 +10ED332F2F5D2F1217392FFD1139003FED3FED332F3FED332F3FED111217392F5D33FD32 +31305D015D01211416171E013332363733150E01232226270E01070E0123222635343637 +362437353426272E012322060723353E01333216173E0133321215272E01272E01232206> +<07032E01350E01070E01151416333236073FFCCD3C37348E566FD5420C4ED56DA6ED4C15 +5C323F947396D36C655F0124A22E2928703C4FB35A0D37CE659FD33945CA7DD9FBB60525 +20226D4F85B41991141569C0524F61747663C1022F72A234302D5334CD233B686713501C +242FC2987C992A271C033D41551717112A24BF0F265D5B5268FF00FB3E446625272C968C +FE6B35844B030915145B535F5C560003005DFF6C047104D900170021002B007840560008 +0F140A19292604001800250200180025020914001800253D1D322B4D1D422B0721261825 +04291B3E0609121504030F04293E030A21261825041E221B0009061215040C00902D0F2D +1F2D3F2D6F2D041E1B0C852C10F6ED5D10E411173910ED111739003FED3F121739FD1117 +3931305D5D5D015D011000232226270723132E01351000333216173733071E01252E0123 +22061514161701342627011E013332360471FEE8EB548F3B856EAB4B530117ED578E3674 +6F9B4C54FEBC2563379BAA222302442322FE40275F3B96AE022EFEEFFEC42A27C601004D +E2930111013D2C23ACE74CE0DC1D1DDCD2619436012B619836FD611F1ED900020071FFE2 +03BE05D100030020006D404C0F221F2202131E231E3A053A144B05400D400E400F43165C +05520F6F05650E651A7A057A0910127F1301131007120155030320201C34070A022B0303 +101F70130113130A200401041915040A2F33ED2F5D12392F5DED332FED003FFD322F3FED +331239395D2F31305D015D01233533130E01232226353436373E01373533110E01070E01 +151416333236373302C8CCCCF653BA70D7F9453B3A9D44B33C9E2E3644997967C5390A04 +FED3FA571E28D1AB62963E3E6529E1FECF2161282F7C4E716F4225000002012300000203 +05D1000300070027401707070055030305080F0901045D032B055D0F02200202022F5DE4 +FDE45D003F3FED332F3130012335331323133301F9CCCC0AE01AAA04FED3FA2F04370001 +00D2003905B002FA000500294018000002540F0401044007013007400702012A40000100 +00042F332F5DED5D5D002F5DFD322F313025231121352105B0ABFBCD04DE390221A00001 +0086FF6906C906FC0008004A402C15073307440772070407070806140302030207090829 +08590869080408000100010100040351060607080208002F2F1239392FED012F2F332F31 +308710DD5DC0C08710FD08C0005D09012301233521090106C9FC9066FE80ED0189013902 +DA06FCF86D03E18BFCCB065C0001FFDCFF37050005EF002B0077404D070B001F2E08270C +270F2E212925350D300F400E410F59226607660C0E0C0B0807201D1E21221D220F2D1F2D +020920201D2209041600160B081E462121281200000449280216161A4900120112002F5D +FD322F3FFD322F1112392FED393930012F2F1217392F2F5D8710C0C0C0FDC0C0C0313001 +5D01232E012322060F01211521030E01070E012322262735331E01333236371323353337 +3E01373E013332161705000A1D7229797E232A0141FEA3671D5C4041985C2950340A215E +2C7F812367D9F52A1A5C3E3E99573A4F3405290A1A77A0C28AFE1686B034352A0709B40E +1480A701EA8AC67BA833332C0A08000200F300CA0598045000190033006D40490A010606 +050E08130A1B06200528082D5B0452115B1E522B680B6432790B743210272730541D1A23 +541D1A002A012A0D0D1654030009542A0300101929000033291A0C290D26291A272F33ED +3CED2FED332FED002F333333ED2F2FED332F2F5D3333ED2F2FED332F31305D010E012322 +26272E0123220607233E01333216171E0133323637130E01232226272E0123220607233E +01333216171E0133323637059714B69E4D8C3841682C4B541C9B17B39F488E3B3D6B2D4C +59139E19AEA348903927802E4E56149D13B79E4D8A3A237C364B541B0450C2C64B2D3437 +607CB6C44A2E303B6D7DFDFCB8C34B2D1F4C6E7CC0C84A2E1C4F637A000200320000059E +05D100030006004F403148024703025A056A050205041A000003061A010102390236036B +0264037B02750306020305030000080105010203065401002FED3F1239012F11332F1739 +5D31308710FD8710FD04C0005D015D290101210902059EFA94023201080127FE50FE5105 +D1FAD7047BFB8500000200A600A2047A04760006000D005940107305730C0204400C1037 +0B400C103706B8FFC0B30C10370DB8FFC0401B0C103703000300070A0A07040500010100 +000C0B084007010707082F332F5D123939332F332F123939002F332F1239392F2F31302B +2B2B2B015D2501350115090105013501150901047AFDF00210FE9B0165FE52FDDA0226FE +8D0173BF01A35501A2BCFEEFFEEFD901BE5901BDC4FEDAFEDA00000200AE00A204820476 +0006000D005740107C037C0A0204400C10370B400C103702B8FFC0B30C103709B8FFC040 +1A0C10370C080C080505010403014000010000010A0B08070107082F33332F1239392F33 +2F5D123939002F332F39392F2F31302B2B2B2B015D090135090135010501350901350104 +82FDDA0173FE8D0226FE3CFDF00165FE9B02100260FE42C401260126C4FE4357FE5DBC01 +110111BCFE5E000300B2000005DA00DF00030007000B0025401405010206040A55090800 +2B0101042B0505082B092FED332FED332FED003FED173931302123353305233533052335 +3305DACCCCFDD2CCCCFDD2CCCCDFDFDFDFDFFFFF001A0000055E08010236002400000117 +004300640175000BB602000C0E050025012B3500FFFF001A0000055E07C8023600240000 +011700D700330175000BB60200180B050025012B3500FFFF0073FFE105DA07C802360032 +0000011700D7008B0175000BB6020031240F0325012B3500000200780000081C05D10016 +002500554039001C0022301C3022401C40227204720A721C741D72230B14351111011834 +10350D0317341535010811141417170E1203070073271F1507682610F6ED10E61117392F +FD32003FEDED3FEDED12392FED3130015D29012224272602353412373E01332115211121 +152111210511232206070E01151416171E0133081CFBCEC4FEFD6791B3AE984FF9E8042E +FD0502FBFD0502FBFC407A92B55F7481716D5BD09236415B0146CFD7013C603344B0FE68 +B0FDD7040479203642F8ABABEE4439280003006AFFE10776047C0024002B00370094406C +2604200D3204300D32293B2E323032343B364004400D40294D2E403040344D36530D5314 +5C165C1A531C5322620D621C6222700D72221B013C2B121E2B030F283D21042F3F1B040B +0B073F0F0A353F150A1E122B011A7F2C012C0C0C251A002C18008F393F3901321B188538 +10F6ED5D10E4113910ED332F2F5DFD323939003FED3FED332F3FED3FED1217392FED3130 +015D01211416171E013332363733150E01232226270E01232200111000333216173E0133 +321215272E012322060F0134262322061514163332360776FCDC3C34348D526DCD460C62 +BF69A8E84A45D183E9FEEF0117E38CC84447D78FE1ECB703918D8BAF10B8A49399A0A792 +92A5021B689831312F4F38CD2A347A686F78013C01110115013979726A81FEF4EF2A9B9B +A4927DD7D5E0CCD4D7D500010099023C047D02DC00030018400C0154020000050F051F05 +02022F5D11332F002FED313001213521047DFC1C03E4023CA00000010099023C076702DC +00030011B6015402000005022F11332F002FED3130012135210767F93206CE023CA00002 +FFED03E503160614000300070052B502180D103701B8FFE8B3090C3700B8FFE840090910 +3706180D103705B8FFE8B3090C3704B8FFE8401309103701000501050502060100B10202 +04B1062FED332FED003F3C332F5D3C3130012B2B2B2B2B2B0123013303230133031686FE +F1F0EF86FEF1F003E5022FFDD1022F000002009603E503BF0614000300070050B90004FF +E8400E0D10370518090C37061809103700B8FFE840200D10370118090C37021809103701 +000501050503070100B1020204B1000601062F5DED332FED003F3C332F5D3C3130012B2B +2B2B2B2B090123132301231303BFFEF186A5A4FEF186A50614FDD1022FFDD1022F000001 +FFED03E5018606140003002EB502180D103701B8FFE8B3090C3700B8FFE8400D09103701 +00010101020100B1022FED003F335D2F3130012B2B2B0123013301868AFEF1F403E5022F +000100A003E5023906140003002FB90000FFE8401A0D10370118090C3702180910370100 +010101030100B1000201022F5DED003F335D2F3130012B2B2B090123130239FEF18AA506 +14FDD1022F00000300D2000705BA051100030007000B00414029000B010B5608AC045407 +0F0101015602AC0F070107400D01300D400D0204AB000B2D05AB01400A010A2F5D3CE4FD +3CE45D5D002F5DF4ED5D10FDF4ED5D313001231133012135210123113303BDEEEE01FDFB +1804E8FE03EEEE03FE0113FD2BA0FD2B0113000200ACFFC805E00554000300070057403B +4804470658045706680467067F047006087F057007020705000301000330036003900304 +03B200023002600290020402B220010406020002000201192F3333182F2F123939002F1A +19FE5DEE5D11173931305D015D090705E0FD66FD66029A01BDFE43FE4301BD028EFD3A02 +C602C6FD3A01DDFE23FE2300FFFF003DFE64047F05DB0236005C00000116008EDD000016 +400F02100E600E700E0301000E0B040025012B355D35FFFF0006000004E607500236003C +00000117008EFFED01750019401302000E400E500E600E700E0501000E090500252B355D +35000001FF9A0000034B05D10003001D401138034803680065016903050100030000022F +332F003F2F3130015D09012301034BFCF4A5030C05D1FA2F05D100010000FFE504CA05EC +003300CC408758040102B52F0103B81D010237184718571867187718E718F71807013A00 +4A005A006A007A00FA0006032C06502998090109230F5020F71201081218122812581204 +00121203151827190119191D341502002833010133332F34030A272001022320292C0400 +0F12090604260C082A182A282A03002A21210C18007135103407073426150C683410F4ED +12392F103C10F63C11392FC45F5D111217391117395F5D003FED332F5F5D333FED332F5D +331112392F5F5D5D3CFD3CDD5D3CFD3C5F5D5F5D5F5D5F5D31305F5D250E012322000323 +37332E013534363723373312003332161715232E01232204072107210E01151416172107 +211604333236373304CA6CB97EF3FE8331862C4B02020202772C5D3A0174F38DBF541050 +C67C9DFF003001DB2CFE3C02030202017C2CFEC4310108969DB2440F3E3326012E010476 +152F161A34187601010128292DD1413DCFB17618341A172E1576B6D13F3D000100BA00AC +02E0046C0006002C400972050104400C103706B8FFC0400C0C1037030300040501000001 +2F332F123939002F332F31302B2B015D2501350115090102E0FDDA0226FE8D0173AC01B4 +5901B3C7FEE7FEE7000100C200AC02E8046C0006002C40097D030104400C103702B8FFC0 +400C0C10370505010403010000012F332F123939002F332F31302B2B015D090135090135 +0102E8FDDA0173FE8D02260260FE4CC701190119C7FE4D000002004400000453061E0003 +001E005B40370B103A10601A741A04014402031515193F1100070A3E1D0D050509080B14 +0160051A006004140A0492201D071A0B0D0A400D10370A891F10F62B3232FD3210E61139 +10E4FDE42F2F003F3C3F33FD323FFD322F3FED3130015D01233533032311211123112335 +333534363332161715232E012322061D01210453D0D011BCFDF9BC7F7FC8B73E65290A1C +6A22796A02C90518C3FA2503C2FC3E03BF9E31C1CF0D07AA08146B8C2800000100440000 +0447061E001A004E402D6C077A0702191A191A053E16000C0F3E091205010E08100A011A +000A0F00921C090C1A10120F400D10370F891B10F62B3232FD3210E6113910ED2F2F003F +3C3F33FD323FED33332F2F31305D2123112E012322061D01211521112311233533353436 +33321617370447BC2B8B35A2850149FEBDBC7F7FE9DE45902CBC056D080C6C8C2C9EFC41 +03BF9E31BFD10E040800000100BB007C045B06140013005740390B0E0F1011080609AA0A +0712130001040605AA060A060C030C010F151F150210630063020407080B0C0D0E111201 +0A022803090563700301032F5DF63C10ED173910E6E65D003F2F1239392FED17392FED17 +3931300125132313053505110535050333032515251125045BFE6D058405FE6D0193FE6D +01930584050193FE6D019301FB05FE7C018405810501A20581050184FE7C058105FE5E05 +000100FD01FF01EC031A00030016400C02560108002D2F013F0102012F5DED003FED3130 +0123113301ECEFEF01FF011B0001FFF6FEEC018F011B0003002EB90000FFE840190D1037 +0118090C370218091037010F0301011F03010300B1022FED002F5D335D2F3130012B2B2B +09012313018FFEF18AA5011BFDD1022F0002FFF6FEEC031F011B000300070051B90004FF +E8400E0D10370518090C37061809103700B8FFE840210D10370118090C37021809103701 +0005010505030F071F07020700B1020204B1062FED332FED002F5D3C332F5D3C3130012B +2B2B2B2B2B0901231323012313031FFEF186A5A4FEF186A5011BFDD1022FFDD1022F0007 +0095FFE30B9305ED000B000F001B00270033003F004B00C640900908060A0918061A083C +073E1808170A1818171A193C163E2908260A2918261A283C253E460D480F560D580F680E +17791F7625792B7631794376490625512F034F030203031F5109020F030E08432B513D20 +19401902191949315137130A4F0C400E020C0E462A003A013A402A3A003401342E2A0016 +01163416282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D12 +3939ED33332F5DED2F5D33ED2F5DED2F2F5D003F3CFD3C332F5D3CFD3C3F3F3FED332F5D +ED5D3130015D011406232226353436333216250123090114062322263534363332160134 +262322061514163332360134262322061514163332362514062322263534363332160734 +262322061514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6 +BAFABB596466585866645904935964665858666459043EBEB2B5BABDB2B6BAB259646658 +586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADCDDE0DADA01B8AC8888ADAD8787 +FE17AC8888ADAD8787AEE0DADCDDE0DADADFAC8888ADAD878700FFFF001A0000055E0801 +023600240000011700D600280175000BB602000F0B050025012B3500FFFF00C80000049D +0801023600280000011700D600260175000BB60100100C020325012B3500FFFF001A0000 +055E08010236002400000117008DFFF80175000BB602000C0C050025012B3500FFFF00C8 +0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500 +FFFF00C80000049D080102360028000001170043003C0175000BB601000D0D020325012B +3500FFFF0089000002D508010236002C00000117008DFF120175000BB601000D0D040925 +012B3500FFFF005D0000030808010236002C0000011700D6FF270175000BB60100100C04 +0925012B3500FFFF007E000002E207500236002C00000117008EFF240175001940130200 +104010501060107010050100100D0409252B355D3500FFFF0089000002D508010236002C +000001170043FF3E0175000BB601000D0D040925012B3500FFFF0073FFE105DA08010236 +003200000117008D00780175000BB6020025250F0325012B3500FFFF0073FFE105DA0801 +023600320000011700D6008F0175000BB6020028240F0325012B3500FFFF0073FFE105DA +08010236003200000117004300AA0175000BB6020025250F0325012B3500FFFF00B2FFE1 +052908010236003800000117008D006E0175000BB60100201F0D1D25012B3500FFFF00B2 +FFE105290801023600380000011700D6005B0175000BB60100221E0D1D25012B3500FFFF +00B2FFE1052908010236003800000117004300AA0175000BB601001F1F0D1D25012B3500 +000100BB00000177045D0003001E4011020501087F05010592001A7F010101880410F65D +FDE65D003F3F3130212311330177BCBC045D00010136051103E1068C0006003A40275905 +5606690566067A0573060601020350056005700503050560030103500060007000030000 +042F332F5D002F5D332F5D1239393130015D01230B0123133303E19FB9B89BE4E3051101 +00FF00017B00000100ED051D042C06530019003940233902350E4902450E04190D190952 +0F101F1002101652100D600301031928000C28000D2F33ED2FED002F5D3333ED2F5DED33 +2F2F31305D010E01232226272E0123220607233E01333216171E0133323637042C0B846F +365C292F412734340483088E67325D2A2F49213339030653989A27252B2B5A4C979A2724 +29295C4600010118053703FE05D10003001440090253100101010000022F332F002F5DED +31300121352103FEFD1A02E605379A0000010113050E0402068C000D0056403A6508650C +7508750C040D5006600670060306060AAA094003F00302D19003E003029003E003028B00 +03018950030150030159030D2A00072A00062F33ED2FED002F5E71725E5D5E5D715E5D5E +ED332F5D3C31305D010E0123222627331E013332363704020AC5A9A9C509A60C6B5B596B +0E068CA8D6D6A8847878840000010221051802F505DB0003000EB50244010015012FED00 +2FED31300123353302F5D4D40518C3000002012D050903E907B1000B00170045402E0F51 +090009300902313009015009600970090309091551030C29200030000200003000600003 +D0000100001229062FED332F5D7172ED002FED332F5D725E715EED313001140623222635 +343633321607342623220615141633323603E9CC9290CECC9293CB917558587576575875 +065E8FC6C5908FC4C48F567776575776760000010161FE59037000140014002440150B02 +1B012B013901041207070B53030D0E2A0000062F332FED003FFD322F2F31305D05140623 +22262735331E0133323635342627331E010370B79225742D091A58326862060399020659 +A2AC0E0CA00A1A4E581D491913340002015605160477068C000300070042B54500450402 +00B8FFE8B30E103704B8FFE840190E10370750036003700303030305019F000100000204 +0204062F33332F2F332F5D002F33332F5D333130012B2B5D09012313230123130477FEFE +8BA9B0FEFE8BA9068CFE8A0176FE8A0176000001019FFE5F037C000A0014002440150E04 +1E042B043B04040A14141053030D000D2A00062F33ED2F003FFD322F2F31305D010E0123 +222635343637330E011514163332363733037C344B2A8BA90D069B0606535A24511108FE +790E0C9E8F263E1A1B3C1E524E1B080000010132051103DD068C0006003A402754015902 +64016B0274017B020606050250036003700303030360020102500060007000030000032F +332F5D002F5D332F5D1239393130015D01032303331B0103DDE4E3E49FB9B8068CFE8501 +7BFF00010000000100180000048005D1000D0047402A3B0B4B0A5A0A7A0A04020B050804 +090309090106030C3501080A030A00000F0F0F01080B140503026C0E10F63232FD325D11 +332F392F2F003FED3F12392F2F12173931305D29011107353711331101150111210480FC +52BABAC6015DFEA302E8021798A395031AFD78011BA3FEE8FE0700010018000002360614 +000B003D4023490559056905030407010A040B05050B0B030801030800050D92000A011A +050704880C10F43232FD3232E62F2F003F3F12392F332F12173931305D01071123110735 +37113311370236B5BCADADBCB5037A91FD1702608D9F8A0318FD7194FFFF0086FFE50502 +0801023600360000011700DF004D0175000BB6010034311A0025012B3500FFFF006EFFE5 +03D7068C023600560000011600DFAE00000BB601003734180025012B3500FFFF007E0000 +050808010236003D0000011700DF00320175000BB601000D0A020625012B3500FFFF005D +000003E3068C0236005D0000011600DF9400000BB601000D0A050625012B35000002017A +FE780228061400030007002940160F094F090201060106050201050B00041F014F050105 +2F5D3CFD3C003F3F1239392F2F3130015D01231133112311330228AEAEAEAE02F6031EF8 +64031E000002000E000005BC05D100120025005240333816481666026811041B1E083C0B +0B071A340C031F3407087600011D1D0713150074270F274027602703091B1E140B09076C +2610F63232FD322F5D10F6ED12392F5D003FED3FED12392FFD393931305D011402070E01 +23211123353311213204171612073426272E012B011121152111333236373E0105BCB193 +66FBCDFE88C4C40174DA01025898AACF7A7958C68ABC0169FE97BC8FD5596F6F02E7CBFE +B65B3F3802E48F025E3F375FFEC4D6AFF0453227FE4C8FFDC62A3947E8000002006AFFE1 +0471061E001F00310084405B190D290D32013420392B362D45014C0D44204A2B442D5A2B +542D6F05741E7421100C03293F090F121A1D041B10100903161B1B3F164F160216022F3E +030A1C111A1D1C030011120F0C26051F162F160216231316090000092C14062FED11332F +1239ED2F5D17391217392F2F003FED3F5D332F111239392F1217392FED123931305D0110 +00232200353400333216172E01270527372E012735211E01173717071612013E01353426 +272E012322061514163332360471FEE4F1E5FEEB0112CA6C9B56208757FEF842ED54905D +0127236225D242BA99A6FEDE313403024BA55693A9A98F427B027DFEBCFEA8010EF5E201 +08353570D64AA2618E43512F1019431A80616D93FE9BFD8A3BA99620371E2D2BAF98B4AE +2C00FFFF0006000004E608010236003C00000117008DFFE40175000BB601000B0A050025 +012B3500FFFF003DFE64047F068C0236005C00000116008DDD00000BB601000A09040025 +012B3500000200C80000049605D100120021005C403E391F491F551180108011051B3400 +0701071A34200C010C0C07090A0309080F231F23021315200030004000700004006F230F +233F23020C1B071400096C2210F632FD32325D10F65DED5D003F3F1239392F5DED2F5DED +3130015D011406070E012B011123113311333216171E01073426272E012B011133323637 +3E010496463C4EDB97C6C6C6CD85C243535ECE343830805AC4A777982F2C2903135CA939 +4B48FEBE05D1FEF22D2C35AA7D486B231E19FDCD292D2966000200B9FE64049006140013 +0020004D4035320239153220430249154220561267127E087C1C0A0E0906174211040C01 +1E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED +3F3FED12393931305D011406070E012322262711231133113E0133321203342623220607 +111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F51A44B5073499DB0023C +88E14E4A512628FE2C07B0FDD43F55FECFFEECCAC84639FD87241AD4000100DC023C05B0 +02DC0003001E401100540F02010240050130054005020000012F332F5D5D002F5DED3130 +0121352105B0FB2C04D4023CA000000101230069056904AF000B00264017D702D80802A7 +0201D705D80B02A80B0105840294020202192F5D002F3130015D71005D71250709012709 +01370901170105696FFE4CFE4C6F01B8FE486F01B401B46FFE48D86F01B8FE486F01B401 +B46FFE4801B86FFE4C00000101230236039205D5000F002E4018055006060C030E03AA01 +0E0505020F0F0C0E2A02100301032F5D33ED39322F2F332F003FFD323F332FED31300121 +35331123353236373E01373311330392FD99EAF22D6C1E252C0387DD02367A0238700D0C +102C28FCDB00000100CF023603C705EF001D0045402D24152518361535184C105E106D10 +651866197D1075180B0F0F0B521302021C52010E00001C02082A16101610022F33332F2F +ED1239332F003FFD323FED332F3130015D0121353E01373E013534262322060723353E01 +333216151406070E01072103C7FD0864A733834A6B5A59AC300D47AF57B4BB6173379B42 +022002369C3E6E29676754454C3D1FB41A239D7D63975A2B6629000100CF020F03BC05F0 +002E007740162A033903450C4A1F540C5C1F6B0864237D0874230A27B8FFC040390B0E37 +2C2B15520F16010F161F164F165F16CF16FF16061621211D52160625020A0A0E52060F1A +2A281622112A2216282C04091000010000092F332F5D121739ED2F2F2FED003FED332F3F +1239ED332F2F5D71ED393931302B5D011406070E012322262735331E013332363534262B +01353332363534262322060723353E0133321615140607151E0103BC42383994595EA54A +0E29C35D648576708F80706B63684DC32C0E4AAD5AAFC16E595F8303314B712223211E1C +B3243B474B553C8D4D443D473E24B21B23886A59721A08116F00FFFF00AB000007A305D5 +0036023B9200003700BB023700000117023C0404FDC300204015020E08020E400E600E02 +010B2B0B5B0B6B0B7F0B045D11355D1135003F35FFFF00AB0000074105D50036023B9200 +003700BB023700000117023E0384FDC3002640190302100803020E1F0E5F0E7F0E03010B +2B0B5B0B6B0B7F0B045D11355D113535003F3535FFFF008C0000077905ED0026023DA600 +002700BB029100000107023E03BCFDC30036402603023608030236103630367F36030131 +003134314B315F316B317B3106000900093F094F09035D11355D11355D113535003F3535 +0001003C0000047405D10011005840330C0F09512F063F060206060B02344F0501050510 +0B01341003200301080803032F00010000130E01050A140F0E2F0B3F0B020B2F5D3333FD +32322F11332F5D332F392F5D003FED2F12392F5DED12392F5DED39393130012111211521 +1121152111231123353311210474FD3E028AFD76014AFEB6C0B6B603820526FE55ABFEEF +8BFECC01348B0412FFFF0073FFE305A208010236002A0000001700D900CF0175FFFF006C +FE590443068C0236004A0000011600D9FE00000BB6020037311A2325012B3500FFFF0089 +000002D507500236002C0000011700DAFF240175000BB601000D0C040925012B35000001 +0086FE59050205EC004700C240990B0B0A1F0036003A1B0B1B1F13362F0B2A1F292F2436 +24463F0B391F3427392A34363441481F4427482A43364B3E44415F035A05523257365544 +6B026F046A30643264366642604679057A2D703670377541754486292B20400E10371F40 +0E10371A060028313F06341D38383C343402212125341D0A101014530C0D0F0F172A0937 +3F153128150031371D0904200074490F49704902206A4810E65D10E611173910ED2FED2F +2FED332F003FFD322F3FED332F3FED332F1112173931302B2B5D011406070E01071E0115 +14062322262735331E01333236353426270E012322242735331604333236353426272E01 +272E013534243332041715232624232206151416171E01171E01050251492C683E0303B3 +9A25742D091A523868620302142515A1FEFF850E71012882B8CD61634BAF62C6BF013CF3 +9D0106650E55FEEB919FC1607940EC52A6A801A957AA3B233711162C199DB10E0CA20A1C +4E5818291201023C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E +28152CB20001006EFE5903D70478004A00AA40810820090C37090204321902173224202B +3B34203A3B43204B3B5A1C5C2D5237534652496B1C6B2D6237624662497C1C7C28743779 +3F74428B0188248531873F1D170300252F4006351A80390139393D3E35041E1E223E1A09 +0D0D1153090D0C0C142A0638401B2F251B002F381A06041D008E4C0F4C1F4C3F4C5F4C7F +4C051D864B10E65D10E611173910ED2FED2F2FED332F003FFD322F3FED332F3FED332F5D +1112173931305D2B011406071E011514062322262735331E01333236353426270E012322 +262735331E0133323635342726272E01272E01353436373E013332161715232E01232206 +15141716171E011716171603D77F6F0205B79225742D091A5832686203021528177CCF46 +0A59DA647C8C26266C288135937B393A38AD6B64CD440A48CE63678E2B2A5E34812B8347 +4701426BA32A13361AA2AC0E0CA00A1A4E58182D0F02023B23D3434F5056422222180918 +0E27976E457A302F373123C935494F4E452323160C180A1E494AFFFF0073FFE505460801 +0236002600000117008D006E0175000BB601002D2C0C1525012B3500FFFF0069FFE703F3 +068C0236004600000116008DCE00000BB601002423090F25012B3500FFFF0073FFE50546 +0801023600260000011700DF00A80175000BB601002E2B0E1525012B3500FFFF0069FFE7 +03F3068C023600460000011600DFF600000BB601002522090F25012B35000002006CFFE1 +04FB0614001B0028006F404A3B05380C3C2232243E284B054A0C4E2245244F2859086908 +70120D0114511A17171018011304072041100403082642070A160088011617131C041A1A +01922A1F2A3F2A02231B010A852910F632ED5D10F632FD3232323210E42F003FED3F3FED +1239393F12392F3CFD3C31305D01231123350E01232202113436373E0133321617352135 +213533153301112E0123220615141633323604FBB8BC4DAD6EC6ED524444B66059864CFE +95016BBCB8FE8C4F73499CB2879750A404F4FB0C754252012E01118EDB4D4C4F2427CE86 +9A9AFB9902792218D6CCC3CD47000001FFFC0684051A06FC00030011B601500200000502 +2F11332F002FED313001212721051AFAE705051E06847800000100FD01FF01EC031A0003 +0016400C02560108002D2F013F0102012F5DED003FED31300123113301ECEFEF01FF011B +FFFF001A0000055E0801023600240000011700D900310175000BB60200110B050025012B +3500FFFF0068FFE1041D068C023600440000011600D9D600000BB602003A340B2625012B +35000002001AFE5F062B05D1001B001E00C840900F051F052E053E05401D700806381C4A +0E450F590E570F051D1E1D1C0A77098709020914100F101D1E0B770C870C020C140D0D0E +570E580F7D0E730F040B34301E401E701E031E091E1D030D0E031B1B1753030D107A0D01 +0D080000142A060F20010E0F1D06040D0C102410391042105A106A1074100710106E200F +20010A0D2B0D360D4D0D550D650D7C0D070D641F10E65D5D10F42F5D1217395D2FED332F +003F5D3C3FFD322F3F1217392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D +005D010E012322263534363703210323012101230E0115141633323637330902062B344B +2A8BA91E0679FD7C92C9021E0108021E610607535A24511108FD91FEFBFEFAFE790E0C9D +90406A150154FE6105D1FA2F1B351B524E1B08033102DBFD250000020068FE5F052E0478 +003A00470099406A0B11052B1A12162B2A0544225F25544065166C2562407B127B1D7F25 +703F0F0C041B04390559166916053A3A3653030D0A103C3D301940190219192810242420 +3F28044541100A3009080000332A060F25012506193B091A2F25132F91490F491F493F49 +03421B13854810F6ED5D10E4113910FD3232322F5D2FED332F003F3C3FED3FED332F1112 +392F5DED12393FFD322F31305D015D010E0123222635343637350E01070E012322263534 +3637362437353426272E012322060723353E01333216171E011511230E01151416333236 +373301110E01070E01151416333236052E344B2A8BA90D041955282F7A5297D26D656601 +1EA42D2A28703D4AB6610A37D06576AF403F421D0607535A24511108FE3456E944516474 +7763A4FE790E0C9E8F263B1377113D12171FC89B7F9D2D2D20081D40541817102725BF0F +24272F2E926CFD0A1B321E524E1B0801FB013705141317615560614DFFFF00C8000005B2 +0801023600270000011700DF00280175000BB60200211E080F25012B35000003006CFFE1 +062706140003001700240072B90000FFC0404A0E10370118090D3702180910373D073D1E +34203B244D074F1E45204B245A0A6A0A70140B02020316011506091C4112040508224209 +0A0000021618061A02041F263F26021F1B040C852510F632ED5D2F33FD32322F332F003F +ED3F3FED1239393F33332F31305D012B2B2B010323130123350E01232202113436373E01 +33321617113303112E012322061514163332360627FA7F98FEFDBC51B067C8EB514544B5 +6158884BBCBC4C78479EB0889650A40614FE0701F9F9EC75464E013401118EDE4E4C5025 +2701E4FAFF0281221ADCCAC7CF47FFFF000E000005BC05D1021600E70000000100C8FE5F +04CD05D10020005C40390C041C042D043D04041235000F100F020F0F090E350B03133516 +090820201C53030D00192A0006060C10030A1473220F22010F1314140A6C2110F432FD32 +5D10E61117392F33ED2F003FFD322F3F3CED3FED12392F71ED31305D010E012322263534 +3637211121152111211521112115230E01151416333236373304CD344B2A8BA90B06FDC7 +03D5FCF1030FFCF1030FFE0607535A24511108FE790E0C9E8F24331D05D1B0FE68B0FDD7 +B01B351B524E1B080002006AFE5F0460047C002C0033007B40560D1E1A1E2604290D2B1E +34043A0D3C1E3B3244044B0D4B32590D502A6C0D602B790D783212191915531D0D013C33 +3323303D29040F230B0B073F2309122A20201A1A0C0C2D1A008F350F351F353F35033301 +1B26853410F6FD325D10F4ED332F3C11332FED003FED332F12393FED12392FED3FFD322F +31305D01211416171E013332363733150E01070E011514163332363733150E0123222635 +343637260011100033321215272E01232206070460FCC93E36348F5672E7310A4A9B5102 +03535A24511108344B2A8BA90604F8FEEB012BF4E2F5B701939697B30C021B6799313030 +5B2CCD1F3109143012524E1B089F0E0C9E8F18321212012A010401120142FEF8F32A94A2 +B284FFFF00C80000049D0801023600280000011700DF00220175000BB601000F0C020325 +012B3500FFFF006AFFE60460068C023600480000011600DFFD00000BB602002320120025 +012B3500FFFF00C80000047608010236002F00000117008DFEC00175000BB60100080702 +0325012B3500FFFF00AB0000025108010236004F00000117008DFE8E0175002FB5700270 +030203B8FFC0B3090C3702B8FFC04011090C3701044F049F040201000605020325012B35 +005D11352B2B5D00000200C80000047606140005000900464016070C0B0D370808090102 +030435010800000B0F0B0106B8FFEA40110E1037080C0B1037060608041408016C0A10F6 +32ED2F332F2B2B5D11332F003FED3F3F332F3130012B2901113311210B0123130476FC52 +C602E8C3FA7F9805D1FADF0564FE0701F900000200BB000003540614000300070042400D +010C0B0D370202030601050800B8FFEA40190E1037020C0B103700000F021F0202020204 +1A7F050105880810F65DFD322F5D332F2B2B003F3F33332F3130012B0103231303231133 +0354FA7F98FCBCBC0614FE0701F9F9EC0614000200C80000047605D1000500090036401E +07562F0801080801020304350108062D07070100000B0F0B010414016C0A10F6ED5D1133 +2F12392FED003FED3F12392F5DED3130290111331121032311330476FC52C602E89CE9E9 +05D1FADF0157010B000200BB00000362061400030007002D401A05560606010201010807 +2D6F067006020606001A7F010101880810F65DED332F5DED003F3F12392FED3130212311 +33012311330177BCBC01EBE7E70614FBF4010900FFFF00C8000005380801023600310000 +0117008D00780175000BB601000C0B050925012B3500FFFF00B90000045F068C02360051 +00000116008D0000000BB6010019180E1625012B3500FFFF00C800000538080102360031 +0000011700DF00A20175000BB601000D0A050925012B3500FFFF00B90000045F068C0236 +00510000011600DF1C00000BB601001A170E0225012B3500FFFF0073FFE105DA08010236 +00320000011700DD008C0175000DB703020029260F0325012B353500FFFF006AFFE10471 +068C023600520000011600DDD800000DB70302001D1A060025012B353500FFFF00C80000 +059808010236003500000117008DFFF60175000BB602002221060B25012B3500FFFF00B9 +00000372068C0236005500000117008DFF380000000BB6010015130A1225012B3500FFFF +00C8000005980801023600350000011700DF000A0175000BB602002320060B25012B3500 +FFFF009200000372068C023600550000011700DFFF600000000BB6010016130A0325012B +3500FFFF0086FFE5050208010236003600000117008D00140175000BB6010033321A1F25 +012B3500FFFF006EFFE503D7068C0236005600000116008D9400000BB601003635063225 +012B350000010000FE5904EE05D1001B0048402E0C071C072C073C07040C0C1053080D01 +18351A030216080B0B132A050F1D1F1D4F1D03005B050114185B4F1901192F5DF4FD32E4 +5D2FED332F003F333FFD323FFD322F31305D0121111E011514062322262735331E013332 +3635342627231121352104EEFDEC0309B79225742D091A58326862050332FDEC04EE0521 +FB04144822A2AC0E0CA00A1A4E581E36170521B00001003EFE5902FD059E0030006F4046 +0C080D1A19081E1A2B082F1A3C08070D0D1153090D20251C3E22201F0503171830302C3F +18094F327F32020C0C142A06182306031C008C321D22251A1F1D4F1C7F1C021C883110F6 +5D3232FD322F10E61117392FED332F5D003FFD322F1239393F3333FD322F3FFD322F3130 +5D250E01071E011514062322262735331E01333236353426272322263511233533113311 +211521111416171E01333236373302FD0C1C100204B79225742D091A58326862030214AB +B27F7FBC0184FE7C0818164D4F2E64160A0A030703122C18A2AC0E0CA00A1A4E58172F10 +B7CB02529E0141FEBF9EFE0358632B28251B0900FFFF0000000004EE0801023600370000 +011700DFFFEE0175000BB601000B08060725012B35000002003EFFEA037A0705001B001F +0073404C0B041C042A042A1D2A1E3A1D3A1E4A1D4A1E551C641C691E741C791E0E1F1F1E +0B10073E1E0D0B0A051B1B173F03094F217F21021C1C1E1E100E008C21080D101A0A0800 +4F077F070207882010F65D323232FD322F10F63211392F332F5D003FFD322F3F333333FD +322F2F332F3130015D250E012322263511233533113311211521111416171E0133323637 +331303231302FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A7DFA7F980A0E12B8 +CB02529E0141FEBF9EFE0358632B28251B090652FE1101EFFFFF00B2FFE1052908010236 +00380000011600DB63500079405B02010900210140215021A02103EF102101902101BD00 +210150218021028B10214021702103B021C021F021039021C02102599021C021E0210310 +21602190210331002101E021010F211F214021502180210521020100241E0D1D25012B35 +3500115D71725E71725E5D71725E5D725E5D725E5D715E353500FFFF00B1FFE1045707B1 +023600580000011600DB0000000DB70201001D17091625012B353500FFFF00B2FFE10529 +0801023600380000011700DD00780175000DB7020100241F0D1D25012B353500FFFF00B1 +FFE10481068C023600580000011600DD0A00000DB70201001D18091625012B353500FFFF +007E0000050808010236003D00000117008D00070175000BB601000B0D050625012B3500 +FFFF005D000003E3068C0236005D00000117008DFF680000000BB601000B0D050625012B +3500FFFF007E0000050807500236003D0000011700DA00390175000BB601000B0A050625 +012B3500FFFF005D000003E305DB0236005D0000011600DA9200000BB601000B0A050625 +012B3500000100C80000048A05D10005001F401003013504030000070F07010214036C06 +10F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D100030073 +FFE105DA05F0001700230027006D404F040004060B0C0B1217001706190C191257015705 +53075F0B580D58115F13531710253560260126260976097915021B3415022134090A2726 +27260F18150373290F29010F291F293F29031E150F682810F6ED5D5D10F6ED1239392F2F +003FED3FED5D12392F5DED3130015D011612151402070E01232224272602353412373624 +33321613100023220011100033320003213521051E5B6163595CFBA19DFEFF5A5A61605C +5801059AA0FF47FEFCE1E3FEFD0108DEDE0107ACFD8D0273052664FEDEB8B8FEDD616566 +6863630120B9B6012167626869FD610122013BFEC5FEDEFEDBFEC901370106B300030069 +FFF0062405E1001D002A00370058403624182C321525062B32091509081603082A1E2532 +65006A0F041E150032150F00072B1518250407140F080839381F393F396F399039045D11 +12392FC4ED173910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01 +071523352E01272E01353436373E01373533151E01171E01073426272E0127113E01373E +0101110E01070E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F +4B57CE403B3A8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A +524AD88C88CC4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01 +363737AA6170B63A2D3C0002006CFFE10443047C00130020005740162A032A203C1A301C +38204F1A421C4820580668060A10B8FFC040230B1037120502110518410E0401081E4205 +0A1114021A0092221F223F22021B1B08852110F6ED5D10F6FD3232003FED3F3FED123939 +3F31302B5D2123350E01232202113436373E0133321617353303112E0123220615141633 +32360443BC51B067C8EB514544B56158884BBCBC4C78479EB0889650A475464E01340111 +8EDE4E4C502C2734FCB6027C221FDCCAC7CF47000002006AFFE104730614001900280086 +4029031C0520171526153B0A3A0E3A1C3E214C0A490E4A1C4F2153176B0E7B0E7A207B21 +1136264626021DB8FFE04034121C371D180A11371D171D0C050F133E1001263F030A1111 +001D0C0F1A1B00140F00902A0F2A1F2A3F2A6F2A040F0F231B06852910F6ED332F5D10E4 +113910ED11393911332F003FED3FFD323F33332F2B2B5D31305D01100023220011343637 +3E01372E012735211521151E01171E01073426270E01070E011514163332360473FEEBEE +F1FEEB564045B45C4CB466032AFDCF44DE5D9676C26E6E4291423F55AA9C99A60227FEF0 +FECA012F01068DC5404852113F8748B39E0A2E9C5488FBA487E45608303532AE7FC9D0D3 +0001006DFFE603EE0478003D007C40432612263B363B49014418590154186A016F0B6418 +79017A0B7418792274350F0C2C3F2B2B03161A1A1E3E16043D3D393F0309192B40090C37 +2B241B10100C2B19040900B8FFC0401009143700003F7F3F803F02331B09863E10F6ED5D +11332F2B1217392FED2F2B2F003FED332F3FED332F1112392FED3931305D250E01232226 +272E0135343637352E01353436373E013332161715232E01232206070E01151416171E01 +3B0115232206070E01151416171E01333236373303EE6BCE734FA446455771795B6C5F41 +40A24F62A45A0D42C3642D4E2A233338302D68356F9E3E642A2931342925653866E8470D +40302A2028277F5E6090260718845C5975222120211CCF33380B140F432C3D440F0E03A6 +0911114A3B354A151314483E0002006AFFE1050F047C0011001D004D40163A15351B4A15 +451B040E3F0D05153E09041B3F030A0FB8FFC040190B0D370E0E090C0F0306121B00901F +1F1F6F1F02181B06851E10F6ED5D10F4ED121739332F2B003FED3FED3FED5D3130011000 +232200111000333216172115211E010734262322061514163332360471FEE7E9F1FEEC01 +1AED376A1D01E0FEE03E44C2A49AA1A4A79C98A8022EFEE7FECC013C01110113013B1609 +A549C27FD7D6E0CDD1DAD7000001000A000003EE045D0007003840230301043F06054000 +4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32 +2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A50002 +0068FE6405EA047A001D0024007840163515740F022110090C37213E1A040F0522037717 +0117B8FFF0400F090C37173E0609050C75147A1E0211B8FFC040250D103711112217041A +05050C1E1B3A0001008F260F261F264F266026040F2601141B0C852510F6ED5D5D10F45D +ED12392FED3939332F2B5D003F3FED2B5D39393F3FED2B31305D011000051123112E0127 +2E01353412373315060215141617113E0133200003342623113E0105EAFEA9FEF3BB82DD +51555E7685E58894E1BD214B270130015DC3E0C1CED30240FEFDFEC40FFE72018E065145 +4AC4869F01128A1163FEF6A7BDE60603E80201FED5FEFBB8DBFCB20AE8000002FFFCFE59 +051AFFAE000300070020400F02500101080650050D0400000905022F3311332F33003FED +12392FED31300521352111213521051AFAE2051EFAE2051ECA78FEAB7800FFFF01230000 +03DC05D10036000400000117000401D90000001E40140302200D5F0D6F0D030D01000005 +10057F0503052F5D35352F5D35350001009A022A03C605F00016004DB90014FFE0B3090C +3715B8FFE0B3090C3713B8FFF84017171B370110130D0D085313020E03012A000018100B +2A0DB8FFC0B3090A370D2F2BFD3211332FED003F3FED332F1239332B31302B012B012311 +3426272E012322060711231133153E013332161503C6AC0E15164D40418D41ABAB4BA254 +9AA6022A0215466A2424234332FD4503AB683E45B9AB000200C8FFE508CA05D1004E005D +00E240210B18044D19012E18204D55316A186631654D791375487952735A0D05200E1037 +3DB8FFE040310E103711001A46043B033F400B0D373F3F433E3B4F3501353B351E37213E +34243134032C573450290129292B56342C0307B8FFC0403C0B0D3707070E3E0309202B3A +4F4A4F0237341F1A20201A330606461A381D3E1A3E1A3E111A00005F0F5F014F13225F33 +7F33023333572A13702B012B2F5DFD32332F5D39ED5D11332FED33332F2F123939ED332F +1112392FED39395D002F2F3FED332F2B3FED12392F5DED1217392FED393933332F5D2FED +332F2B1112173931302B2B5D0114062322262735331E01171E01333236353426272E0127 +2E013534363723112311230E01070E012B01112311333216171E011733353315213E0133 +32161715232E01232206151416171E01171E01013426272E012B0111333236373E0108CA +E2BE6ABA3D0917472D356145667943552A62377E6E0F12DDB57C0C3B2F4DCCA030BCF486 +B44847580A78B5017F24733155B53E0940B15B59723B562E642E7284FA5E36372F83572E +1178962F2F2701429BC23C22D31331161A1E4C5A4844160B131026956E254426FC4E03B2 +45792F4D4DFDD505D12D302F9364DCDC12183024C935494E4F4648170C180C1E8E024F4D +75241F1DFDA32D2F306DFFFF0089FFEB063E05D10036002C00000117002D035400000005 +B20F23015D00FFFF00AFFE59043D05DB0036004C00000117004D02280000001840115023 +60237F23030302500C600C7F0C030C2F5D35355D000200000000052706140016001A0065 +B90017FFE8403F0D10371818090C3719180910370315161575150318181701100D084213 +040E05010D08171740190119100B1A19300D500D700DAF0DCF0D050D0D021A00911C10F6 +ED332F5D33FD322F5D332F003F3C3F3FED12393F332F31305D012B2B2B2123113426272E +012322060711231133153E0133321615090123130527BC1218195E4B4DA84DBCBC58BC63 +B5BEFC72FEF18AA5027C4D87262A294C3BFCBE045D7C4952DACD033FFDD1022F000100D5 +0366028705D100030027B90000FFE840140D10370118090C3702180910370101030300B1 +022FED003F332F3130012B2B2B090123130287FED688C205D1FD95026B00000200D50366 +041805D1000300070050B90004FFE8400E0D10370518090C37061809103700B8FFE84020 +0D10370118090C37021809103746000101050503070304B13F0601060600B1022FED332F +5DED003F3C332F3C3130015D2B2B2B2B2B2B09012313210123130287FED688C20281FED6 +88C205D1FD95026BFD95026B00040095FFE3080705ED001B001F002B003700CA400C471D +481F561D591F681E050BB8FFE040160E103701200E10371F1D1C071D171D021D291E1E1F +29B8FFF44012090B37230C090B374F0D401B7A2F75350417B8FFE8404A0E103711180E10 +371F031B1B17512F034F0302030D030D115109022F51202940290229293551230A1E0840 +1E011C1E322A00260126262C2A1C1E062020390F39010D2000010000142A062FED332F5D +335D11332F123939ED332F5DED2F2F5D003F3FED332F5DED3FED33332F2F5DED332F3F2B +2B5D2B2B3130018710ED5D87C0002B2B015D010E012322263534363332161715232E0123 +220615141633323637330901230901140623222635343633321607342623220615141633 +3236032D1E934EC0D9DDBC417F3F0E3C73396D7F7B71497A250E02F5FCF4A5030C028ABE +B2B5BABDB2B6BAB2596466585866645902BE1232E6D2C9F22121AD3233959C9698422302 +68FA2F05D1FBCCE0DADCDDE0DADADFAC8888ADAD87870002000FFFE8028605D3001B002B +006E400D531D621D701C0316180B113705B8FFF040310B0F37001A010B1C051B1B051612 +120F5216092550050347080112121F2908401114372F0801081C1B001A0008030B2A01B8 +FFC0B3101437012F2BED17332F33322F5D2BED332F5D003FED3FED332F1112392F17392B +2B31305D13371134363332161514020711141633323637150E012322263D0107133E0135 +3426272E01232206070E01150FB17B6F607C78A51D1B1A44693771395C6B4FF8622F0D0D +0A190F0F19060B0C01A6EB01C7E299826D5CFEF7E6FE61592B214AA22C2B727FE162022B +A980371E30110C0D0C0E156E5800000200920000044203B0000300070025401507CB0101 +05CB0307CB010105CB00031003300303032F5DED332FED002FED332FED31301321112113 +1121119203B0FC504C031803B0FC500364FCE80318000001008301BD0252038C00030017 +400B02020300000002300202022F5D332F002F332F3130011121110252FE31038CFE3101 +CF000002008301BD0252038C000300070023401306CB020205CB0304CB000006CB000230 +0202022F5DED332FED002FED332FED313001112111052111210252FE310183FEC9013703 +8CFE3101CF4CFEC9000100B10088042203F9000B0021401409090F032F034F0303030606 +00009000A00003002F5D332F002F5D332F3130133400333200151400232200B10102B7B6 +0102FEFEB6B7FEFE0240B70102FEFEB7B6FEFE0102000002007001AA026603A0000B0017 +0065400B06102326370610171A3700B8FFF0B323263700B8FFF04015171A3712CB06060C +CB000910171A3709100B0E3703B8FFF0B3171A3703B8FFF040130B0E3715CB03030FCB00 +0920093009600904092F5DED332FED2B2B2B2B002FED332FED2B2B2B2B31300132161514 +06232226353436172206151416333236353426016B689393686893926949666748486766 +03A093686893936868934C674849666649486700FFFF001A0000055E073C023600240000 +011700D80031016B000AB602000C0B0607252B35FFFF0068FFE1041D05D1023600440000 +011600D8D900000AB6020036371D26252B35FFFF0073FFE5054608010236002600000117 +00D600A90175000AB601002F2B0F15252B35FFFF0069FFE703F3068C0236004600000116 +00D6F4000011400C014026502602002622060F252B5D3500FFFF0073FFE5054607500236 +00260000011700DA00A80175000AB601002C2B0F15252B35FFFF0069FFE703F305DB0236 +00460000011600DAF5000011400C012024302402002425060F252B5D3500FFFF00C80000 +049D073C023600280000011700D80033016B000AB601000E0F0203252B35FFFF006AFFE6 +046005D1023600480000011600D8F700000AB6020022231200252B35FFFF00C80000049D +0801023600280000011700D900400175000AB60100120C0203252B35FFFF006AFFE60460 +068C023600480000011600D9FE00000F400A027026010026201515252B5D3500FFFF00C8 +0000049D0750023600280000011700DA004F0175000AB601000E0F0203252B35FFFF006A +FFE6046005DB023600480000011600DA0000000AB6020022231218252B35FFFF0073FFE3 +05A208010236002A0000011700D600D00175000AB601002925070F252B35FFFF006CFE59 +0443068C0236004A0000011600D6FB000011400C0230354035020035311A23252B5D3500 +FFFF0073FFE305A207500236002A0000011700DA00CE0175000AB601002728070F252B35 +FFFF006CFE59044305DB0236004A0000011600DAF5000011400C0250336033020033341A +23252B5D350000010073FE5905A205EC0038009540200906060E07261D06130E210E350E +4901410E510E6506650B630E740E741C0F2CB8FFE04043090C37323236532E0D28032235 +40230123230C03101017340C021D34030A3131002A0F2B1F2B022B760901221022042B27 +040910216C25753A0F3A403A021A1509683910F4ED5D10F4ED331217392F2F5D2F5DED33 +2F003FED3FED332F1112392F5DED12393FFD322F3130012B5D0534262722242726023510 +002132041715232E01272E012322001110002132363711213521110E01071E0115140623 +22262735331E0133323603820302ADFEE066677001A1016C7F010999121F763945AF6FFA +FEDD0130010660BF48FE7102535AD45E0103B79225742D091A583268626B152B0F5F6061 +0123C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAEFD8129460F0E2516 +A2AC0E0CA00A1A4E0003006CFE590443068C002300300034009F406F243234320233200D +10373D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C057020 +112F343F344F3403343433331E220512211528401E0407070B40030D2E41150731315033 +603302333300180F0601062124121A0006180092361F363F36022B1B18853510F6ED5D10 +E4113910FD32322F5D1112392F5D332F003FED3FED332F3FED1239393F11332F332F5D31 +305D012B5D2510002122262735331E01333236373E013D010E01232202113436373E0133 +321617373303112E01232206151416333236130323010443FEFEFEF459A9520A2EC86460 +7E23231E559B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A534B3F301117FFE +E4FEF61917C012352E29276E446644430121010790D14C474F272830FCD60261221DD0C6 +BCC23F058EFE8A017600FFFF00C80000053B08010236002B0000011700D600760175000A +B60100100C060B252B35FFFF00B90000045F08010236004B0000011700D600220175001A +4012014F1B6F1B9F1B031B112601001B170808252B35002B5D3500020020000005E305D1 +001300170060403D0E1201160408520B400C0F370B0B0C05350017101702170B10170304 +070C03070000120F150303140278190F19401950190309090B0E16030614076C1810F6ED +1739332F5D10F6ED1739332F002F3F1217392F71ED12392F2BED17393130012311231121 +11231123353335331521353315330135211505E3A8C6FD19C6A8A8C602E7C6A8FE92FD19 +0455FBAB02D9FD2704558CF0F0F0F0FEA8CCCC00000100130000045F0614001E00504030 +031D161D751D0317140E51111112180D08421B041201010D08150F021A0091201F206020 +02141517030B1A110F0D881F10F63232FD17325D10F6ED2F2F003F3C3F3FED123912392F +ED393931305D2123113426272E0123220607112311233533353315211521113E01333216 +15045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC63B5BE027C4D87262A294C3BFCBE +04F4869A9A86FEED4952DACD0002002C0000033307C8000B0025006DB9001BFFD040400B +10370E300B10370C0C15520F1C1F1C021C191C192252700F010F0F09043206030A033201 +0825280F0C1F0C020C1828190C276D080B5A0A1405025A19036D2610F432ED32FDED32E4 +332FED2F5DED003FED323FED32332F5DED33332F2F5DED332F31302B2B29013533112335 +2115231133130E01232226272E0123220607233E01333216171E013332363702D5FDB4C3 +C3024CC3C35E077D663453262D3C20302D0288037E683351282A431D2E31019804A19898 +FB5F0730989724262B2A5B4B88A6242528295B470002FFF200000241063C0003001D0054 +40347C0673130204040DAA1440090C37141114111AAA0707020501081DAD0440090F3704 +10AD117F1F011F9204001A117F010101881E10F65D32FD32ED5D2FED2F2BED003F3F332F +ED33332F2F2BED332F31305D21231133131406232226272E012322061523343633321617 +1E01333236350177BCBCCA6750283A1E202D17232170684E2F3220212C162421045D01DF +81821A202322454181821B1F2322483E0002005F000002FF073C000B000F004D40150E32 +0D0D09043206030A033201082F0F3F0F020F0EB8FFC040150B0D370E0F116D0A080B5A0A +140305025A0E036D1010F632F43210FDF43210E6332F2B2F5D003FFD323FFD32332FED31 +302901353311233521152311331321352102D5FDB4C3C3024CC3C32AFD6002A09804A198 +98FB5F060A9A0002FFFC0000023605D1000300070032401D025301010605057F00700202 +00027F0901099200041A027F050105880810F65D32FD32E65D2F2F5D002F3F332FED3130 +01213521032311330236FDC6023ABFBCBC05379AFA2F045D00020080000002DF07D3000B +00190059401F0C701201121216AA0F0F09043206030A0332010819290C400B0E370C1329 +12B8FFC040130B0F37120C1B6D080B5A0A1405025A12036D1A10F432ED32FDED32E4332F +2BED2F2BED003FED323FED32332FED332F5D333130290135331123352115231133131406 +232226353314163332363502D5FDB4C3C3024CC3C30A939C99979E454D49489804A19898 +FB5F073BA8CFCFA886726E8A00020001000002300668000D0011004840150006060A5003 +0310050F0D2900400B103700072906B8FFC040130B1037067F13011392000E1A067F0F01 +0F881210F65D32FD32E65D2F2BED2F2BED002F3F332FED332F3331300114062322263533 +1416333236350323113302308B8C8A8E924145414427BCBC06689AC0BE9C7A6B6283F998 +045D00010089FE5F031C05D10020004F402D1C20090C3709043206030A03320C01081717 +13531B0D1818102A1E1E0B02226D0A080B5A0A140305025A036D2110F4F43210FDF43210 +E61112392FED332F003FFD322F3F33FD323FFD3231302B21233533112335211523113315 +230E011514163332363733150E012322263534360174EBC3C3024CC3C3C2060942582141 +1309245122879A099804A19898FB5F981C29265150130B9E0A0BA08C22350002008EFE5F +024605DB0003001B0056401C0820090C371B1753070D014402400B0D3702030E050D1104 +04142A0AB8FFC040170B17370A0A0E7F1D011D9200600F1A01607F0E010E881C10F65DE4 +FDE4E65D11332F2BED332F002F333F3F2BED3FFD3231302B01233533130E012322263534 +3637113311230E0115141633323637330183D4D4C3245122859C2508BC3C060742582141 +13090518C3F8990A0B9E8E3F6F19040BFBA31A361B5150130B00FFFF002CFFEB034D0801 +0236002D0000011700D6FF6C01750014B1011AB8FFC040090B0E37001A160415252B2B35 +0002FFC2FE5902AF068C0015001C005540340A011C0102551B651B751B0318161A1B1B1A +1A123E150507070B40030D1A1A4F1301137F06010616121A1306160370150115921E10F4 +5D1732ED2F2F5D2F5D332F003FFD322F3FED332F332F1239395D31305D05140623222627 +35331E01333236373E01351123352137230B012313330209C8A828832C0A1C5F2D485816 +160DE901A5A69FB9B89BE4E31BC4C8100CB30B1C282828715103849EB40100FF00017B00 +FFFF00CDFE59057505D10236002E0000011600DCFB00000AB601001A0C0500252B35FFFF +00C1FE5904AF06140236004E0000011700DCFF7C00000011400C01301A401A02001A0C05 +0A252B5D3500000100C1000004AF045D000B007D40512802D801DB090309010F0D1F011D +021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A0802 +050A0507050105080B02600A700A020A0A00000D200D400D0208031A05890C10F4FD325D +11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0015D +7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B045DFDD102 +2FFDFC00000100C8FE59047605D1001A003F40240C20090C37111115530D0D0203043507 +01081010182A0A0A0105051C0F1C010414016C1B10F4ED5D11332F12392FED332F003F3C +ED3F3FFD322F31302B29011133112115211E011514062322262735331E01333236353426 +02BFFE09C602E8FEE30204B79225742D091A583268620605D1FADFB0122F18A2AC0E0CA0 +0A1A4E581E3E00010005FE5901E906140018003D40240A20090C370F0F13530B0D020104 +01080E0E082A1616017F1A011A92041A7F010101881910F45DFDE45D12392FFD322F003F +2F3F3FFD322F31302B2123113311331E011514062322262735331E013332363534260149 +8EBC6C0105AE8525642809184E285E52010614FA00123724A2AC0C0CA00B174F57153300 +FFFF00C8FE59053805D1023600310000011600DCFE000013400E01201630164016030016 +0A0400252B5D3500FFFF00B9FE59045F047C023600510000011600DC8B000013400E0100 +2310232023030023170D00252B5D3500000100C8FE59053805D10016009D401F00076107 +7107A107040C070B0C1B0736074607540765077507B001B0070A07B8FFC040510B113776 +06010F0102061F01150626013601340646014406560153066006790170060E0406015A01 +550602111115530D0D0207040806030A0104080110100A06010207130A78180F18401802 +0213046C1710F4ED5D10F4FD11393911332F2F003F33333F3C1239393FFD322F31300172 +715D5D002B5D71043501112311210111331114062322262735331E0133320480FD01B901 +330284B9CEB42751250B163A1E7F948A053EFACC05D1FBA00460FA18BFD10806A8050A00 +000100B9FE59045F047C00260045402B03150C191615751504100D084213040E050D081E +1E22531A0D1D1D021A1791281F28602802100B1A0D882710F4FD325D10F6ED332F003FFD +322F3F3F3FED123931305D0435113426272E012322060711231133153E01333216151114 +062322262735331E01333236373603A31218195E4B4DA84DBCBC58BC63B5BECCB4274E26 +0B163C1A4C6117162556024B4D87262A294C3BFCBE045D7C4952DACDFD0FBFCC0706A805 +0A262626FFFF0073FFE105DA0746023600320000011700D8009B0175000AB6020026270F +03252B35FFFF006AFFE1047105D1023600520000011600D8E300000AB602001A1B060025 +2B35FFFF0073FFE105DA0801023600320000011700D9009C0175000AB602002A240F0325 +2B35FFFF006AFFE10471068C023600520000011600D9E400000AB602001E180600252B35 +FFFF00C8FE59059805D1023600350000011600DCF600000AB602002420050D252B350001 +001BFE590372045D002700574034000D100D200D032120090C370C090F131317430A0F05 +1C090826260253220D25251F2A05050913132940297029020C1B1A09882810F4FD325D11 +332F11392FFD322F003FFD322F3F2F3F3CFD322F11123931302B5D1E0133323635342627 +231133153E013332161715232E012322060711331E011514062322262735333C4E285E52 +0102A6BC70AB59312C2C0A2A4F3657A24B840105AE8525642809FA174F57153323045DA5 +5A4B0507C10A094D3DFCFB123724A2AC0C0CA000FFFF0086FFE505020801023600360000 +011700D6004A0175000AB6010035311A00252B35FFFF006EFFE503D7068C023600560000 +011600D6AF00000F400A017F38010038341A00252B5D350000010000000004EE05D1000F +004140250D0A003203030F09043506030F0F111F114F11030B020B085B090D0009140204 +5B4F0501052F5DF432ED393910E4332F2F5D002F3FFD3212392FED393931300121352111 +21352115211121152111230214FEB4014CFDEC04EEFDEC014CFEB4C602E48F01AEB0B0FE +528FFD1C0001003EFFEA02FD059E0023006E40210420090D37181507510A0A0E030F140B +3E110F0E0523231F3F03094F257F250216B8FFC0401E090B3716160713008C250909070C +0A0E111504181A0C07400D103707882410F62B32ED17392F12392F10F63211392F2B5D00 +3FFD322F3F3333FD322F1112392FED393931302B250E012322263D012335331123353311 +331121152111211521151416171E01333236373302FD357D31ABB27F7F7F7FBC0184FE7C +012DFED30818164D4F2E64160A0A0E12B8CBA88601249E0141FEBF9EFEDC865358632B28 +251B0900FFFF00B2FFE1052907C8023600380000011700D700610175000AB601002B1E0D +1D252B35FFFF00B1FFE104570653023600580000011600D70600000AB601002417091625 +2B35FFFF00B2FFE105290746023600380000011700D800630175000AB6010020210D1D25 +2B35FFFF00B1FFE1045705D1023600580000011600D80100000AB60100191A0916252B35 +FFFF00B2FFE105290801023600380000011700D900630175000AB60100241E0D1D252B35 +FFFF00B1FFE10457068C023600580000011600D90100000AB601001D170916252B350001 +00B2FE5F052905D1003400634044231223183D093D2139224C094C214B22771377170A33 +20090C372E2E2A53320D1C24060D031534060A2F2F272A00060023030C1B141E76360F36 +1F364036030F140C6B3510F4ED5D10F6ED1217392FED332F003FED3F1239393FFD322F31 +302B5D053436372206232226272E01351133111416171E01333236373E01351133111406 +070E01070E011514163332363733150E012322260314050509190F8CD0475147C621272C +976A6B962D2721C647512D683D0405535A24511108344B2A8CA8741A271601494852E8A9 +037BFC7B798C394142414239936D038AFC85A2F1502C3B10143C17524E1B089F0E0C9F00 +000100B1FE5F0567045D002A005C40220B0619077A07032720090C370205150905114205 +0A010822221E53260D23231B2A29B8FFC04015091037292914021A17922C1F2C602C020B +1A08872B10F4ED5D10F4FD32322F2BED332F003FFD322F3F3FED3F3C123931302B5D0437 +350E01232226351133111416171E0133323637113311230E011514163332363733150E01 +23222635340395065FAE69B0C4BC101A1B565249AD4BBC1E0607535A24511108344B2A8C +A81D1D7C4B50D7D002D5FD8455792B2C284C3B0342FBA31B351B524E1B089F0E0CA08D24 +FFFF005C0000078D08010236003A0000011700D601690175000AB60100110D0600252B35 +FFFF005600000636068C0236005A0000011700D600BB0000000AB60100110D0600252B35 +FFFF0006000004E608010236003C0000011700D6FFEE0175000AB601000D090500252B35 +FFFF003DFE64047F068C0236005C0000011600D6DD00000AB601000C080400252B350001 +00B900000308061E0010002440140000043F0D0009080000081A6F097F090209891110F6 +5DED332F003F3FFD322F313001232E012322061511231134363332161703080A1F642679 +67BCC2BF3F652A055E09136B8CFB7D0482C2DA0C08000004001A0000055E08000012001E +00210025013F40862B20372040205A18551A501E55206918651A651E0A180B170D4A0646 +125906561278027703082020211F02370187010201140012002021033704870402041405 +05060606091226062912370638124606491258127A0675120B24240C702501251651A00C +F00C02060C160C3F0CF00C040C03340F2170210221212006120405201C401C020C1CB8FF +C0406C393937501C701C021C01050824400E10370F242F240222222440090D372413290F +0F2F0F4F0F8F0F9F0F050F19290009200940098009900905090F270106090F122405050C +0024003A0042005A006A0074000700006E270F27010A052B0535054D05550565057B0507 +05642610E65D5D10E62F5D1217395D2F5DED2F5DED2F2B332F5D2B003F3C2F5D2B335D12 +17392F5DED2F5D72ED2F5D12392F3130015D8710FD5DC0C0C08710FD5DC0C008C0015D00 +5D212303210323012E013534363332161514060727342623220615141633323613090207 +2337055ED394FD8094C901F83139A17373A039302A47393948493838487DFEFEFEFD021D +F39595019FFE6105571F65406D90906D40651FC4364B4A37394B4CFC6602CBFD3505B7CD +CD0000040068FFE1041D07330032003F004B004F00D6B50C0A190A0230B8FFC040880B0E +37590E51215C38690E63216F397B0A7A1474207B380A0208343D3011401102111149084F +4F4E4E43AA062916299F290329400B0D37292F0123494F1F011F291F184149043D41080A +01084E400D10374C4C4E40090C374E4E2640292F2C3F2C022C2C26297F468F4602464600 +0F1F011F1134021A001F0B0091510F511F513F51033A1B0B855010F6ED5D10E6113910FD +32322F5D12392F5DED332F5DED12392F2B332F2B003F3FED3FED33332F5D123911392F2B +5DED332F332F1112392F5DED123931305D012B5D2123350E01070E012322263534363736 +2437353426272E01232206070E010723353E01372E01353436333216151406071E011503 +110E01070E0115141633323603342623220615141633323613032313041DBB1955282F7A +5297D26D6566011EA42E29296D3F3A692A3150130A2369311C259F73739E2E237D87BB56 +E9445164747763A443473939484938384895F3959577113D12171FC89B7F9D2D2D20081D +4156171811140B0D1D07BF0914081E532E6D90906D335B1F22AA9AFE1D01370514131761 +5560614D042C364B4A37394C4D0262FEEE011200FFFF000E0000076D0801023600900000 +0117008D01DE01750011400C020F164F16020016140607252B5D3500FFFF0068FFE3073F +068C023600A000000117008D01690000000AB6030055541B00252B35FFFF0073FF6E05DA +08010236009100000117008D007801750013400E03303A403A603A03003A3B0F00252B5D +3500FFFF005DFF6C0471068C023600A100000116008DE2000011400C03302E402E02002E +2F0C00252B5D35000001015A03400249045D00030014400A01560205032D000201022F5D +ED003FED3130012311330249EFEF0340011DFFFF005C0000078D08010236003A00000117 +004301730175000AB60100100D0600252B35FFFF005600000636068C0236005A00000117 +004300C30000000AB60100100D0600252B35FFFF005C0000078D08010236003A00000117 +008D01690175000AB601000F100600252B35FFFF005600000636068C0236005A00000117 +008D00BF0000000AB601000F100600252B35FFFF005C0000078D07500236003A00000117 +008E016C01750020B10213B8FFC040120D10370F13010100135F13020013100600252B5D +355D2B35FFFF00560000063605DB0236005A00000117008E00BF0000001EB10213B8FFC0 +40100D10370F1301010013010013100600252B5D355D2B35FFFF0006000004E608010236 +003C000001170043000A01750014B1010AB8FFC040090D1037000A0A0500252B2B35FFFF +003DFE64047F068C0236005C000001160043FF000015401001200B300B600B700B04000B +090400252B5D35000001FFED03E40186061300030032B90003FFE4B70D10370101030100 +B8FFAEB30D103700B8FFE840090A0C3700007F0201022F5D332F2B2B003F332F3130012B +010323010186A5F4010F0613FDD1022F0001FFD00685051606FD00030011B60150020000 +05022F11332F002FED3130012135210516FABA0546068578000100890000048B05EE0028 +00934063411253125B1A6312730273129024B603B6240923200551000810082008030808 +1F1C09510F0C1F0C3F0C4F0C040C141418490C01100202284A01080F2A1F2A022327021C +1F20050C08215F1D6F1D7F1D031D0A061306081D13040220004000020000022F332F5D12 +17392F2F332F5D332F3333FD321139395D003FFD323F1239ED332F2F5DED3939332F5DED +393931305D2901353E0137233533352335333534123332161715232E012322061D012115 +21152115210E01071521048BFBFE67620E9DA4A4A3FDCD6998400A3E98568C8B016CFE93 +016DFE8F0F705A0345CF1B817B868C86A7C801012211CE2A30A59094868C86659F2C0B00 +000200B1FFE60511053200180022005F4013380D391C491C580D6A217A21060C100B0D37 +07B8FFF0402A090A37191F290F2615690F790F05013222220F1F32150B0B07330F090C0C +1913260001000024220114122FFD3211332F5DED332F003FED332F2FED12392FED5D2B2B +31305D01211416171E013332363733150E0123200011100021320011272E01272E012322 +06070511FC66423C3AA3607AEA590D82C07FFEC9FEAD01420113FF010CBE02262928875A +9FD50D027884B53E3C3B5648D53637015B0141013A0176FECDFEE92A549133333AD4B100 +FFFF00ABFFE1078305D50036023B9200003700BB023700000117024103F2FDC60016400C +040302100A010B400B7F0B025D1135003F353535FFFF008CFFE107A405ED0036023DA600 +003700BB02910000011702410413FDC600384026040302360A0403023900392039403980 +39FF3905013100315B317B3103000900093F094F09035D11355D11355D11353535003F35 +3535FFFF008AFFE107A405DA0036023FA400003700BB02910000011702410413FDC60038 +4026040302320A040302350035203540358035FF3505012D002D5B2D7B2D03000900093F +094F09035D11355D11355D11353535003F353535FFFF0099FFE1076F05DA00360240A600 +003700BB023100000117024103DEFDC6003640240403020E0A040302116F118011FF1103 +01092B093B0944095B097F0905000400043F04025D11355D11355D11353535003F353535 +00010061FE5901FA00880003002CB90002FFE840170D10370318090C3700180910370F01 +010101000D0202002F332F003F332F5D3130012B2B2B1B01330161A5F4FEF1FE59022FFD +D10000010161FE59037000140014002440150B021B012B013901041207070B53030D0E2A +0000062F332FED003FFD322F2F31305D0514062322262735331E0133323635342627331E +010370B79225742D091A58326862060399020659A2AC0E0CA00A1A4E581D491913340001 +0212050C0305068C000300144009030302002D100301032F5DED002F332F313001032303 +0305319131068CFE8001800000030100050C0418068C00030007000B003F401506050AAF +090902000002072B0640090A37060A2B0BB8FFC0400C090B370B06002D0B100301032F5D +33FD322F2BED2F2BED002F332F12392FED3939313001032303012335330523353302FD31 +803101FDBFBFFDA7BFBF068CFE800180FE8CC3C3C300FFFF00070000055E05D102360024 +00000117019DFDF5FF450012400A020E03020E1F0E4F0E025D1135003F35FFFF00000000 +059005D10037002800F300000117019DFDEEFF4500204014010F030F111011401103011F +0C010C00400101012F5D352F5D355D003F35FFFF00000000062E05D10037002B00F30000 +0117019DFDEEFF4500204014010F030F112011401103011F0C010C00400501052F5D352F +5D355D003F35FFFF0000000003C805D10037002C00F300000117019DFDEEFF4500244018 +010F03011F0C010C00400201020F111F11401150116011055D2F5D352F5D35003F35FFFF +0000FFE1069905F00037003200BF00000117019DFDEEFF45002240150227030F29010227 +1F270101000F000F100F700F035D1135355D11355D003F35FFFF00000000060105D10037 +003C011B00000117019DFDEEFF45002440180109030F0E1F0E2F0E03011F090109001F04 +4004700403042F5D352F5D355D003F35FFFF0000000006D705F0003701BB00B700000117 +019DFDEEFF45002A401E012B03011F2B012B00001C101C201C031C0F2D202D502D602D70 +2D8F2D065D2F5D35115D35003F350004FFCB00000267068C00030007000B000F005C401D +0A090FAF0C0C06070706060205010B2A0A40090F370A0A0404000E2A0FB8FFC04015090F +370F0F0707017F11011192001A7F010101881010F65DFDED5D11332F332F2BED11332F33 +2F2BED002F3F332F332F12392FED39393130212311331303230301233533052335330177 +BCBC0438543801B0ABABFE0FABAB045D022FFE800180FE8CC3C3C300FFFF001A0000055E +05D1021600240000FFFF00C80000052B05D10216002500000002001A0000058605D10003 +00060058403C49056A050205041A000003061A01010215001A0125002A0145004A014B02 +4403590256036B0264037B0275030E020305030000080105010203065401002FED3F1239 +012F11332F17395D31308710FD8710FD04C0005D2901012109020586FA94023201080127 +FE50FE5105D1FAD7047BFB85FFFF00C80000049D05D1021600280000FFFF007E00000508 +05D10216003D0000FFFF00C80000053B05D10216002B0000FFFF0089000002D505D10216 +002C0000FFFF00CD0000057505D10216002E00000001001A0000056205D10006006C404E +0902390258020378017703020203020114000600020314040405490546067C0573060405 +030405002400390042005A006A007400070000080F08010F08010A042B0436044D045504 +65047B0407042F5D5D5D11332F5D002F3F3130015D8710FDC08710FD08C0015D005D2123 +09012301330562D5FE2CFE2CCB022CF00505FAFB05D1FFFF00C8000005F605D102160030 +0000FFFF00C80000053805D102160031000000030072000004BF05D100030007000B0047 +40130535060609013502030A350908054009133704B8FFC0401609133704050504030204 +0908720D0F0D1F0D0209680C10E65D10E41117392F2F2B2B003FED3FED12392FED313001 +213521032135211321352104BFFBB3044D34FC1B03E534FBB3044D0521B0FD08B0FC77B0 +FFFF0073FFE105DA05F0021600320000000100C80000053B05D100070027401703350603 +010501140078090F0940095009030414056C0810F6ED5D10F6ED002F333FED3130212311 +2111231121053BC6FD19C604730521FADF05D100FFFF00C80000049605D1021600330000 +000100760000050005D1000C00EB404709040908450B540B6409640A660B9309930A960B +A409A30AA70B0D0608060B1608160B28032708340A340B430A430B5903550B670B760B8B +0399049908B804B808EB04EB08150BB8FFC0B32529370AB8FFC0B325293709B8FFC0B325 +293708B8FFC04030262937030203080908B3040304030B0A0BB302030264048D02020403 +0203080B3501083505030403A009B009D0090309B8FFC04023191E371009200960097209 +D009E00906090703040B0908070602000010000200000E022F11332F5D1217392F2F5D2B +71332F003FED2FED11173931305D011087ED87C01087ED8708C0012B2B2B2B5D71290135 +090135211521011501210500FB76026CFDA80448FCC0024AFD8A039AB80258020EB3B0FE +061AFDA3FFFF0000000004EE05D1021600370000FFFF0006000004E605D10216003C0000 +FFFF00440000053805D10216003B0000000100B30000064405D10023006240402515251E +021B067518011834380948096F090309192209030810030822142311141023071B180714 +108008A008B0080320255025702503080825240F253F25025D1112392F5D5DC4ED393910 +C42FED2FED002F3F1217392F5DED5D393931305D011406070E01071123112E01272E0135 +1133111416171E01171133113E01373E013511330644514D50E197C59AE24B4E51C63B34 +359A62C5619C353836C6038E9DD74345460AFEBE01420B484245D69C0243FDA66D8E2C2D +2F0703E4FC1C082D2E318571025A0001006C0000062005F00027007D40125B195B256C1A +641D64216C24791A79240821B8FFC0B3090B371DB8FFC0403B090B373002301440024014 +041925140204160B341F02261835011608251202191214081502141C272222290F29010F +291F299029A029040E15171C2FC4ED5D5D11332FC4123939ED2FED2FED003F3CFD3C3FED +1217395D31302B2B5D2901113E01373E01353426232206151416171E0117112135213526 +023510002120001114020715210620FDC03C772C2D34FEDCDCFE342D2D763CFDC0019A9D +CB0177013101310177CB9D019A01832658393B9F6ACEF9F9CE6A9F3B395826FE7DAE7C5A +0138C20114015EFEA2FEECC2FEC85A7CFFFF007E000002E207500236002C00000117008E +FF240175001940130200104010501060107010050100100D0409252B355D3500FFFF0006 +000004E607500236003C00000117008EFFED01750019401302000E400E500E600E700E05 +01000E090500252B355D3500FFFF006CFFE10443068C0236012E00000116019DE200000A +B6020024210800252B35FFFF006DFFE603EE068C0236013000000116019DCC000013400E +014041504170410300413E1219252B5D3500FFFF00B9FE64045F068C023601C600000116 +019D1D00000AB601001A170E16252B35FFFF00A000000193068C023600D500000117019D +FE8E0000000BB601000704020325012B3500FFFF00B1FFE2045C068C023601D100000116 +019EFB00000F400903020100221F0717252B35353500000200B9FE64048D061400180037 +0077404F16200D1037070F4A1B4326433756267929062E200D0F3733200D103705200D10 +371615203E5F21012121032B3E0C0135400309080C15120F200120281B12122008191B00 +90391F390132071A08883810F6FD325D10F6ED1239392FED2F5D1239003F3FED3FED1239 +2F5DED393931302B2B2B5D012B011400232226271123113436333216171E011514060715 +1E01073426272E012B0135333236373E01353426232206070E0115111E01333236048DFE +F3CD4FB03FBCFDDF5A953B39448B7F9FBCC2453A3B924924244282272E2D8A6D49682120 +1E42964895A101BCCAFEF82C2AFE2405D2E0FE2B2E2B8A5B7FBD25111AC797596F1F2016 +A01D1E2262557074352C2C753EFCA2261F9D0001003DFE64047F045D0008006940497507 +01070607081A00010007061A04050505030C0A001A002A004A0059006900750007000505 +15052505450556056605730507050001011A059004A0040204040A091F0A4F0A5F0A035D +1112392F5DC4ED10C42F5D2F5D003F3F31300187FDC08710FD08C0005D09011123110133 +0901047FFE37BCFE43CC0157015A045DFBDBFE2C01D40425FCC4033C0001006CFE6403D6 +0614002F0058401D4600570065287F1178207D21061D1A3E1B012D3F0F070C1A1A19121C +07B8FFE04018090C37000701071C070BB40303310F313F3102231B12853010F6ED5D1133 +2FED33332F5D2B2F1239392F003F2FED3FED3931305D251E011514060723353E01353426 +2B012226353412373E013735213521150E01070602151416171E01171E013B013216039A +201C5A43B35A4C3D2F91E5DE5C4E4BC56CFE3402E875E55A5972060C0A31272479385647 +664B285B2854A93F0E4F7745394CE8E58C01007770CD5E099E874ECE7875FEE88F224828 +264B18160534000100B9FE64045F047C00160038402303151615731503100D084213040E +05010C0D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3F3F3FED12 +3931305D0123113426272E012322060711231133153E0133321615045FBC1218195E4B4D +A84DBCBC58BC63B5BEFE6404184D87262A294C3BFCBE045D7C4952DACD0000030089FFE1 +04750614001700240031006CB9002FFFD6B30A0D3729B8FFD640400A0D37212A0B0D371B +2A0B0D37662C01263E0F241F24022424061E3E3A124A120212012C3E3506450602060A25 +181A0000331F333F330224261A800C900C020C2F5DFD325D11332FFD32003F5DED3F5DED +12392F5DED5D31302B2B2B2B011406070E01232226272E01353412373E01333216171612 +072E01272E01232206070E010705211416171E01333236373E0104752E243AD29898D23A +252D2D2639D39797D339252EBD043120296C4F4F6C29222F040272FD8E2E2428704F4F70 +28242E0300BEFD548789898754FDBEAE010753828A8A8254FEFA548FD6364639394637D5 +8FA18EE93E453E3E453EE900FFFF00BB00000177045D021600D50000000100C1000004A8 +045F001800D3403B0601060216182618451856186618071C023A0169027A029701A602A6 +18C70208020203C60101860101011A001800090801F90801080B0A03090109B8FFEE4040 +10183709B402181703177F0301091808020305010C1010143F0C05060505011A172A1736 +178017A417051517251777179417E917F917060917180201050F0F00B8FFF04013090E37 +00001A0F1A1F1A3F1A0308031A05891910F6FD3C5D11332F2B332F17395D71002F2F3F3F +FD322F111217395D3130018710C0C07AF52B7118C0C004C07172018710FD5D7108C0015D +71212301071123113311013E013332163315232E01232206070304A8F8FE3D70BCBC0180 +487F3F1C3C070B102F0D2F4D1DFB01E96DFE84045DFDDA01A14F3802A602022F21FEF100 +0001003D0000047F061400070085401305040502020306011A07000002031A04040505B8 +FFF0401C0C10372B002604200703050402030601000806680701070506030400B8FFC040 +260910370C001C004B005A006A00790006008D090F090103041304440455046504760406 +04820810E65D5D10F65D2B1117395D2F003F3F17393130015D2B8710FDC01087FDC008C0 +08C0012123090123010333047FCDFEB8FE97C401D1D7D3033DFCC3042001F400000100B9 +FE640465045D00150046402C12200B0D3703200B0D37080205140B051042050900080A0C +0102131A0092171F1760179017030D091A0A881610F6FD3C5D10F6FD3939003F3F3FED3F +3C12393931302B2B2123350E012322262711231133111E013332363711330465BA4A874E +4B7854BCBC209E5B5D8836BC764E3D3650FDF305F9FCBA2752433C034000FFFF003D0000 +047F045D02160059000000010068FE64041106140046008A403C0F020F06090E1B0E241E +24283415361E36284428473C562D563C691779170F1918333F32320C24213D22013F3F0C +030C191C3232232121122B1B1C04B8FFD6400E090C37040408B4231C1280000100B8FFC0 +400B090C370000483A1B12854710F4ED11332F2B5D123939ED332F2B2FED12392F2F332F +1239003F2FED3FFD3212392FED393931305D0514060723353E013534262B012226272E01 +353436373E0137352E01353436373523352115212206070E01151416171E013B01152122 +06070E01151416171E013B013216171E0104115B42B45C4B3A2E8C8CB93F424532302C89 +4C7D96575AE40338FF00446D302D3641332D7650AAFED942692F2B334B403F995A1C4467 +211F226055A83F0E4F7844374E36393C97584E84353145130B1CA56853873A069A9E1D22 +2066434F621A1716A52827256A3B66721919072F25235F00FFFF006AFFE10471047C0216 +00520000000200B9FE640494047C0011001E0042402C3A17351E4A17431E560D05060315 +3E0F041C400309080C121B3A004A00020090201F206F200219071A08881F10F4FD325D10 +F65DED003F3FED3FED123931305D011000232226271123113436373E0133320003342623 +220615111E013332360494FEEBDE41A348BC47423EBB66F30100C2A0929E8D49774BA2B0 +0241FEFEFEAB242BFE2B04227BB9423E42FEDAFEDFDACCC0B6FE6D221DDE00010069FE64 +03FA04770029005C40120C020C06201325233614362340237A1F0817B8FFE040140E1037 +3F194F190219191D3F1504030C263F0B04B8FFD64011090C370418180408B400002B201B +12852A10F4ED11332FED33332F2F2B002FED3F3FED332F5D31302B5D0514060723353E01 +3534262B012226272E013510002132161715232E01232206151416171E013B01321603FA +5E3EB1564D3C2D5C75C64B49530137010354A0430C5E9D44A6BD393232814B64738E6057 +AA3B0E4B7947364F3C4342D092010E0144251BD33E32EEC1708E2D2C2799000100B1FFE2 +045C045D00170030401F1607050F3E0903560366037903880305030A151A0091191F1901 +091A06871810F6ED5D10F6ED003F5DED3F333130011406232226351133111416171E0133 +3236373E01351133045CF4E2DFF6BC14201F6B5C56731E1D15BC0197DADBD7DE02C6FD7F +5D782E2B2B2C2C2C7B5A028100010030FE640488045D000B00A240492A02250839023408 +4B02440879020710091A0A0B0A071A060506011A000B00031A04050402050B080A000606 +0A0405064A0445066A0465067A04770608040C0605080B050204040A00B8FFE040100A10 +3700000D2F0D010604200A1037042F2BC45D11332F2BC4121739003F3F5D111739313001 +8710ED8710ED8710ED8710ED4B535840140B030A070002030A0601080409070005040906 +010F0F0F0F59005D0123090123090133090133010488D5FEA6FEA2CB01BCFE4FD5014F01 +53CBFE4FFE64026BFD95030202F7FDA80258FD11000100B0FE6405E3045D0023006B4047 +1B062618751802183D39094909020919220903081005080C221A3F237F230223111A3010 +7010021023071B18071A109008C008025025602502080825240F25010F251F253F25035D +5D1112392F5D5DC4ED393910C42F5DED2F5DED003F3F1217392F5DED5D39393130011406 +070E01071123112E01272E01351133111416171E01171133113E01373E0135113305E360 +4F52C873BB73C753505FBC4B34388643BB4386383B44BC01BE72A835373705FE68019806 +343936A772029FFD9C718723261E0403C7FC39051C27287B7802640000010071FFE20611 +045D003D0079402D361F3632441F4432551F55326804680F691A69377D1A7D370C283B28 +0903061605210D303E060A3A400C0E3718B8FFC040240C0E37361B001B1B13003A29090A +291A18139028A028C0280328283F3E1F3F3F3F6F3F035D1112392F5DC4C4ED393910C4C4 +2FED2FED2B2B003FED39393F1217392F31305D011406070E0123222627230E0123222627 +2E013534123733150602151416171E01333236373E01371133111E01171E01333236373E +01353402273533161206112F33379D7360A2250627946671A333332F7290E4879F101E1A +5D47334714161D06BA091C1518393A465E1B19169D89E4907201F760C14B505963434462 +5D4C4CBF61AA0115A7116CFECCB742713F37491911122C0F0248FDB8112C111316473937 +7A41B601346D11A7FEEBFFFF00050000022D05DB021600770000FFFF00B1FFE2045C05DB +023601D100000116008EFB000015400F02301D501D601D0301001D180717252B355D3500 +FFFF006AFFE10471068C0236005200000116019DE200000AB602001B180600252B35FFFF +00B1FFE2045C068C023601D100000116019DFB00000AB601001B180717252B35FFFF0071 +FFE20611068C023601D400000117019D00B60000000AB60100413E1300252B35FFFF00C8 +0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500 +0001FFFF0000060705D1002500614025652476240216341F1F061E1A351B03093506182F +073F074F077F0704070717590F010F1500B8FFC04014090D370000270F27011A1F1D011D +1D1F17141A182F33FD32322F5D2F5D11332F2BED5D12392F5D002F2FED3FFD3212392FED +31305D011406070E012B0135333236373E01353426272E01232111231121352115211121 +3216171E010607534957AF8A6E5D5B782F38343135329583FEEBC6FE520468FE0C015398 +BF554C4901CC6CB13A4530B11022286F4E4B73232213FD220521B0B0FE6824423BAEFFFF +00C80000048A07ED023601EB00000117008D003501610015401001300840086008700804 +0008070405252B5D350000010073FFE5053905EC002A006A400C3A1C491C58057606790C +0511B8FFE040370A103701200A103720341D1D0F032A2A26340309131317340F021E1E13 +000010000200002C0F2C010F2C1F2C2F2C3F2C041D206C09682B10F6FD325D5D11332F5D +33332F003FED332F3FED332F1112392FED31302B2B5D250E012322242726023534123736 +243332161715232E01232206070E01072115211416171E013332363733053963EC91A9FE +EE61616969625F0112A98CF65F104EF98D6DAE4846580F0334FCC258474AC4708AF75010 +4127356863630120B7AF011F66626C3427DF40523A3B3BAD72AD8BD94648494A4300FFFF +0086FFE5050205EC021600360000FFFF0089000002D505D10216002C0000FFFF007E0000 +02E207500236002C00000117008EFF240175001940130200104010501060107010050100 +100D0409252B355D3500FFFF002CFFEB02EA05D10216002D000000020012FFFD08A205D1 +000E003D0066B3460C0130B8FFACB30A10371EB8FFC0401D0B0E37073437371618353503 +28282C352408341637081416163500150FB8FFF440110E11370F713F2F3F011813003501 +3535282F332F5DED5D10F62BFD11392FFD32002FED2FFD322F3FED12392FED31302B2B5D +013426272E01232111213236373E01371406070E01232111210E01070602070E01070E01 +2322262335331E01333236373612133612372111213216171E0107D33235379083FEEC01 +0F858F363834CF554754C098FDEEFDF0030B0308251D1D492F306544153C0C0E0A1E0F24 +401647430E050B040391015298C0554C4901C94B72232510FDCB1A252769556CB0374238 +052171D955D6FEEC595A6B2B2C2603C001021617470146012D62014487FDB823423BAE00 +000200C80000088305D1000E002700554020171E07342121161F1B030834161A560F0120 +1F081400166F160216161900150FB8FFF4400F0E11370F71294029011D19141A6C2810F6 +FD325D10F62BFD11392F5DED39395D002F2FED3F3312392FED39393130013426272E0123 +2111213236373E01371406070E0123211121112311331121113311213216171E0107B432 +35379083FEEC010F858F363834CF554754C098FDEEFD65C6C6029BC6015298C0554C4901 +C94B72232510FDCB1A252769556CB037423802DEFD2205D1FDB80248FDB823423BAE0001 +FFFF000005FD05D1001D00504032000E48175817600E620F700E700F0708011A350B0B01 +07033504031301131412121F5F067F0602060306070014037F0101012F5D33FD32322F2F +5D11332FED002F333FFD3212392FED123931305D2123112135211521113E01333216171E +01151123113426272E01232206070273C6FE520468FE0C5FF66765AA3D3D45C6161E2079 +646AC3660521B0B0FE2D1F33323534A373FE11018C4A8C2B2E312622FFFF00CD00000575 +07ED023601F200000117008D003C01610010400A01702301002321050025012B5D350002 +0006FFF904E6078F001A002800AF405A29033801461955140419191A1814171617161716 +191A130001001617181A010500070B0B0F35071B0F21702102212175250125AA0F1E011E +1E0003281A1B221A702101211B2100700A010A360156016501760104160A01031700B8FF +E0401409103700002A502A012A400910371720091037172F2B2B5D11332F2B1217395D2F +5D1139392F5DED2FED003F332F5DED5D332F5D332FED322F11121739018710FDC008C001 +8710FD08C03130005D09010E01070E012322262735331E01333236373E013F0101330901 +030E0123222627331E013332363704E6FDCA225D3634612D2872100E0F462D14481C203F +1624FDD6DB01B301862105C9A8A8C905B602605E5F5F0205D1FB1B4C621B19110801B902 +09060B0C34324F044FFC92036E01BEA6A8A8A67063627100000100C8FEAF053B05D1000B +0032401C060203043409000B0913000002061407780D400D700D020314026C0C10F6ED5D +10F6ED12392FED002F2F33ED3F33313029011133112111331121112302A4FE24C602E7C6 +FE24BB05D1FADB0525FA2FFEAF00FFFF001A0000055E05D1021600240000000200C80000 +052C05D100120021003E40256311011A340C0C070B3508031B3407080A0A131556000100 +71230F234023020C1B14076C2210F6FD325D10F45DED332F003FED3FED12392FED31305D +011406070E0123211121152111213216171E01073426272E01232111213236373E01052C +554754C098FDE403E5FCE1015C98C0554C49CF3235379083FEE20119858F36383401CD6C +B037423805D1B0FE6823423BAE724B72232510FDCB1A25276900FFFF00C80000052B05D1 +021600250000000100C80000048A05D10005001F401003013504030000070F0701021403 +6C0610F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D10002 +000AFEAF059E05D1000D00130049402A09121A124A110310340A030C1307340301051013 +0A0A070E140C0C0113200001000015131307070413052FED392FED11332F5DED392FED12 +392FED002F332FFD32323FED31305D01231121112311333612112111332111210A010705 +9EBCFBE4BC78829B03728DFEADFE0E0E9476FEAF0155FEAB0201D602B1019AFADF0475FE +9BFDAFBFFFFF00C80000049D05D102160028000000010020000007A805D1003700C7402E +093318332933401D40244135541D54247518711D73240B27133333351A130E0C0E020116 +09103701130037000708B8FFEA405A091037081309090A271F1A032C223237070A0C0E33 +35072C02142D350409021521052C03002F0A20375F0A50376F0A6037062C2C0137022733 +350600C5220414051515080A070C0E1A0609C51F0505393810393F395F397F39045D1112 +392F33F41739322F10FD32F41739322F5D002F3F1739FD322F121739FD111739018710FD +2BC08710FD2BC08710FD8710FD3130005D21230123112311230123012E01272E01272E01 +2B0135333216171E01171E01171133113E01373E01373E013B0115232206070E01070E01 +0707A8F2FDF469C46BFDF4E6025158682013251C1B533C3C47A7B23D0B1E0F2C8F56C45C +912E121D093CB5A5473C424B1E1D25132A7D3E02A9FD5702A9FD5702FE3A9C693D571C1B +18B17FAD1E5824696608029DFD610663702C5519AC80B1171C1B5B3A8587270000010051 +FFE5048505EC0040007F40145401583B6701693B7F0B7F0C7031703274380932B8FFE040 +3F0B10370B200B10373E3D1D3420200934703001303029343402100D7F0D020D0D113409 +0A3D1E0B0D37171E0B0D37236C3A1E1E3D3A030C171503734231310C2F332F10F6ED1217 +392F2FED2B2B003FED332F5D3FED332F5D1112392FED393931302B2B5D011E0115140607 +0E012322262735331E01333236373E01353426272E012B0135333236353426272E012322 +06070E010723353E01333216171E0115140607151E010416303F5B4650E68593FB4A0F63 +F97148A83436313C33339159C9B3ADD2352E2D6F4C4E843B3064170D4BF87E7BB14B4E52 +A37D347602CD2A816669AA3C4444371EDE3B4B2A292D6F454F651F1E1BA97F7836521818 +151E1411340DDB2036272C30885A7FB01B0F092F000100C80000053905D1000900644023 +0B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D07B8 +FFE840240B0F3702100C0F3707060102040308030308030807021400780B0F0B400B0207 +14046C0A10F6ED5D10F6FD113939003F3F1217392B2B31305D7121231101231133110133 +0539C5FD1CC8C502DBD104A9FB5705D1FB690497000200C800000539078F000900170093 +40320B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D +0A0F10701002101014AA0F0D010D0D07B8FFE840330B0F3702100C0F3707060102040308 +030308171A500A600A020A111A100A10000403080702140078190F194019020714046C18 +10F6ED5D10F6ED113939111239392FED2F5DED003F3F1217392B2B332F5DED332F5D3331 +305D7121231101231133110133030E0123222627331E01333236370539C5FD1CC8C502DB +D1B505C9A8A8C905B602605E5F5F0204A9FB5705D1FB69049701BEA6A8A8A67063627100 +000100CD0000057505D1002000AF407909011F01290127203A0137204B0147205C016500 +6720760074200D1F200A0D370C200A0D370202038801C8010201B30020001E661B861B02 +1B13120D120D121B1E04152002322F08010808000716351503070305000D121B1E200504 +4F150115150F2220003000400004500001006E22402201080414056C2110F6FD325D10F6 +5D5D322F5D121739002F2F3F3FED1112392F5DFD39121739018710FD5DC031300187107A +FD5D1808C0012B2B5D2123012311231133113E01373E01373E01373E013B011523220607 +0E01070E01070575FEFDA387C6C6335A28284E1E0D231245B9B44F53454E1F1D2B17346B +5A02A7FD5905D1FD6401121917553E1B522DA686B1191D1A583B847C2E0000010012FFFD +051805D10021003DB9001BFFACB309103709B8FFC0401A0B0E370335200301131317350F +01140078238F230103132020122F332FED5D10F6ED002FFD322F2F3FED31302B2B212311 +210E01070602070E01070E012322262335331E0133323637361213361237210518C6FDE6 +030B0308251D1D492F306544153C0C0E0A1E0F24401647430E050B04039B052171D955D6 +FEEC595A6B2B2C2603C001021617470146012D6201448700FFFF00C8000005F605D10216 +00300000FFFF00C80000053B05D10216002B0000FFFF0073FFE105DA05F0021600320000 +000100C80000053B05D100070027401703350603010501140078090F0940095009030414 +056C0810F6ED5D10F6ED002F333FED31302123112111231121053BC6FD19C604730521FA +DF05D100FFFF00C80000049605D1021600330000FFFF0073FFE5054605EC021600260000 +FFFF0000000004EE05D102160037000000010006FFF904E605D1001A0080403C29033801 +461955140419191A1814171617161716191A130001001617181A010500070B0B0F350700 +03700A010A360156016501760104160A01031700B8FFE0401409103700001C501C011C40 +0910371720091037172F2B2B5D11332F2B1217395D2F5D003F2FFD322F11121739018710 +FDC008C0018710FD08C03130005D09010E01070E012322262735331E01333236373E013F +010133090104E6FDCA225D3634612D2872100E0F462D14481C203F1624FDD6DB01B30186 +05D1FB1B4C621B19110801B90209060B0C34324F044FFC92036E00030069FFF0062405E1 +001D002A00370058403624182C321525062B32091509081603082A1E253265006A0F041E +150032150F00072B1518250407140F080839381F393F396F399039045D1112392FC4ED17 +3910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01071523352E01 +272E01353436373E01373533151E01171E01073426272E0127113E01373E0101110E0107 +0E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F4B57CE403B3A +8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A524AD88C88CC +4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01363737AA6170 +B63A2D3CFFFF00440000053805D10216003B0000000100C8FEAF05BE05D1000B0032401C +0602030B08043501080514080800130D40090B370A0A0D0414016C0C10F6ED11332F2BED +392FED003FFD322F3F3331302901113311211133113311230502FBC6C602DDC68DBC05D1 +FADD0523FADDFE010001008E000004EA05D10019003B40243511451154116C0974160502 +0C1435050500180C030017011400781B0F1B010D140C6A1A10F6ED5D10F6FD32002F3F33 +12392FED123931305D2123110E01232226272E01351133111416171E0133323637113304 +EAC681DD6463AC3F3F47C6142323726B71D652C60276282A313535A47201FCFE67577930 +2F2F281E02B1000100C80000077605D1000B003640200A06020308043401091400C60814 +05041401C605050D0C1F0D3F0D500D700D045D1112392FF4ED10FDF4ED002FFD323F3333 +31302901113311211133112111330776F952C6022EC6022EC605D1FADB0525FADB052500 +000100C8FEAF080305D1000F004140260A0602030C080434010F0D13000009140CC60814 +05041401C6050511101F113F1150117011045D1112392FF4ED10FDF4ED332FED002F2FFD +32323F33333130290111331121113311211133113311230747F981C6022EC6022EC68DBC +05D1FADB0525FADB0525FADBFE0300020000000005F405D1000E00210046401D07341B1B +1618351903083416560F011B08144F167F160216161900150FB8FFF4400A0E11370F7123 +0F2301192F5D10F62BFD11392F5DFD325D002FED3FED12392FED3130013426272E012321 +11213236373E01371406070E0123211121352111213216171E0105253235379083FEEC01 +0F858F363834CF554754C098FDEEFE660260015298C0554C4901C94B72232510FDCB1A25 +2769556CB03742380521B0FDB823423BAE00000300C80000069505D1000E001F00230055 +4016440D0107341919161703083416220321560F0100150FB8FFF4B30E11370FB8FFC040 +150C10370F0F21142078250F25702502190814166C2410F6FD325D10F6FD322F2B2BED5D +002F3F2FED3F12392FED31305D013426272E01232111213236373E01371406070E012321 +113311213216171E010123113304533235379083FEEC010F858F363834CF554754C098FD +EEC6015298C0554C490173C6C601C94B72232510FDCB1A252769556CB037423805D1FDB8 +23423BAEFDC505D1000200C80000052205D1000E001F003C401007341919161703083416 +560F0100150FB8FFF440110E11370F71210F21402102190814166C2010F6FD325D10F62B +ED5D002FED3F12392FED3130013426272E01232111213236373E01371406070E01232111 +3311213216171E0104533235379083FEEC010F858F363834CF554754C098FDEEC6015298 +C0554C4901C94B72232510FDCB1A252769556CB037423805D1FDB823423BAE0000010061 +FFE5052905EC002A0070400A3A1C491C640676060426B8FFE0403E0A10370B200A103718 +34191928092424203428020D0D11340909060316035603031A24171403732C0F2C010F2C +1F2C2F2C3F2C04241824180F0C1F0C020C2F5D33332F2F5D5D10F6ED11395D003FED332F +3FED332F1112392FED31302B2B5D0116121514020706042322262735331E01333236373E +01352135212E01272E012322060723353E0133320404616068696366FEEFA38DFE571051 +F78D7BCC444849FCD303230E5C4747B46689F057115DFE85AC010F052C60FEE4C2ACFEDF +676A6B3625DB414D574B50C980AD77AF3939374D43DC27356000000200C8FFE107D305F0 +000B001E006240427814010903060915161A1C5616591C7916761C080C34131E1314031C +03341602100309341C090F13190615180C3F0C580C6F0C040C0C0F0015197320120E140F +6C1F10F6FD3210F6ED12392F5DED1239002F3FED3F3FED1217392FED5D31305D01100023 +2200111000333200012311231133113312002120001110002120000705FEFFDBDDFEFE01 +03DCDB0101FB79F0C6C6F924016A0113013F016CFE90FEC5FECCFE9102E801280135FECC +FED7FEDBFEC90136010EFD3005D1FDAC012D0146FE63FE95FE93FE6601890002002C0000 +04DE05D10010001F0066400C28033506471C5A0759170504B8FFE8403209103703041305 +0506060F113440030103030012340F03000519150904060309045F050105120114007821 +0F2140216021035D10F6FD322F5D17392FED002F2F3FED12392F5DED12393130018710FD +C02B005D212311210123012E01353436373E0133210311212206070E01151416171E0133 +04DEC6FEBFFE43EE01DE96A55F4E47BE7301EAC6FED256682B2E3425292D82560250FDB0 +026E33D5B372A5373228FD240232161D1F7043506A292C1EFFFF0068FFE1041D04780216 +0044000000020074FFE1047C061D00270039006440160C1F35043D29303940044B294039 +6512751273330A33B8FFC0402B0B0D3722062B41002510250225250619411800373F060A +223118180C281B03903B1F3B3F3B02311B0C863A10F6ED5D10F6ED12392F1239003FED3F +ED12392F5DED123931302B5D011E01151400232226272602353436373E01373E01373E01 +37150E01070E01070E01073E01333216133426232206070E01151416171E0133323603EE +4648FED4DB6CB640504F0E19144D3548EBC24F883642814080CF303535084BB3655EAE0F +B29257A04802033A352E6C3E97AA03B846C786FAFEB6494C5F0121D04B9B6C5DAC354959 +11070904AD0408060B3E3135AB4D36493EFE22B9B7372E19431CAED840362DDA000300B9 +00000453045D0015002400330061400C0A0305141A0315147623050CB8FFD6402F090C37 +12112C3C4F1E011E1E071D3D08052D3D0708161B122C0F0F07251B00100D10370090350F +35011E2C1A07883410F6FD325D10F42BED12392F1239ED003FED3FED12392F71ED393931 +302B5D011406070E01232111213216171E0115140607151E01033426272E012B01113332 +36373E01133426272E012B0111333236373E010453413940977BFE3201B07D7F383F3B5E +4A6381FD1F202A694DC4EB4A4724261D3B243D26584EF1B270792C2C2B0152517E2A2F2A +045D111D216A48537A220A1889017D243A101505FECE0B161841FE4237451D1207FE930F +19194800000100B9000003BB045D0005001F4010013F040503700001000007021A038806 +10F6ED11332F5D002F3FED313001211123112103BBFDBABC030203B8FC48045D00020009 +FEF404AF045D000D00130053401C3B124A12020105103E0A050C13073E0310C90A0A070E +1A0C0C01C900B8FFC040120B0E370000152F153F1502131A070704C9052FED392FED5D11 +332F2BED392FED12392FED002FFD32323FED2F3331305D01231121112311333612112111 +3321112106020704AFAFFCB8AF79757302BE87FEBDFEAF0D8053FEF4010FFEF101ACC101 +F90103FC43031FFBFE628600FFFF006AFFE60460047C0216004800000001003400000632 +045D003100D840123A0E3A2D4A0E4A2D5F0C5F2F6F0C6F2F0826B8FFE0B3090B3715B8FF +E0401A090B3724B42D2D2F17B40E0C0E020116091037011A0031000708B8FFEA405E0910 +37081A09090A241C1703291F3C31070A0C0E2F2D072902112A3F040902121D052905002E +0A21315E0A51316F0A60317F0A7031082929013102242D2F0600C71F041A051212080A07 +0C0E170609C71C0505333210333F334F336F33045D1112392F33F41739322F10FD32F417 +39322F5D002F3F1739FD322F121739FD111739018710FD2BC08710FD2BC08710FD8710FD +3130002B2B5D21230123112311230123012E01272E012B0135333216171E01171E011711 +33113E01373E01373E013B0115232206070E01070632E3FE9A5BBA51FE8AD901AF314B1F +1B4A5435457C962D091B0A216740BA4069210B1B082C947D4535554B191C4D2D01FEFE02 +01FEFE0202491A60615542A2647D1A43174C3F0401E4FE1C04404B1942197B66A2465159 +631900010041FFE603C20478003D007FB7263475127D3C032FB8FFE0404C0D103708200D +10373B1B3FAF1CBF1C021C1C06313F2D902DA02D032D2D293E3104200A300A020A0A0E3F +06091C2E231B372E1C373B0409141B00903F7F3F803F02800990090209400B0F37092F2B +5D5D10F6ED1217392FED2F2F003FED332F5D3FED332F5D1112392F5DED3931302B2B5D01 +1406070E012322262735331E01333236373E01353426272E012B0135333236373E013534 +26272E012322060723353E01333216171E0115140607151E0103C2574444A45274D2660D +49E26A326A272A32312A297430A371288128343D3024255B2366C5430D53BE5F4E9B4342 +546D5C677A01395E822827242C2ECE4046131518433A3C48121208A2060D113E442F3D11 +110C3734CF1B221C2222755658851D071989000100B900000466045D00090044402D0B02 +0407020D030103380B103702380E10370706010204030805030808021A00920B1F0B600B +0203071A04880A10F6ED395D10F4FD39003F3F12173931302B2B5D712123110123113311 +01330466BAFDB7AABA0243B00347FCB9045DFCC5033B000200B900000466061500090017 +0073404C0B020407020D030103380B103702380E10370A0F1001101014500D0D07060102 +04030805030817C91F0A2F0A020A11C900101010201003100A100408021A0092191F1960 +190203071A04881810F6ED395D10F6FD391239392F5DED2F5DED003F3F121739332FED33 +2F5D3331302B2B5D7121231101231133110133030E0123222627331E01333236370466BA +FDB7AABA0243B06B05B1A9A9B105AB015B58595A010347FCB9045DFCC5033B01B894A6A6 +94695E5C6B00000100C1000004A9045D001A0093404D0120090E371B02271A360E321635 +1A0502011A001A000A1B0F2B0F020FB41618160A0F181604121A023C2F08010808000713 +3F12050705010508561A9600961AB600B61A05021A181604121200B8FFC04011090E3700 +001C0F1C1F1C0208031A05891B10F6FD325D11332F2B332F17395D003F3C3F3FED111239 +2F5DFD39121739018710FD71C03130018710FDC0015D2B2123012311231133113236373E +01373E013B0115232206070E010704A9F6FE3066BCBC5D72280E1B0D349C9256534F5924 +2859320200FE00045DFE1E434A1B3D1C7170A243545E5D180001001DFFFE043E045D0021 +003FB9001BFFACB30D103709B8FFC0401C0D1037023E2105001313173F0F011A00922303 +1A20203020022020122F332F5DED10F6ED002FFD322F2F3FED31302B2B212311210E0107 +0E01070E01070E012322262335333216333236373E01373E013721043EBCFE5F03060307 +201A183B2222533111410A0A081E0A183312333E0A040703030103BF539A3EA7C7423E4D +1F1E1E02A4020E1332EEE152E166000100B9000004D9045D000C0078401335093A0B4503 +4A0470037F04060B400D103709B8FFC0403D0D10377B027B05790A030A2A090B37050A02 +030904400E103704200D0F373F04010404070B09050107090A0B0305021A00920E0F0E20 +0E02051A07880D10F6ED5D10F6ED111739002F333F3312392F5D2B2B1217393130002B5D +012B2B5D2123110123011123113309013304D9BAFEEA8CFEECB0E301300126E70372FDC2 +023EFC8E045DFD8F0271000100B900000460045D000B0032401C033F0808050A07050105 +0809021A00920D1F0D600D0208031A05880C10F6FD325D10F6FD32003F333F3312392FED +31302123112111231133112111330460BCFDD1BCBC022FBC01F7FE09045DFE3C01C4FFFF +006AFFE10471047C021600520000000100B900000460045D000700254015033F06050005 +011A0092091F09600902041A05880810F6ED5D10F6ED002F333FED313021231121112311 +210460BCFDD1BC03A703BBFC45045D00FFFF00B9FE640490047C0216005300000001006A +FFE703FD04770021005A40430F234F235F23032B01220E2A1624183A01350E3A16351849 +014F0A440E4F1641185901550E6901650E7A01730E131010143F0C0421211A3F03090F00 +0023171B09852210F6ED11332F3C003FED332F3FED332F31305D015D250E01232226272E +013510002132161715232E01232206151416333236373E01373303FD73A5527ACC494951 +0128010161BB4E0B5DB555A7B7B6A83B75302651100B463629474848DC93010B013F3627 +D14744E0C7C7DC1E1813350D0001000A000003EE045D0007003840230301043F06054000 +4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32 +2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A5FFFF +003DFE64047F045D0216005C00000003006FFE64064B061400230030003D007A40105622 +011D011B1E0C09040627353F2118B8FFF040400E0F3718043B2E3F0F06100E0F3706090B +0C392436384924463804241B00C809311B1E2B04091A0C381B12C8800C900C020C0C3F3E +0F3F1F3F3F3F503F803F055D1112392F5DFDED10ED173910FDED5D003F3F2B33FD323F2B +33FD321217393F31305D011406070E01232226271123110E01232202113436373E013332 +16171133113E0133321203342623220607111E0133323605112E01232206151416333236 +064B4C3F3EA259436327BA3D4F54C1F04E3F3DA5523C6331BA2E7C3FC6E2C18888374A3F +2F3F3A8D9BFD7627503187A18F87355B024C95E54A4A4E2E13FE3301CD1E23012E010D8D +DD4B494D251E01E1FE1F1B28FED5FEECBFDE1219FD171619D9AA02E91219CED2C3E01D00 +FFFF003C00000480045D0216005B0000000100B9FEF404DE045D000B0041400F0602050B +08043F01051A080800C90AB8FFC04015090D370A0A0D0D40090E378F0DAF0D02041A0188 +0C10F6ED5D2B11332F2BED392FED002FFD322F3F33313029011133112111331133112304 +2FFC8ABC0226BC87AF045DFC4503BBFC45FE52000001008E0000041F045D0016003C4025 +0C061C062C06750E040209113F0505001509050014011A0092183F18010A1A0009100902 +092F5DED5D10F6FD32002F3F3312392FED123931305D2123110E01232226351133111416 +171E01333236371133041FBC5BA662B4BEBC101A1A5E5445A23CBC01AD1C22B1A70196FE +CA40652524261B12021D000100B900000649045D000B003D40260A06020508043F010809 +1A00CA081A05041A01CA8005A0050205050D0C0F0D200D500D700D045D1112392F5DF4ED +10FDF4ED003FFD323F333331302901113311211133112111330649FA70BC01AEBC01AEBC +045DFC4503BBFC4503BB000100B9FEF406D0045D000F004A402E0A0602050C08043F0108 +0E0DC90000091A0CCA081A05041A01CA80059005A00503050511100F111F113F116F1104 +5D1112392F5DF4ED10FDF4ED392FED002F3FFD32323F3333313029011133112111331121 +1133113311230621FA98BC01AEBC01AEBC87AF045DFC4503BBFC4503BBFC45FE52000002 +000A000004C4045D000E0021004A4015750D01073D4F1B9F1B021B1B16183F1905083D16 +0FB8FFF04016090B371B081A161619001B0F8F230F231F232F2303192F5D10F6FD11392F +FD322B002FED3FED12392F5DED31305D013426272E012B0111333236373E01371406070E +0123211121352111333216171E01040223282A6B64B0AC646E282925C24138429676FE55 +FEB80204F47E8B453A3A0157334D18190AFE8411181A473A518429322A03B8A5FE4D1A33 +2B86000300B9000005A2045D000E001F0023005A4016200523073D4F199F190219191617 +05083D167900010FB8FFF04022090B37001B500F600F700F030F0F231A2292250F253025 +402570250419081A16882410F6FD325D10F6FD322F5DED2B5D002FED3F12392F5DED2F3F +3130013426272E012B0111333236373E01371406070E012321113311333216171E011333 +1123036923282A6B64B0AC646E282925C24138429676FE55BCF47E8B453A3ABBBCBC0157 +334D18190AFE8411181A473A518429322A045DFE4D1A332B8602B1FBA300000200B90000 +0435045D000E001F00424013073D4F199F19021919161705083D167900010FB8FFF04013 +090B37001B0F8F210F212F210219081A16882010F6FD325D10F6ED2B5D002FED3F12392F +5DED3130013426272E012B0111333236373E01371406070E012321113311333216171E01 +037323282A6B64BAB6646E282925C24138429676FE4BBCFE7E8B453A3A0157334D18190A +FE8411181A473A518429322A045DFE4D1A332B8600010053FFE703F604770021007DB532 +0442040210B8FFD640090B0D37152A0B0D371DB8FFD6403F0B1037082A0B1037123D1313 +061F1B1B173E1F049F0A010A0A0E3E0609141C111A0390232340090D371C2F133F134F13 +03131C1380099009020940090C37092F2B5D33332F5D2F2B10F6ED1139003FED332F5D3F +ED332F1112392FED31302B2B2B2B5D011E011510002122262735331E0133323637213521 +2E012322060723353E01333216035D4950FEC9FEFC66BF430D3CC66D9DC40CFDCC023314 +BE8E5BB4570D3FC2677CC803ED46D290FEEAFEB8301BCE2F49C0BA979E9F3D43CE193A44 +000200B9FFE1064C047C000B001E005640363A0335094A034509040C3E131E1314031C03 +3F16041005093F1C0A0F1319061A2F0C010C0C0F001B1990202F203F2002120E1A0F881F +10F6FD325D10F6ED12392F5DED1239002F3FED3F3FED1217392FED5D3130013426232206 +15141633323625231123113311333624333200111000232200058AA69399A1A89292A7FC +D3E8BCBCED190111C7E70112FEF2EBDEFEF5022ED7D5DFCDD4D7D5A2FE06045DFE3BE7FD +FEC4FEEEFEF1FEC201200002004300000413045D0010001F0069B3721C0104B8FFE8403D +0910370304B4050506060F113C030300123D0F0500050909190902191B70090109040603 +09040A051A054A055A0580059005060512011A0092210F21015D10F6FD322F5D17392F5D +ED5D002F2F3FED12392FED12393130018710FDC02B015D212311230123012E0135343637 +3E0133210311232206070E01151416171E01330413BCDDFEA6DD01789186503D3C9C5C01 +AEBCED4D442827251724256A4101BBFE4501CD28A586597C27261BFDF201780A16164B2C +37441E1D1500FFFF006AFFE6046005DB0236004800000116008EF9000014400D03302560 +250202002520120025012B355D3500010013FE6D046206140035006A4044051C1E261E28 +59056905721D0617140E51111112180D08421B0412012F3E2A2A012A0D150F5F2E6F2E7F +2E032E2E0D001A2191371F37603702141517030B1A110F0D883610F63232FD17325D10F6 +ED12392F5D2F2F002F2F5DED3F3FED123912392FED393931305D0026272E01272E012322 +0607112311233533353315211521113E01333216171416151406070602070E01232A0127 +35333236133E013503A501010113191A594650AC4CBCA6A6BC0141FEBF58C162B1BB0303 +020103544746B96A17182A44BB9C09010102064B2B5080292B294D3AFCBE04F4869A9A86 +FEED4952DEC92F6B4B3A703AB0FEFF50504E029EF60150224B2EFFFF00B9000003BB0682 +0236020B00000116008D9AF6000AB6010009070405252B350001006AFFE7040A04770021 +006EB53B0A4B0A021BB8FFD640090B0D37162A0B0D370EB8FFD640340B1037012A0B1037 +193D1818030C1010143E0C0421211D3E03092018301840180318171810031A008E232340 +090D371A1A09852210F6ED2B10E61117392F5D003FED332F3FED332F1112392FED31302B +2B2B2B5D250E01232226272E013510002132161715232E01232206072115211E01333236 +3733040A4E9F7B7DD14C4C52012B010D68BB450C40C2658FC719023CFDC10AC4A46CBD3E +0C302029474849DC92010501453620CB324E9CA197B2C8443200FFFF006EFFE503D70478 +021600560000FFFF00AF0000018305DB0216004C0000FFFF00050000022D05DB02160077 +0000FFFFFFC2FE59021505DB0216004D00000002001DFFFE06F4045D000E003D0072B900 +30FFACB30D10371EB8FFC0401D0D1037073D4F379F3702373716183E350528282C3F2409 +3D167900010FB8FFF0401E090B3737081A161635001B890F010F8F3F0F3F0118C9203530 +35023535282F332F5DED5D10F45DFD11392FFD322B5D002FED2FFD322F3FED12392F5DED +31302B2B00353426272E012B01113332363736371406070E01232111210E01070E01070E +01070E012322262335333216333236373E01373E01372111333216171E01063223282A6B +64B0AC646E2829E74138429676FE55FE5F03060307201A183B2222533111410A0A081E0A +183312333E0A0407030301F47E8B453A3A012037334D18190AFE8411181A81518429322A +03BF539A3EA7C7423E4D1F1E1E02A4020E1332EEE152E166FE4D1A332B86000200B90000 +06F4045D000E0027005D4017171E073D4F219F21022121161C20051A083D167900010FB8 +FFF0401F090B37211E081A16161A001B890F010F8F290F292F294F29031D191A1A882810 +F6FD325D10F65DED11392FED39392B5D002FED2F3F3312392F5DED39393130013426272E +012B0111333236373E01371406070E0123211121112311331121113311333216171E0106 +3223282A6B64B0AC646E282925C24138429676FE55FDF3BCBC020DBCF47E8B453A3A0157 +334D18190AFE8411181A473A518429322A0210FDF0045DFE4D01B3FE4D1A332B86000001 +00130000045F0614001E00504030031D161D751D0317140E51111112180D08421B041201 +010D08150F021A0091201F20602002141517030B1A110F0D881F10F63232FD17325D10F6 +ED2F2F003F3C3F3FED123912392FED393931305D2123113426272E012322060711231123 +3533353315211521113E0133321615045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC +63B5BE027C4D87262A294C3BFCBE04F4869A9A86FEED4952DACDFFFF00C1000004A90682 +0236021200000116008DF9F60011400C01001D401D02001D1C0611252B5D35000002003D +FE64047F06150007001500BD404C04063406440650066006700606090307051903170546 +0149035800570179030902071A000100051A0403044900460402080F0E010E0E12500B0B +0003020405020C15C908400B0E37080FC90EB8FFC040110B0E370E080E04026801010102 +03030400B8FFC040220910370C001C004A006A007A0005008D170F170103041304450465 +0475040504821610E65D5D10F65D2B1117395D2F1139392F2BED2F2BED003F3F12393933 +2FED332F5D333130015D8710FD8710FDC0015D005D0901231301330901130E0123222627 +331E0133323637047FFD74C9D0FE43CC0157015A0805B1A9A9B105AB015B58595A01045D +FA0701D20427FCC4033C01B894A6A694695E5C6B000100B9FEF40460045D000B003F4027 +0A060520030103083E00050802C93F034F037F0303030305091A00920D1F0D600D02081A +05880C10F6ED5D10F6ED12392F5DED003F33ED2F5D3F3331302901112311211133112111 +330460FE84AEFE83BC022FBCFEF4010C045DFC4403BC000100C80000048A076B0007002B +B90006FFC040140D10370606003503030205130606090114026C0810F6ED11332FED002F +3FED332F2B31300111231121113311018EC60308BA0521FADF05D1019AFDB600000100B9 +000003BB05CE00070033B90006FFC0401A0E10370606003F03050205C97006010606090F +0901011A02870810F6ED5D11332F5DED002F3FED332F2B313001112311211133110175BC +0254AE03B8FC48045D0171FDEA00000100CB023C073502DC00030011B601540200000501 +2F11332F002FED3130012135210735F996066A023CA0000400C8000008B905ED00090015 +0021002500A7403E080718073A014901440646075801540656076F0160067F0170060D09 +0D0613190D16137A19751F0625533F224F220222221F401214371F51300D010D0D19B8FF +C040321214371951130202030807040106030100220F2302232223220A1CC910100A0006 +0102071300000416C90A0A270213046C2610F6ED11332FED12392FFD1139391112392FED +1239392F2F5D002F3F1217393FED2B332F5DED2B332F5DED5D3130015D21230111231121 +0111330114062322263534363332160734262322061514163332360121152104FFF5FD72 +B401330250B403BABDB2B6BABEB2B5BAB25865675757676558FE6201B8FE480534FACC05 +D1FB4004C0FE63E0DADADFE0DADCDDAC8888ADAD8787FDE89E00000100B900000460045D +000700254015033F06050005011A0092091F09600902041A05880810F6ED5D10F6ED002F +333FED313021231121112311210460BCFDD1BC03A703BBFC45045D00000101190235028F +05D5000800214011035004040703010E0307002A03000101012F5D33ED392F003F3F332F +ED3130012311233532363733028FA5D1667E0989023502A9752C5600000100EF023D039F +05ED001D0043B90011FFE040250D10370F0F0B521302021C51010E00001C01082A261636 +166616761604160F160F000101012F5D33332F2F5DED1239332F003FFD323FED332F3130 +2B0121353E01373E013534262322060723353E01333216151406070E010721039FFD505B +86276D40584C468F290F41974D9DA9526A318D3701F2023D94456825676D52464A3C20B3 +1B229E7A5D945E2B6A29000100E6021C037305ED002E0074400F6C096C227E097E220455 +0C5A1F0226B8FFE0403B0B0E3703200B0D372C2B15510F16010F161F164F165F16CF16FF +16061621211D51160625020A0A0E51060F1A2A281622112A2216282C04090000092F332F +121739ED2F2F2FED003FED332F3F1239ED332F2F5D71ED393931302B2B5D015D01140607 +0E012322262735331E013332363534262B01353332363534262322060723353E01333216 +15140607151E0103733C30357B4F528F4111259A4F546E645B8C7D575F52574299251140 +964F98AA614D5075033A47702225201E1CAF233B4948533B8B4C423C473E23AF1B228C62 +57711A08106D000200B3023D03BD05ED000A000D003A401E6D067E06020609010D51050C +05030702030E00070B042A09000D060101062F332F12393333FD39392F003F3F1239392F +ED3939323130015D012315233521350133113321110103BDA396FE2F01D295A3FECBFE9F +0319DCDCB9021BFDB10190FE7000000100E6021C037505DA002A004840176F087F08021D +1D1A5125250621511E030A0A0E51060F00B8FFEA400F090C371F21291E1F1E09142A0000 +092F332FED1239392FED2F2B003FED332F3FED12392FFD322F31305D011406070E012322 +262735331E01333236373E01353426272E012322060711211521153E01333216171E0103 +75322F3088574E953C1025924E2C521C1D171F1D1E59353B6C260255FE4814310E547634 +373C0363457A2A2B331C1A9F1436171C1D43272A391415110E0601F08BCF02021722246F +000100F3023503A505DA000600414025560101030100012A020203630073000200000351 +0503020E030002100910370202040000042F332F12392F2B1239003F3FFD322F3130015D +8710ED87C0015D0901230121352103A5FE2AB901F0FDED02B2054EFCE7031A8B000300C5 +021B039105EE001900280037005D40420F0B0F151F0B1F152A022A0439023904492B582B +0A0F251F2526103610042F09261604031D5110023551030F1A2A13202A0D292A090D1316 +04067000010000322A062FED332F5D121739ED2FED2FED003FED3FED1217395D31305D01 +140623222635343637352E0135343633321615140607151E01033426232206151416171E +01173E01133426272E01270E011514163332360391CB9BA7BF5E595246B99095B5505261 +5BBE574F465D302D17482E392618374217582A3A387650516D033579A19F784F78260429 +64476A8D87683F7D2304276B016433483F36263D140A1F0B254FFE79323B1E0A1C0F205D +304A5F4E00020073FFE1068B05F0002800340075400978180176097915021BB8FFC04045 +0910371B694F0001002302031A090A0905151A0915155A095515062C3415023234090A22 +1E2926151B00030F291503360F361F3680369036BF36CF36060F36012F150F683510F6ED +5D5D10D6ED121739D4FDC4003FED3FED5D1239393FDD5DED2B5D31305D011E0115140207 +0E01232224272602353412373624333216171E01173E013534262735331E011514060110 +0023220011100033320005A11F1A63595CFBA19DFEFF5A5A61605C5801059AA0FF591819 +144F43160CA00D0B78FEF9FEFCE1E3FEFD0108DEDE0107044958A663B8FEDD6165666863 +630120B9B6012167626869611B2121044044245B17092F46326C82FE8D0122013BFEC5FE +DEFEDBFEC90137000002006AFFE104C30584001D0029005640391A20090C373A2135274A +21452704151B690D050003213F0904273F030A14102918090C1B03061E1B00902B0F2B1F +2B3F2B6F2B04241B06852A10F6ED5D10F6ED121739DCFDC4003FED3FED12393FFDCD5D31 +302B011000232200111000333216173332363534262735331E01151406071E0107342623 +22061514163332360471FEE8EBEDFEE90117ED33602B5D5A4A160CA00D0B736C4548C2AA +9799A9AA9896AB022EFEEFFEC4013C01110111013D0F104147245B17092F46326A80144D +D98BD9D3D3D9D2D9D700000100B2FFE1067506F8002B004C40342A20090F37252B6A1C03 +0D032615390649067615041534060A2420290F2801281B14002D0F2D402D6F2D7F2D902D +050F140C6B2C10F6ED5D10DEEDD45DFDC4003FED5D3F3FFDC431302B011406070E012322 +26272E01351133111416171E01333236373E0135113332363534262735331E0115140623 +052947514DCE898CD0475147C621272C976A6B962D2721D85A4A160CA00D0BACA00256A2 +F1504C464A4852E8A9037BFC7B798C394142414239936D038A4147245B17092F46328384 +000100B1FFE105A505840025005C403E0B0619077A070323200910371E246A1505020509 +051142050A011D19290F21012114021A40000100270F276F27025F279027A027C027EF27 +050B1A08872610F6ED5D7110D671ED32D45DFDC4002F3FED3F12393FFDC431302B5D2123 +350E01232226351133111416171E0133323637113332363534262735331E011514062B01 +0457BC5FAE69B0C4BC101A1B565249AD4BD05A4A160CA00D0BACA0027C4B50D7D002D5FD +8455792B2C284C3B03424147245B17092F46328384000001020905110342068C00160042 +4029BF0301030606050C50146005010504ADC005D005020540090D370505110940111437 +09290F000100112FDD5DED2B12392F2B5DED002F5DD4ED12392FC55D3130011406071523 +353E013534262322060723353E01333216034242426E2F3026211F251803134926516605 +F8404E1544790C27271827090969060C560000010221FE8202F5FF450003001340090144 +8F0201020015012FED002F5DED31300123353302F5D4D4FE82C3FFFF0154051602FA068C +001600430000FFFF021D051603C3068C0016008D00000002013605110514068C0006000A +004DB90006FFF040100E103705100E10370802010708040305B8FFC040110E1037050560 +0301036007700702070900B8FFC0B50E10370000042F332F2BD6CD5D002F5D332F2B1217 +392F3130012B2B01230B012313332103231303E19FB9B89BE4E30217DA817C05110100FF +00017BFEF6010A0000020003051103E1068C0006000A004AB90006FFF040100E10370510 +0E10370802010809040305B8FFC040180E1037050560030103006F097F0902090704400E +103700042F332BD6CD5D2F002F5D332F2B1217392F3130012B2B01230B01231333012303 +3303E19FB9B89BE4E3FE6181DADF05110100FF00017BFEF6010A00020136051104C00752 +0006001D008EB90006FFF040120E103705100E1037BF0A010A0D0D0C13501BB8FFC0400B +0E10371B0C02010C030305B8FFC0402A0E10370505600301030BADC00CD00C020C400910 +370C0C18104011143710290F07010718400C10371800B8FFC040090E1037000060040104 +2F5D332F2BD42BDD5DED2B12392F2B5DED002F5D332F2B1217392FD42BED12392FC55D31 +30012B2B01230B01231333251406071523353E013534262322060723353E0133321603E1 +9FB9B89BE4E301C342426E2F3026211F251803134926516605110100FF00017B32404E15 +44790C27271827090969060C560000020125051103F307DE000600200064B90006FFF040 +200E103705100E10370710520F171F17A0170317141D520A400D11370A01020305B8FFC0 +40110E10370505600301032029070013291400B8FFC0B40E103700042F332BD6ED2FD6ED +002F5D332F2B123939D62BED3CDD5DED3C3130012B2B01230B01231333130E0123222627 +2E0123220607233E01333216171E013332363703E19FB9B89BE4E3F606865F35491C183A +192B22058C05875F36491C163B192A240405110100FF00017B015289902919162D3E4788 +912A19142E3E47000002014204E703D506FB000D0011003C40251110400F1A3710001006 +0AAA3F030103600E700E020E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D +002F5DEDCD39392F2BCD313001140623222635331416333236353703231303D5B29897B2 +A2555253555EDA817C0646A3BCBCA37C64647CB5FEF6010A0002014204E703D506FB000D +0011003C4025100F400F1A370F000F060AAA3F0301036F107F1002100E0D2A0E0F001F00 +8F000300072A062FEDD45D39ED2FCD5D002F5DEDCD39392F2BCD31300114062322263533 +1416333236350723033303D5B29897B2A2555253555281DADF0646A3BCBCA37C64647C55 +010A0002014204E703D5071E000D002400634040111414131A0F2201221340091A371300 +13060AAA3F0301031213400910371313001F101F201F031F1728500E600E700E030E0D2A +0E0F001F008F000300072A062FEDD45D39ED2F5DEDCD5D392F2BCD002F5DEDCD39392F2B +D45DCD12392FC531300114062322263533141633323635271406071523353E0135342623 +22060723353E0133321603D5B29897B2A2555253551237375C272822191C1E1402103C21 +42570646A3BCBCA37C64647C5B34431238650A2120191D080757060A45000002012504E7 +03F307DE000D0027005840100E17520F1E1F1E021E1B245220110111B8FFC04025090C37 +11006006700602060AAA3F0301031A291B0627290E0D2A0F001F008F000300072A062FED +D45DEDD4ED10D6ED002F5DEDDD5D39D62B71ED3CDD5DED3C313001140623222635331416 +33323635130E01232226272E0123220607233E01333216171E013332363703D5B29897B2 +A255525355C006865F35491C183A192B22058C05875F36491C163B192A24040646A3BCBC +A37C64647C019889902919162D3E4788912A19142E3E47000001020905110342068C0016 +00524035BF0301030606050C50501460147014031409900501C76005010504ADC005D005 +020540091037050511094011143709290F000100112FDD5DED2B12392F2B5DED002F5D5E +5D5ED45DED12392FC55D3130011406071523353E013534262322060723353E0133321603 +4242426E2F3026211F251803134926516605F8404E1544790C27271827090969060C5600 +00020136065403E1080100060020007D404A0702170202141D50200A010A1050076F1701 +0F1770170217010205400D1137050920039003A003B003045910032003C00303C003D003 +0231D003E003025003010F037003020320280700B8FFC040090E10370013281400042F33 +D6ED2F2BD6ED002F5D71725E71725E715ECD2B39392F5D713CEDDD71ED3C31305D012327 +07233733130E01232226272E0123220607233E01333216171E013332363703E1A9AFAEA5 +F8BBEC0B705025491C1B3E141D2806860A6F5227432122301A1B2B0506545959AD010052 +6B190D0D1A202D4E6F17101016232A0000020142064803D50801000D0011005A403E5010 +6010020A50FF03015F030103007F0601060F109F10026F10FF1002106F11010F11701102 +11590E690E720E030E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D002F5D +71DD5D71D45D3CDD7172ED5D313001140623222635331416333236353707233703D5AB9E +9EACA24B5D5A4D4FC681680738589899573058592FC9D8D800020142064803D50801000D +001100644033500E600E020A50FF03015F030103007F0601060F0E9F0E026F0EFF0E020E +6F11010F1170110211561066107D1003100E0D2A0EB8FFC0400F090D370E0F001F008F00 +0300072A062FEDD45D392BED2FCD5D002F5D71DD5D71D45D3CDD7172ED5D313001140623 +222635331416333236350723273303D5AB9E9EACA24B5D5A4D5681C6DF07385898995730 +58592F0FD80000020142064803D50801000D0024008E4062111414131A6F22010F227022 +02223F134F13021340111537130013060A5009900301B0030159700301310F033F037003 +CF0304031213400915371313501F601F701F03001F101F201F301F401F051F17C00E010E +0D2A0E0F001F008F000300072A062FEDD45D39ED2F5DCDCD5D71392F2BCD002F5D5E715E +5D715EEDCD39392F2B712F5D71CD12392FC5313001140623222635331416333236352714 +06071523353E013534262322060723353E0133321603D5AB9E9EACA24B5D5A4D2E2E2E4D +231F1C15191A0E020E321B364A0738589899573058592F612B380F2F54091E1817160805 +4905083900020142064803D50801000D0027009240111B2450DF1101110E17506F1E010F +1E011EB8FFC040520D10371E00060A50099003B00302F0030159200330034003C003D003 +E003066003700302C003D0030231A003B003025003E003020F033F03CF0303031A281B1B +0627280E0E0D2A0F001F008F000300072A062FEDD45DED3C10ED103C10ED002F5D71725E +5D71725E5D715EEDCD322F2B5D71ED3CDD71ED3C31300114062322263533141633323635 +370E01232226272E0123220607233E01333216171E013332363703D5AE9B9BAFA26C3C3C +6BA20B705025491C1B3E141D2806860A6F5227432122301A1B2B050706546A67572E2828 +2EFB526B190D0D1A202D4E6F17101016232A000201360668051008010006001D0088B900 +06FFF0401A0E103705100E1037BF0A010A0D0D0C400E10370C13500F1B011BB8FFC0403A +0D10371B0102030F0570050205050F0301030BADC00CD00C020C400910370C0C18104011 +143710290F07010750006000700003180000600401042F5D332FD45DDD5DED2B12392F2B +5DED002F5D332F5D1239392F2B5DEDC42B392FC55D3130012B2B01232707231333051406 +071523353E013534262322060723353E0133321603E19FB9B89BE4E3021342426E2F3026 +211F25180313492651660668CECE014944404E1544790C27271827090969060C5600FFFF +001AFE82055E05D10236002400000116024B2F00000AB602000D0E0500252B35FFFF0068 +FE82041D04780236004400000116024BBA00000F400A027F36010036370B00252B5D3500 +FFFF001A0000055E080102360024000001170256002F0175001A401202501C0102101C40 +1C701C03001C0B0500252B5D35005D35FFFF0068FFE1041D068C0236004400000116024A +BA000011400C025F457F45021D45340B00252B5D3500FFFF001A0000055E07ED02360024 +00000117024E002F01610011400B0302400F01000F0B0500252B5D353500FFFF0068FFE1 +04F4068C0236004400000116024EE0000013400D030240385038022938340B00252B5D35 +3500FFFF001A0000055E07ED0236002400000117024F002F01610011400B03020F0F0100 +0F0B0500252B5D353500FFFFFFE3FFE1041D068C0236004400000116024FE0000013400D +030240385038022938340B00252B5D353500FFFF001A0000055E08010236002400000116 +025C2F00001740110302400FA00FB00FC00F04000F0B0500252B5D353500FFFF0068FFE1 +04A0075202360044000001160250E0000013400D030240385038022938340B00252B5D35 +3500FFFF001A0000055E0801023600240000011602572F00000CB70302000F0B0500252B +3535FFFF0068FFE1041D07DE02360044000001160251E0000013400D0302403850380229 +38340B00252B5D353500FFFF001AFE82055E07ED023600240000003700D6002F01610116 +024B2F00001840110300141505002502400F01000F0B0500252B5D352B35FFFF0068FE82 +041D068C023600440000003600D6E0000116024BBA00001E4016037F3D01003D3E0B0025 +0240385038022938340B00252B5D352B5D35FFFF001A0000055E08010236002400000116 +02582F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236004400000116 +0252E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000055E08010236 +00240000011602592F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236 +0044000001160253E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000 +055E08010236002400000116025A2F00000CB7030200110B0500252B3535FFFF0068FFE1 +041D071E02360044000001160254E0000011400B0302403A01293A340B00252B5D353500 +FFFF001A0000055E08010236002400000116025B2F00000CB7030200110B0500252B3535 +FFFF0068FFE1041D07DE02360044000001160255E0000011400B0302403A01293A340B00 +252B5D353500FFFF001AFE82055E0801023600240000003700D9002F01750116024B2F00 +001D4013025011011103001B1C0500250200110B0500252B352B3500115D3500FFFF0068 +FE82041D068C023600440000003600D9DD000116024BBA0000184011037F44010044450B +002502293A340B00252B352B5D35FFFF00C8FE82049D05D10236002800000116024B2600 +000AB601000E0F0100252B35FFFF006AFE820460047C0236004800000116024BF900000A +B6021F22231218252B35FFFF00C80000049D08010236002800000117025600260175001C +401401501D0101001D201D501D601D04001D0C0203252B5D35005D35FFFF006AFFE60460 +068C0236004800000116024AF9000018B4026F310131B8FFC040090A1137323120120025 +2B2B5D35FFFF00C80000049D07C8023600280000011700D7002601750012400B01501901 +0100190C0203252B35005D35FFFF006AFFE604600653023600480000011600D7F900000A +B602002D201200252B35FFFF00C80000053A08010236002800000117024E002601750016 +400D0201501001020100100C0203252B3535005D3535FFFF006AFFE6050D068C02360048 +00000116024EF900000CB703021E24201200252B3535FFFF00290000049D080102360028 +00000117024F002601750016400D0201501001020100100C0203252B3535005D3535FFFF +FFFCFFE60460068C0236004800000116024FF900000CB703021E24201200252B3535FFFF +00C80000053608010236002800000116025C26000013400D0201101020100200100C0203 +252B5D353500FFFF006AFFE604B9075202360048000001160250F9000013400D03020024 +2024021E24201200252B5D353500FFFF00C80000049D0801023600280000011602572600 +000CB7020100100C0203252B3535FFFF006AFFE6046007DE02360048000001160251F900 +000CB703021E24201200252B3535FFFF00C8FE82049D0801023600280000003700D60026 +01750116024B2600001D40130110501001020015160203250100100C0203252B352B3500 +5D113500FFFF006AFE820460068C023600480000003600D6F9000116024BF9000014400E +031E292A120025021E24201200252B352B35FFFF0089000002D508010236002C00000117 +0256FF2401750016400E01501101015011010011100409252B5D35005D35FFFF00960000 +01CF068C023600D500000117024AFE8D0000000AB6010009080203252B35FFFF0089FE82 +02D505D10236002C00000117024BFF240000000AB601000E0F0409252B35FFFF00AFFE82 +018305DB0236004C00000117024BFE8E0000000AB602000A0B0203252B35FFFF0073FE82 +05DA05F00236003200000117024B009B0000000AB6020026270F03252B35FFFF006AFE82 +0471047C0236005200000116024BE200000AB602001A1B0600252B35FFFF0073FFE105DA +080102360032000001170256009601750022400B0250340102503470340234B8FFC04009 +090B370034240F03252B2B5D35005D35FFFF006AFFE10471068C0236005200000116024A +E200000F400A02701D01001D1C0600252B5D3500FFFF0073FFE105DA0801023600320000 +0117024E00960175001E401403025028010302202850288028030028240F03252B5D3535 +005D3535FFFF006AFFE104F6068C0236005200000116024EE200001940130302001C201C +501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA08010236003200000117 +024F009601750016400D030250280103020028240F03252B3535005D3535FFFFFFE5FFE1 +0471068C0236005200000116024FE200000CB70302001C180600252B3535FFFF0073FFE1 +05DA08010236003200000117025C009600000015400F0302202850288028030028240F03 +252B5D353500FFFF006AFFE104A2075202360052000001160250E200001940130302001C +201C501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA0801023600320000 +01170257009600000015400F0302202850288028030028240F03252B5D353500FFFF006A +FFE1047107DE02360052000001160251E200001940130302001C201C501C801CB01C0500 +1C180600252B5D353500FFFF0073FE8205DA0801023600320000003700D6009601750117 +024B00960000001D4013025028012803002D2E0F0325020028240F03252B352B3500115D +3500FFFF006AFE820471068C023600520000003600D6E2000116024BE2000014400E0300 +212206002502001C180600252B352B35FFFF0073FFE1068B08010236024600000117008D +007801750014400D025036603602020036360F03252B35005D35FFFF006AFFE104C3068C +0236024700000116008DE200000AB602002B2B0600252B35FFFF0073FFE1068B08010236 +024600000117004300AA0175001A40120250366036020250367036020036360F03252B5D +35005D35FFFF006AFFE104C3068C02360247000001160043E2000011400C02502B602B02 +002B2B0600252B5D3500FFFF0073FFE1068B080102360246000001170256008F01750012 +400B02503A0102003A390F03252B35005D35FFFF006AFFE104C3068C0236024700000116 +024AE200000AB602002F2E0600252B35FFFF0073FFE1068B07C8023602460000011700D7 +008B01750012400B02504201020042350F03252B35005D35FFFF006AFFE104C306530236 +02470000011600D7C400001540100210372037403750370400372A0600252B5D3500FFFF +0073FE82068B05F00236024600000117024B009A0000000AB6020037380F03252B35FFFF +006AFE8204C305840236024700000116024BE200000AB602002C2D0600252B35FFFF00B2 +FE82052905D10236003800000116024B6200000AB6010020210C00252B35FFFF00B1FE82 +0457045D0236005800000116024BFD00000AB60100191A0916252B35FFFF00B2FFE10529 +080102360038000001170256006201750012400B01502301010023220C00252B35005D35 +FFFF00B1FFE10457068C0236005800000116024AFD00000AB601001C1B0916252B35FFFF +00B2FFE1067508010236024800000117008D007C01750014400D01502E602E0201002E2D +0C00252B35005D35FFFF00B1FFE105A5068C0236024900000116008DEE00001840100160 +28010130284028020028290900252B5D35005D35FFFF00B2FFE106750801023602480000 +0117004300AA0175001C401401502D602D0201402D602D802D03002D2D0C00252B5D3500 +5D35FFFF00B1FFE105A5068C023602490000011600430200001840100160270101502760 +27020027270800252B5D35005D35FFFF00B2FFE106750801023602480000011702560062 +01750012400B01503101010031300C00252B35005D35FFFF00B1FFE105A5068C02360249 +00000116024AFD00000AB601002B2A0800252B35FFFF00B2FFE1067507BE023602480000 +011700D70062016B000AB60100392C0C00252B35FFFF00B1FFE105A50653023602490000 +011600D7FD00000AB6010033260800252B35FFFF00B2FE82067506F80236024800000116 +024B6200000AB601002E2F0D00252B35FFFF00B1FE8205A505840236024900000116024B +FD00000AB6010028290800252B35FFFF0006000004E608010236003C000001170043FFE4 +0175001B400A01500A600A0201500A01B8FFD3B40A0A0401252B5D35005D3500FFFF003D +FE64047F068C0236005C000001160043DD000013B5016009700902B8FFDDB40909040025 +2B5D3500FFFF0006FE8204E605D10236003C00000116024BEC00000AB601000A09040125 +2B35FFFF003DFE64047F045D0236005C00000117024B010400000012400D010A0F0A2F0A +4F0A6F0A7F0A055D1135FFFF0006000004E608010236003C000001170256FFEC01750018 +401001500E0101C00ED00E02000E0D0302252B5D35005D35FFFF003DFE64047F068C0236 +005C00000116024AC900000F400A01500D01000D0C0400252B5D3500FFFF0006000004E6 +07C80236003C0000011700D7FFEC01750012400B01501601010016090500252B35005D35 +FFFF003DFE64047F06530236005C0000011600D7DD00000AB6010015080400252B350003 +006CFEBD04FB0614001B0028002C007E40523B05380C3C2232243E284B054A0C4E224524 +4F285908690870120D2AB52B0114511A17171018011304072041100403082642070A2C2B +2C2B010A1600881617131C041A1A01922E1F2E3F2E02231B010A852D10F632ED5D10F632 +ED32323232ED2F111239392F2F003FED3F3FED1239393F12392F3CFD3C2FED31305D0123 +1123350E01232202113436373E0133321617352135213533153301112E01232206151416 +3332361321352104FBB8BC4DAD6EC6ED524444B66059864CFE95016BBCB8FE8C4F73499C +B2879750A4EAFCB4034C04F4FB0C754252012E01118EDB4D4C4F2427CE869A9AFB990279 +2218D6CCC3CD47FDE286FFFF00ED051D042C0653001600D700000002008A009104900498 +0023002F004D40332D290B0802231D1A141108172F0501052729050F1701170F311F3102 +24290B0802231D1A1411080E202001202A29200F0E010E2F5D33ED2F5D121739ED5D002F +5D33ED2F5D121739ED31300107270E01232226270727372E01353436372737173E013332 +16173717071E011514060727342623220615141633323604906EEC2C4A342E5724EC6DE9 +1718161AEA6FEB24572D2C5825EA71EB1818191765694B496B694B496B01016EEA1A1619 +17EC71EA25592B34492BED6EEB17191817EA6DED2653302D5824A949706E4B4A6F6D0000 +0002000000000000FF4C00780000000000000000000000000000000000000000037D0000 +01020103010401050106010701080109010A010B010C010D010E010F0110011101120113 +011401150116011701180119011A011B011C011D011E011F012001210122012301240125 +0126012701280129012A012B012C012D012E012F01300131013201330134013501360137 +01380139013A013B013C013D013E013F0140014101420143014401450146014701480149 +014A014B014C014D014E014F0150015101520153015401550156015701580159015A015B +015C015D015E015F0160016101620163016401650166016701680169016A016B016C016D +016E016F0170017101720173017401750176017701780179017A017B017C017D017E017F +0180018101820183018401850186018701880189018A018B018C018D018E018F01900191 +01920193019401950196019701980199019A019B019C019D019E019F01A001A101A201A3 +01A401A501A601A701A801A901AA01AB01AC01AD01AE01AF01B001B101B201B301B401B5 +01B601B701B801B901BA01BB01BC01BD01BE01BF01C001C101C201C301C401C501C601C7 +01C801C901CA01CB01CC01CD01CE01CF01D001D101D201D301D401D501D601D701D801D9 +01DA01DB01DC01DD01DE01DF01E001E101E201E301E401E501E601E701E801E901EA01EB +01EC01ED01EE01EF01F001F101F201F301F401F501F601F701F801F901FA01FB01FC01FD +01FE01FF0200020102020203020402050206020702080209020A020B020C020D020E020F +0210021102120213021402150216021702180219021A021B021C021D021E021F02200221 +02220223022402250226022702280229022A022B022C022D022E022F0230023102320233 +023402350236023702380239023A023B023C023D023E023F024002410242024302440245 +0246024702480249024A024B024C024D024E024F02500251025202530254025502560257 +02580259025A025B025C025D025E025F0260026102620263026402650266026702680269 +026A026B026C026D026E026F0270027102720273027402750276027702780279027A027B +027C027D027E027F0280028102820283028402850286028702880289028A028B028C028D +028E028F0290029102920293029402950296029702980299029A029B029C029D029E029F +02A002A102A202A302A402A502A602A702A802A902AA02AB02AC02AD02AE02AF02B002B1 +02B202B302B402B502B602B702B802B902BA02BB02BC02BD02BE02BF02C002C102C202C3 +02C402C502C602C702C802C902CA02CB02CC02CD02CE02CF02D002D102D202D302D402D5 +02D602D702D802D902DA02DB02DC02DD02DE02DF02E002E102E202E302E402E502E602E7 +02E802E902EA02EB02EC02ED02EE02EF02F002F102F202F302F402F502F602F702F802F9 +02FA02FB02FC02FD02FE02FF0300030103020303030403050306030703080309030A030B +030C030D030E030F0310031103120313031403150316031703180319031A031B031C031D +031E031F0320032103220323032403250326032703280329032A032B032C032D032E032F +0330033103320333033403350336033703380339033A033B033C033D033E033F03400341 +03420343034403450346034703480349034A034B034C034D034E034F0350035103520353 +035403550356035703580359035A035B035C035D035E035F036003610362036303640365 +0366036703680369036A036B036C036D036E036F03700371037203730374037503760377 +03780379037A037B037C037D037E037F0380038103820383038403850386038703880389 +038A038B038C038D038E038F0390039103920393039403950396039703980399039A039B +039C039D039E039F03A003A103A203A303A403A503A603A703A803A903AA03AB03AC03AD +03AE03AF03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE03CF03D003D1 +03D203D303D403D503D603D703D803D903DA03DB03DC03DD03DE03DF03E003E103E203E3 +03E403E503E603E703E803E903EA03EB03EC03ED03EE03EF03F003F103F203F303F403F5 +03F603F703F803F903FA03FB03FC03FD03FE03FF04000401040204030404040504060407 +04080409040A040B040C040D040E040F0410041104120413041404150416041704180419 +041A041B041C041D041E041F0420042104220423042404250426042704280429042A042B +042C042D042E042F0430043104320433043404350436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D044E044F +0450045104520453045404550456045704580459045A045B045C045D045E045F04600461 +04620463046404650466046704680469046A046B046C046D046E046F0470047104720473 +047404750476047704780479047A047B047C047D052E6E756C6C106E6F6E6D61726B696E +6772657475726E057370616365066578636C616D0871756F746564626C0A6E756D626572 +7369676E06646F6C6C61720770657263656E7409616D70657273616E640B71756F746573 +696E676C6509706172656E6C6566740A706172656E726967687408617374657269736B04 +706C757305636F6D6D610668797068656E06706572696F6405736C617368047A65726F03 +6F6E650374776F05746872656504666F757204666976650373697805736576656E056569 +676874046E696E6505636F6C6F6E0973656D69636F6C6F6E046C65737305657175616C07 +67726561746572087175657374696F6E0261740141014201430144014501460147014801 +49014A014B014C014D014E014F0150015101520153015401550156015701580159015A0B +627261636B65746C656674096261636B736C6173680C627261636B657472696768740B61 +7363696963697263756D0A756E64657273636F7265056772617665016101620163016401 +650166016701680169016A016B016C016D016E016F017001710172017301740175017601 +7701780179017A0962726163656C656674036261720A627261636572696768740A617363 +696974696C646509416469657265736973054172696E670843636564696C6C6106456163 +757465064E74696C6465094F646965726573697309556469657265736973066161637574 +65066167726176650B6163697263756D666C657809616469657265736973066174696C64 +65056172696E670863636564696C6C6106656163757465066567726176650B6563697263 +756D666C65780965646965726573697306696163757465066967726176650B6963697263 +756D666C657809696469657265736973066E74696C6465066F6163757465066F67726176 +650B6F63697263756D666C6578096F6469657265736973066F74696C6465067561637574 +65067567726176650B7563697263756D666C657809756469657265736973066461676765 +72066465677265650463656E7408737465726C696E670773656374696F6E0662756C6C65 +74097061726167726170680A6765726D616E64626C730A7265676973746572656409636F +707972696768740974726164656D61726B056163757465086469657265736973086E6F74 +657175616C024145064F736C61736808696E66696E69747909706C75736D696E7573096C +657373657175616C0C67726561746572657175616C0379656E036D75310B706172746961 +6C646966660973756D6D6174696F6E0770726F647563740370693108696E74656772616C +0B6F726466656D696E696E650C6F72646D617363756C696E65034F686D026165066F736C +6173680C7175657374696F6E646F776E0A6578636C616D646F776E0A6C6F676963616C6E +6F74077261646963616C06666C6F72696E0B617070726F78657175616C09696E6372656D +656E740D6775696C6C656D6F746C6566740E6775696C6C656D6F74726967687408656C6C +697073697306416772617665064174696C6465064F74696C6465024F45026F6506656E64 +61736806656D646173680C71756F746564626C6C6566740D71756F746564626C72696768 +740971756F74656C6566740A71756F7465726967687406646976696465076C6F7A656E67 +650979646965726573697309596469657265736973086672616374696F6E044575726F0D +6775696C73696E676C6C6566740E6775696C73696E676C726967687402666902666C0964 +616767657264626C0E706572696F6463656E74657265640E71756F746573696E676C6261 +73650C71756F746564626C626173650B70657274686F7573616E640B4163697263756D66 +6C65780B4563697263756D666C6578064161637574650945646965726573697306456772 +617665064961637574650B4963697263756D666C65780949646965726573697306496772 +617665064F61637574650B4F63697263756D666C6578064F677261766506556163757465 +0B5563697263756D666C65780655677261766508646F746C657373690A63697263756D66 +6C65780574696C6465066D6163726F6E05627265766509646F74616363656E740472696E +6707636564696C6C610C68756E676172756D6C617574066F676F6E656B056361726F6E06 +4C736C617368066C736C61736806536361726F6E06736361726F6E065A6361726F6E067A +6361726F6E0962726F6B656E626172034574680365746806596163757465067961637574 +650554686F726E0574686F726E056D696E7573086D756C7469706C790B6F6E6573757065 +72696F720B74776F7375706572696F720D74687265657375706572696F72076F6E656861 +6C660A6F6E65717561727465720D74687265657175617274657273056672616E63064762 +72657665066762726576650449646F740853636564696C6C610873636564696C6C610643 +61637574650663616375746506436361726F6E06636361726F6E07646D6163726F6E096F +76657273636F7265066D6964646F74064162726576650661627265766507416F676F6E65 +6B07616F676F6E656B06446361726F6E06646361726F6E0644736C61736807456F676F6E +656B07656F676F6E656B06456361726F6E06656361726F6E064C6163757465066C616375 +7465064C6361726F6E066C6361726F6E044C646F74046C646F74064E6163757465066E61 +63757465064E6361726F6E066E6361726F6E094F64626C6163757465096F64626C616375 +7465065261637574650672616375746506526361726F6E06726361726F6E065361637574 +65067361637574650854636564696C6C610874636564696C6C6106546361726F6E067463 +61726F6E055572696E67057572696E67095564626C6163757465097564626C6163757465 +065A6163757465067A6163757465045A646F74047A646F740547616D6D61055468657461 +0350686905616C7068610564656C746107657073696C6F6E057369676D61037461750370 +68690D756E64657273636F726564626C096578636C616D64626C096E7375706572696F72 +0670657365746102494A02696A0B6E61706F7374726F706865066D696E75746506736563 +6F6E64096166696936313234380961666969363132383906483232303733064831383534 +3306483138353531064831383533330A6F70656E62756C6C657407416D6163726F6E0761 +6D6163726F6E0B4363697263756D666C65780B6363697263756D666C65780443646F7404 +63646F7407456D6163726F6E07656D6163726F6E06456272657665066562726576650445 +646F740465646F740B4763697263756D666C65780B6763697263756D666C65780447646F +740467646F740847636564696C6C610867636564696C6C610B4863697263756D666C6578 +0B6863697263756D666C657804486261720468626172064974696C6465066974696C6465 +07496D6163726F6E07696D6163726F6E064962726576650669627265766507496F676F6E +656B07696F676F6E656B0B4A63697263756D666C65780B6A63697263756D666C6578084B +636564696C6C61086B636564696C6C610C6B677265656E6C616E646963084C636564696C +6C61086C636564696C6C61084E636564696C6C61086E636564696C6C6103456E6703656E +67074F6D6163726F6E076F6D6163726F6E064F6272657665066F62726576650852636564 +696C6C610872636564696C6C610B5363697263756D666C65780B7363697263756D666C65 +7804546261720474626172065574696C6465067574696C646507556D6163726F6E07756D +6163726F6E065562726576650675627265766507556F676F6E656B07756F676F6E656B0B +5763697263756D666C65780B7763697263756D666C65780B5963697263756D666C65780B +7963697263756D666C6578056C6F6E67730A4172696E6761637574650A6172696E676163 +757465074145616375746507616561637574650B4F736C61736861637574650B6F736C61 +7368616375746509616E6F74656C65696106576772617665067767726176650657616375 +746506776163757465095764696572657369730977646965726573697306596772617665 +067967726176650D71756F74657265766572736564097261646963616C65780961666969 +303839343109657374696D61746564096F6E656569676874680C74687265656569676874 +68730B66697665656967687468730C736576656E656967687468730B636F6D6D61616363 +656E7410756E646572636F6D6D61616363656E7405746F6E6F730D646965726573697374 +6F6E6F730A416C706861746F6E6F730C457073696C6F6E746F6E6F7308457461746F6E6F +7309496F7461746F6E6F730C4F6D6963726F6E746F6E6F730C557073696C6F6E746F6E6F +730A4F6D656761746F6E6F7311696F74616469657265736973746F6E6F7305416C706861 +04426574610544656C746107457073696C6F6E045A6574610345746104496F7461054B61 +707061064C616D626461024D75024E75025869074F6D6963726F6E0250690352686F0553 +69676D610354617507557073696C6F6E0343686903507369054F6D6567610C496F746164 +696572657369730F557073696C6F6E64696572657369730A616C706861746F6E6F730C65 +7073696C6F6E746F6E6F7308657461746F6E6F7309696F7461746F6E6F7314757073696C +6F6E6469657265736973746F6E6F7304626574610567616D6D61047A6574610365746105 +746865746104696F7461056B61707061066C616D626461026D75026E75027869076F6D69 +63726F6E0372686F067369676D613107757073696C6F6E0363686903707369056F6D6567 +610C696F746164696572657369730F757073696C6F6E64696572657369730C6F6D696372 +6F6E746F6E6F730C757073696C6F6E746F6E6F730A6F6D656761746F6E6F730961666969 +313030323309616669693130303531096166696931303035320961666969313030353309 +616669693130303534096166696931303035350961666969313030353609616669693130 +303537096166696931303035380961666969313030353909616669693130303630096166 +696931303036310961666969313030363209616669693130313435096166696931303031 +370961666969313030313809616669693130303139096166696931303032300961666969 +313030323109616669693130303232096166696931303032340961666969313030323509 +616669693130303236096166696931303032370961666969313030323809616669693130 +303239096166696931303033300961666969313030333109616669693130303332096166 +696931303033330961666969313030333409616669693130303335096166696931303033 +360961666969313030333709616669693130303338096166696931303033390961666969 +313030343009616669693130303431096166696931303034320961666969313030343309 +616669693130303434096166696931303034350961666969313030343609616669693130 +303437096166696931303034380961666969313030343909616669693130303635096166 +696931303036360961666969313030363709616669693130303638096166696931303036 +390961666969313030373009616669693130303732096166696931303037330961666969 +313030373409616669693130303735096166696931303037360961666969313030373709 +616669693130303738096166696931303037390961666969313030383009616669693130 +303831096166696931303038320961666969313030383309616669693130303834096166 +696931303038350961666969313030383609616669693130303837096166696931303038 +380961666969313030383909616669693130303930096166696931303039310961666969 +313030393209616669693130303933096166696931303039340961666969313030393509 +616669693130303936096166696931303039370961666969313030373109616669693130 +303939096166696931303130300961666969313031303109616669693130313032096166 +696931303130330961666969313031303409616669693130313035096166696931303130 +360961666969313031303709616669693130313038096166696931303130390961666969 +313031313009616669693130313933096166696931303035300961666969313030393809 +616669693030323038096166696936313335320270690C6F6E656E756D657261746F720C +74776F6E756D657261746F720E74687265656E756D657261746F720D666F75726E756D65 +7261746F720D666976656E756D657261746F720E736576656E6E756D657261746F720E65 +696768746E756D657261746F7210446F6E74436F6D707265737348544D5808676C797068 +35373908676C79706835383008676C797068353831054F686F726E056F686F726E055568 +6F726E0575686F726E0D686F6F6B61626F7665636F6D620C646F7462656C6F77636F6D62 +096772617665636F6D62096163757465636F6D6208676C79706835393008676C79706835 +393108676C79706835393208676C79706835393308676C79706835393408676C79706835 +393508676C79706835393608676C79706835393708676C79706835393808676C79706835 +393908676C79706836303008676C79706836303108676C79706836303208676C79706836 +303308676C7970683630340941646F7462656C6F770961646F7462656C6F770A41686F6F +6B61626F76650A61686F6F6B61626F7665104163697263756D666C657861637574651061 +63697263756D666C65786163757465104163697263756D666C6578677261766510616369 +7263756D666C65786772617665144163697263756D666C6578686F6F6B61626F76651461 +63697263756D666C6578686F6F6B61626F7665104163697263756D666C657874696C6465 +106163697263756D666C657874696C6465134163697263756D666C6578646F7462656C6F +77136163697263756D666C6578646F7462656C6F770B41627265766561637574650B6162 +7265766561637574650B41627265766567726176650B61627265766567726176650F4162 +72657665686F6F6B61626F76650F616272657665686F6F6B61626F76650B416272657665 +74696C64650B61627265766574696C64650E416272657665646F7462656C6F770E616272 +657665646F7462656C6F770945646F7462656C6F770965646F7462656C6F770A45686F6F +6B61626F76650A65686F6F6B61626F7665064574696C6465066574696C64651045636972 +63756D666C65786163757465106563697263756D666C6578616375746510456369726375 +6D666C65786772617665106563697263756D666C65786772617665144563697263756D66 +6C6578686F6F6B61626F7665146563697263756D666C6578686F6F6B61626F7665104563 +697263756D666C657874696C6465106563697263756D666C657874696C64651345636972 +63756D666C6578646F7462656C6F77136563697263756D666C6578646F7462656C6F770A +49686F6F6B61626F76650A69686F6F6B61626F76650949646F7462656C6F770969646F74 +62656C6F7708676C79706836343908676C79706836353008676C79706836353108676C79 +70683635320573686576610A68617461667365676F6C0A686174616670617461680B6861 +74616671616D617473056869726971057473657265057365676F6C057061746168067161 +6D61747305686F6C616D0671756275747306646167657368056D65746567056D61716166 +0472616665057061736571077368696E646F740673696E646F7408736F66706173757104 +616C6566036265740567696D656C0564616C657402686503766176057A6179696E036865 +740374657403796F640866696E616C6B6166036B6166056C616D65640866696E616C6D65 +6D036D656D0866696E616C6E756E036E756E0673616D656B68046179696E0766696E616C +70650270650A66696E616C747361646905747361646903716F660472657368047368696E +0374617609646F75626C6576617606766176796F6409646F75626C65796F640667657265 +73680967657273686179696D0D6E657773686571656C7369676E0A7661767368696E646F +740D66696E616C6B616673686576610E66696E616C6B616671616D6174730A6C616D6564 +686F6C616D106C616D6564686F6C616D64616765736807616C746179696E0B7368696E73 +68696E646F740A7368696E73696E646F74117368696E6461676573687368696E646F7410 +7368696E64616765736873696E646F7409616C656670617461680A616C656671616D6174 +7309616C65666D61706971096265746461676573680B67696D656C6461676573680B6461 +6C6574646167657368086865646167657368097661766461676573680B7A6179696E6461 +676573680974657464616765736809796F646461676573680E66696E616C6B6166646167 +657368096B61666461676573680B6C616D6564646167657368096D656D64616765736809 +6E756E6461676573680C73616D656B686461676573680D66696E616C7065646167657368 +0870656461676573680B747361646964616765736809716F666461676573680A72657368 +6461676573680A7368696E64616765736808746176646167657308766176686F6C616D07 +62657472616665076B6166726166650670657261666509616C65666C616D6564127A6572 +6F77696474686E6F6E6A6F696E65720F7A65726F77696474686A6F696E65720F6C656674 +746F72696768746D61726B0F7269676874746F6C6566746D61726B096166696935373338 +380961666969353734303309616669693537343037096166696935373430390961666969 +353734343009616669693537343531096166696935373435320961666969353734353309 +616669693537343534096166696935373435350961666969353734353609616669693537 +343537096166696935373435380961666969353733393209616669693537333933096166 +696935373339340961666969353733393509616669693537333936096166696935373339 +370961666969353733393809616669693537333939096166696935373430300961666969 +353734303109616669693537333831096166696935373436310961666969363331363709 +616669693537343539096166696935373534330961666969353735333409616669693537 +343934096166696936323834330961666969363238343409616669693632383435096166 +696936343234300961666969363432343109616669693633393534096166696935373338 +320961666969363432343209616669693632383831096166696935373530340961666969 +353733363909616669693537333730096166696935373337310961666969353733373209 +616669693537333733096166696935373337340961666969353733373509616669693537 +333931096166696935373437310961666969353734363009616669693532323538096166 +696935373530360961666969363239353809616669693632393536096166696935323935 +370961666969353735303509616669693632383839096166696936323838370961666969 +363238383809616669693537353037096166696936323936310961666969363239353909 +616669693632393630096166696935373530380961666969363239363209616669693537 +353637096166696936323936340961666969353233303509616669693532333036096166 +696935373530390961666969363239363709616669693632393635096166696936323936 +360961666969353735353509616669693532333634096166696936333735330961666969 +363337353409616669693633373539096166696936333736330961666969363337393509 +616669693632383931096166696936333830380961666969363239333809616669693633 +383130096166696936323934320961666969363239343709616669693633383133096166 +696936333832330961666969363338323409616669693633383333096166696936333834 +340961666969363238383209616669693632383833096166696936323838340961666969 +363238383509616669693632383836094F646F7462656C6F77096F646F7462656C6F770A +4F686F6F6B61626F76650A6F686F6F6B61626F7665104F63697263756D666C6578616375 +7465106F63697263756D666C65786163757465104F63697263756D666C65786772617665 +106F63697263756D666C65786772617665144F63697263756D666C6578686F6F6B61626F +7665146F63697263756D666C6578686F6F6B61626F7665104F63697263756D666C657874 +696C6465106F63697263756D666C657874696C6465134F63697263756D666C6578646F74 +62656C6F77136F63697263756D666C6578646F7462656C6F770A4F686F726E6163757465 +0A6F686F726E61637574650A4F686F726E67726176650A6F686F726E67726176650E4F68 +6F726E686F6F6B61626F76650E6F686F726E686F6F6B61626F76650A4F686F726E74696C +64650A6F686F726E74696C64650D4F686F726E646F7462656C6F770D6F686F726E646F74 +62656C6F770955646F7462656C6F770975646F7462656C6F770A55686F6F6B61626F7665> +<0A75686F6F6B61626F76650A55686F726E61637574650A75686F726E61637574650A5568 +6F726E67726176650A75686F726E67726176650E55686F726E686F6F6B61626F76650E75 +686F726E686F6F6B61626F76650A55686F726E74696C64650A75686F726E74696C64650D +55686F726E646F7462656C6F770D75686F726E646F7462656C6F7708676C797068383832 +08676C7970683838330959646F7462656C6F770979646F7462656C6F770A59686F6F6B61 +626F76650A79686F6F6B61626F7665065974696C6465067974696C646504646F6E670974 +696C6465636F6D620863757272656E63790000000000000100000C92000102160C000009 +0084000400B4FF9C000400B6FF9C000A0024FF9C000A0090FF9C000F00B4FF2E000F00B6 +FF2E00100024FFCE0010002CFFE20010002DFF9C00100036FFEC00100037FF6A00100039 +FFCE0010003AFFCE0010003BFFB00010003CFF740010003DFFE200100044FFEC00100059 +FFD80010005AFFEC0010005BFFCE0010005CFFD80010005DFFD800100090FFCE001000A0 +FFEC0011000FFF7E00110010FF60001100B1FF88001100B2FF88001100B4FF2E001100B6 +FF2E001D00B2FF7400240010FFCE00240036FFF600240037FF8800240038FFF600240039 +FFC40024003AFFCE0024003CFFB000240057FFEC00240058FFF600240059FFCE0024005A +FFE20024005CFFCE002400B1FFCE002400B2FFCE002400B3FFCE002400B4FF88002400B5 +FFCE002400B6FF880025000FFFEC00250010000A00250011FFEC00250037FFC4002500AB +FFEC002500B1000A002500B2000A00260010FFCE002600AFFFE7002600B1FFCE002600B2 +FFCE0027000FFFCE00270011FFCE00270037FFCE0027003AFFEC0027003BFFF60027003C +FFEC0027003DFFEC002700ABFFCE0029000FFED400290011FED40029001DFFC40029001E +FFC400290022003C00290024FF9C00290037001E00290044FF9C00290048FFCE00290052 +FFCE00290090FF92002900A0FF9C002900A1FFCE002900ABFED4002900B0FFCE002C0010 +FFE2002C00B1FFE2002C00B2FFE2002D000FFFEC002D0011FFEC002D0024FFF6002D0090 +FFF6002D00ABFFEC002E0010FF92002E0032FFEC002E0044FFC4002E0048FFBA002E0052 +FFBA002E0058FFCE002E0059FFB0002E005AFFBA002E005CFFB0002E0091FFEC002E00A0 +FFC4002E00A1FFBA002E00AFFFEC002E00B0FFBA002E00B1FF92002E00B2FF92002F000A +FF88002F0010FF60002F0026FFEC002F002AFFEC002F002D0064002F0032FFEC002F0037 +FF56002F0039FF92002F003AFF9C002F003CFF60002F0059FF92002F005CFF92002F0064 +FFEC002F0091FFEC002F00AFFFEC002F00B1FF60002F00B2FF60002F00B4FF60002F00B6 +FF600032000FFFE200320011FFE200320037FFCE0032003BFFF60032003CFFEC0032003D +FFEC003200ABFFE20033000FFED400330011FED400330024FFCE0033003C001400330044 +FFCE00330048FFCE00330052FFCE00330090FFBA003300A0FFCE003300A1FFCE003300AB +FED4003300B0FFCE0034000FFFE200340011FFE2003400ABFFE200350010FF9C00350037 +FFC40035003CFFEC00350044FFD800350048FFCE00350052FFCE00350058FFEC0035005C +FFC9003500A0FFCE003500A1FFCE003500B0FFC4003500B1FF9C003500B2FF9C003500B4 +FFBA003500B6FFBA0036000FFFEC00360011FFEC00360024FFEC00360036FFEA00360059 +FFE20036005AFFEC0036005CFFE200360090FFEC003600ABFFEC0037000FFEDE00370010 +FF6A00370011FEDE0037001DFF380037001EFF3800370022003C00370024FF8800370026 +FFD80037002AFFD800370032FFCE00370036FFF400370037FFBA00370044FF1000370046 +FF2400370048FF240037004AFF2E00370052FF2400370055FF3800370056FF4C00370058 +FF3800370059FF380037005AFF380037005CFF380037005DFF5600370064FFD800370090 +FF7E00370091FFCE003700A0FF10003700A1FF24003700ABFEDE003700AFFFCE003700B0 +FF24003700B1FF6A003700B2FF6A0038000FFFEC00380011FFEC00380024FFF600380090 +FFEC003800ABFFEC0039000FFEDE00390010FFCE00390011FEDE0039001DFFB00039001E +FFB000390024FFC400390044FF9C00390048FF9C00390052FF9C00390058FFC40039005C +FFBF00390090FFBA003900A0FF9C003900A1FF9C003900ABFEDE003900B0FF9C003900B1 +FFCE003900B2FFCE003A000FFEDE003A0010FFCE003A0011FF24003A001DFFB0003A001E +FFB0003A0024FFCE003A0044FF9C003A0048FF9C003A0052FF9C003A0055FFC4003A0058 +FFC4003A005CFFBF003A0090FFC4003A00A0FF9C003A00A1FF9C003A00ABFF24003A00B0 +FF9C003A00B1FFCE003A00B2FFCE003B0010FFB0003B0026FFF6003B002AFFF6003B0032 +FFF6003B0044FFCE003B0048FFC4003B0052FFC4003B0058FFE2003B005CFFB0003B0064 +FFF6003B0091FFF6003B00A0FFCE003B00A1FFC4003B00AFFFF6003B00B0FFC4003B00B1 +FFB0003B00B2FFB0003C000FFEDE003C0010FF74003C0011FEDE003C001DFF38003C001E +FF38003C0024FFB0003C0032FFEC003C0044FF74003C0047FF88003C0048FF7E003C004A +FF7E003C0050FF9C003C0051FF9C003C0052FF7E003C0053FF9C003C0054FF7E003C0055 +FF9C003C0056FF92003C0058FF92003C0059FF9C003C0090FFB0003C0091FFEC003C00A0 +FF74003C00A1FF7E003C00ABFEDE003C00AFFFEC003C00B0FF7E003C00B1FF74003C00B2 +FF74003D0010FFC4003D0026FFEC003D002AFFEC003D0032FFEC003D003DFFF6003D0044 +FFCE003D0048FFC4003D0052FFC4003D005AFFD8003D005CFFBF003D0064FFEC003D0091 +FFEC003D00A0FFCE003D00A1FFC4003D00AFFFEC003D00B0FFC4003D00B1FFCE003D00B2 +FFCE00440059FFF00044005AFFF60044005CFFF00045000FFFE200450011FFEC0045005C +FFFB004500ABFFEC00460010FFEC00460037FFC4004600B1FFEC004600B2FFEC00480037 +FF7400490005003C0049000A003C0049000C00640049000D00320049000FFF7E00490010 +FFCE00490011FF8800490022006E0049003F00640049004000640049005CFFF600490060 +0064004900ABFF88004900B1FFCE004900B2FFCE004900B40032004900B60032004B0059 +FFEC004B005AFFF6004B005CFFEC004E0010FF9C004E0048FFEC004E0052FFEC004E00A1 +FFEC004E00B0FFEC004E00B1FF9C004E00B2FF9C00500059FFEC0050005AFFF60050005C +FFEC00510059FFEC0051005AFFF60051005CFFEC0052000FFFE200520011FFEC00520059 +FFF10052005BFFEC0052005CFFF1005200ABFFEC0053000FFFE200530011FFEC0053005C +FFFB005300ABFFEC0055000FFEDE00550010FFEC00550011FEDE00550044FFDC005500A0 +FFD8005500ABFEDE005500B1FFEC005500B2FFEC005500B4001E005500B6001E00570010 +FFD80057005CFFF6005700B1FFD8005700B2FFD8005700B40014005700B600140059000F +FF4C00590010FFD800590011FF4C00590044FFD800590048FFEE00590052FFEE005900A0 +FFD8005900A1FFEE005900ABFF4C005900B0FFF1005900B1FFD8005900B2FFD8005A000F +FFBA005A0010FFEC005A0011FFBA005A0044FFEC005A00A0FFEC005A00ABFFBA005A00B1 +FFEC005A00B2FFEC005B0010FFCE005B0046FFEC005B0047FFF6005B0048FFE8005B004A +FFF6005B0052FFE8005B006FFFEC005B00A1FFE8005B00B0FFEC005B00B1FFCE005B00B2 +FFCE005C000FFF42005C0010FFD8005C0011FF42005C0044FFD8005C0046FFEE005C0047 +FFF6005C0048FFEE005C004AFFF6005C0052FFEE005C0054FFF6005C006FFFEE005C00A0 +FFD8005C00A1FFEE005C00ABFF4C005C00B0FFF1005C00B1FFD8005C00B2FFD8005D0010 +FFEC005D0046FFF6005D0047FFF6005D0048FFF4005D004AFFF6005D0052FFF4005D0054 +FFF6005D006FFFF6005D00A1FFF4005D00B1FFEC005D00B2FFEC00640010FFCE006400AF +FFE7006400B1FFCE006400B2FFCE006F0010FFEC006F00B1FFEC006F00B2FFEC0091000F +FFE200910011FFE200910037FFCE0091003BFFF60091003CFFEC0091003DFFEC009100AB +FFE200A1000FFFE200A10011FFEC00A10059FFF100A1005BFFEC00A1005CFFF100A100AB +FFEC00AB00B4FF2E00AB00B6FF2E00B10024FFCE00B1002CFFE200B1002DFF9C00B10036 +FFEC00B10037FF6A00B10039FFCE00B1003AFFCE00B1003BFFB000B1003CFF7400B1003D +FFF600B10044FFEC00B10059FFD800B1005AFFEC00B1005BFFCE00B1005CFFD800B1005D +FFD800B10090FFCE00B100A0FFEC00B20024FFCE00B2002CFFE200B2002DFF9C00B20036 +FFEC00B20037FF6A00B20039FFCE00B2003AFFCE00B2003BFFB000B2003CFF7400B2003D +FFF600B20044FFEC00B20059FFD800B2005AFFEC00B2005BFFCE00B2005CFFD800B2005D +FFD800B20090FFCE00B200A0FFEC00B30024FF9C00B30090FF9C00B4000FFF2E00B40011 +FF2E00B40024FF9C00B40037006E00B40039006400B4003A003C00B4003C006E00B40056 +FFBA00B40057002800B40090FF9C00B400ABFF2E00B50024FF9C00B50090FF9C00B6000F +FF2E00B60011FF2E00B60024FF9C00B60037006E00B60039006400B6003A003C00B6003C +006E00B60056FFBA00B60057002800B60090FF9C00B600ABFF2E00C30037FF2E00C30039 +FF2E00C3003AFF9C00C3003CFF2E00C40037FF2E00C40039FF2E00C4003AFF9C00C4003C +FF2E0000000000010001000100000001000013FF0000001400000000000013F7308213F3 +06092A864886F70D010702A08213E4308213E0020101310E300C06082A864886F70D0205 +05003060060A2B060104018237020104A0523050302C060A2B06010401823702011CA21E +801C003C003C003C004F00620073006F006C006500740065003E003E003E3020300C0608 +2A864886F70D020505000410503EEC935CE1D8D33511E69A791E4594A0820F3F308202C0 +3082022902141389B4D18AE8A7C4BD35C79B8D88CA1FCA535691300D06092A864886F70D +010104050030819E311F301D060355040A1316566572695369676E205472757374204E65 +74776F726B31173015060355040B130E566572695369676E2C20496E632E312C302A0603 +55040B1323566572695369676E2054696D65205374616D70696E67205365727669636520 +526F6F7431343032060355040B132B4E4F204C494142494C495459204143434550544544 +2C20286329393720566572695369676E2C20496E632E301E170D39373035313230373030 +30305A170D3939313233313037303030305A30819E311F301D060355040A131656657269 +5369676E205472757374204E6574776F726B31173015060355040B130E56657269536967 +6E2C20496E632E312C302A060355040B1323566572695369676E2054696D65205374616D +70696E67205365727669636520526F6F7431343032060355040B132B4E4F204C49414249 +4C4954592041434345505445442C20286329393720566572695369676E2C20496E632E30 +819F300D06092A864886F70D010101050003818D0030818902818100D32E20F0687C2C2D +2E811CB106B2A70BB7110D57DA53D875E3C9332AB2D4F6095B34F3E990FE090CD0DB1B5A +B9CDE7F688B19DC08725EB7D5810736A78CB7115FDC658F629AB585E9604FD2D62115881 +1CCA7194D522582FD5CC14058436BA94AAB44D4AE9EE3B22AD56997E219C6C86C04A4797 +6AB4A636D5FC092DD3B4399B0203010001300D06092A864886F70D010104050003818100 +3A119C85053ED2E980FB7BD5A9F4AC79FC05FC953D7123A92B28DF8C136589FE2C87018F +5A9A62CA11A780F4B7BE14B7D156996B086245C6A2A5DA357F0522DE722D048605A77C09 +16931443F0F7164DD6078E9B106C58FE0A3597CA899FDF04709C2A7D618EC1E80B719AA8 +C76662423D959422329822898AFA640824F5D2FA308202CD30820236021500BD119ADA43 +ED21FB46588489CA46889025EE1460300D06092A864886F70D010104050030819E311F30 +1D060355040A1316566572695369676E205472757374204E6574776F726B311730150603 +55040B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369 +676E2054696D65205374616D70696E67205365727669636520526F6F7431343032060355 +040B132B4E4F204C494142494C4954592041434345505445442C20286329393720566572 +695369676E2C20496E632E301E170D3937303531323037303030305A170D393931323331 +3037303030305A3081AC31273025060355040B131E566572695369676E2054696D652053 +74616D70696E672053657276696365311F301D060355040B1316566572695369676E2054 +72757374204E6574776F726B31343032060355040B132B4E4F204C494142494C49545920 +41434345505445442C20286329393720566572695369676E2C20496E632E311730150603 +55040A130E566572695369676E2C20496E632E3111300F06035504071308496E7465726E +657430819D300D06092A864886F70D010101050003818B0030818702818100AB61EDB4AD +8D904790DCB4115E69DC0A7F62900631CDCEFF889146D7493A94E9D4063F9DADA2785AEC +F9FC63454FB80B6E30EFA236AB2D09DFF16F27AB0D516005354F7FCE544FD0B72C42D80B +D08DB85EFFB680D0E396B47F224942106CD398B00156A3C3CF2E9F3AF47FA858A6D72265 +E58CAB789CBCD94742685B2D7DFDB5020103300D06092A864886F70D0101040500038181 +006D60FB995FA469B3D37B702B62231E442051AF2315C77402F949F2271A5CAC86713508 +2BF68FDEE0B596E88BA74BE373C848099DB0DA8BDA1592CA03E509255606E74EA447A5D1 +5746D43856F521CDC3263B2D2532CE9BE2BF4047EAD86D4776E5C030A30F80CE7FD83B7E +A0F9952A312B15FAC814EDDDB0E9554170462D2C7E308209A63082090FA0030201020210 +7966966E83B0D0B601126E9DC0B46571300D06092A864886F70D01010205003061311130 +0F06035504071308496E7465726E657431173015060355040A130E566572695369676E2C +20496E632E31333031060355040B132A566572695369676E20436F6D6D65726369616C20 +536F667477617265205075626C697368657273204341301E170D39383034313630303030 +30305A170D3939303431363233353935395A3082015D3111300F06035504071308496E74 +65726E657431173015060355040A130E566572695369676E2C20496E632E313330310603 +55040B132A566572695369676E20436F6D6D65726369616C20536F667477617265205075 +626C69736865727320434131463044060355040B133D7777772E766572697369676E2E63 +6F6D2F7265706F7369746F72792F43505320496E636F72702E206279205265662E2C4C49 +41422E4C54442863293936313E303C060355040B13354469676974616C20494420436C61 +73732033202D204D6963726F736F667420536F6674776172652056616C69646174696F6E +207632310B3009060355040613025553311330110603550408130A57617368696E67746F +6E3110300E060355040713075265646D6F6E64311E301C060355040314154D6963726F73 +6F667420436F72706F726174696F6E311E301C060355040B14154D6963726F736F667420 +436F72706F726174696F6E30820120300D06092A864886F70D01010105000382010D0030 +8201080282010100B490D226A864E6EB15C3FF6D7B414F0AF96F2A71CE2E1853A63236E0 +D468E135FD4912D896FC65CF531420BE04C97AF5C9706D94ECCCB3AF2A309A32587CB6A9 +6B256799C0E277EA05E5EFE396F7AD0B19A6AE3C8470E2F86F5C4F7D6F0F52458A15D765 +DC3B2005E33DA16C973A0E0B2513ED21CB208E397A628305C9231AFC529DAC9D4C96D73C +4E583D827BEE093556B568C04245A23B31A3FBD895FB55C72CA8A3C3294FCEF493F0031F +7BF1153AA9F8AA5083056D62F08B138838D9E31C0E73C10640BA28C3EBCD9271C7BE66B2 +A15422D60B677CF8877989AC660AAA51FAFD7221FC865DC6F44A0EEC5861234DD0B13A64 +E0139E5EC8856D4C16AF3D07020103A38205DD308205D930090603551D1304023000300B +0603551D0F0404030205A03081880603551D01048180307E80107B96E4D143FD6898F338 +CC6E3BF20B82A16330613111300F06035504071308496E7465726E657431173015060355 +040A130E566572695369676E2C20496E632E31333031060355040B132A56657269536967 +6E20436F6D6D65726369616C20536F667477617265205075626C69736865727320434182 +0502B400000130210603551D040101FF04173014300E300C060A2B060104018237020116 +0302078000300D0603551D0A040630040302064030820436060A2B06010401823702010A +0101FF048204233082041FA029802768747470733A2F2F7777772E766572697369676E2E +636F6D2F7265706F7369746F72792F435053A18203B8818203B454686973206365727469 +66696361746520696E636F72706F7261746573206279207265666572656E63652C20616E +642069747320757365206973207374726963746C790A7375626A65637420746F2C207468 +6520566572695369676E2043657274696669636174696F6E205072616374696365205374 +6174656D656E742028435053290A76657273696F6E20312E302C20617661696C61626C65 +20696E2074686520566572695369676E207265706F7369746F72792061743A0A68747470 +733A2F2F7777772E766572697369676E2E636F6D3B20627920452D6D61696C2061742043 +50532D726571756573747340766572697369676E2E636F6D3B206F720A6279206D61696C +20617420566572695369676E2C20496E632E2C203235393320436F617374204176652E2C +204D6F756E7461696E20566965772C2043412039343034330A55534120436F7079726967 +6874202863293139393620566572695369676E2C20496E632E2020416C6C205269676874 +732052657365727665642E204345525441494E0A57415252414E5449455320444953434C +41494D454420414E44204C494142494C495459204C494D495445442E0A0A5741524E494E +473A2054484520555345204F462054484953204345525449464943415445204953205354 +524943544C59205355424A45435420544F205448450A564552495349474E204345525449 +4649434154494F4E2050524143544943452053544154454D454E542E2020544845204953 +5355494E4720415554484F524954590A444953434C41494D53204345525441494E20494D +504C49454420414E4420455850524553532057415252414E544945532C20494E434C5544 +494E472057415252414E544945530A4F46204D45524348414E544142494C495459204F52 +204649544E45535320464F52204120504152544943554C415220505552504F53452C2041 +4E442057494C4C204E4F540A4245204C4941424C4520464F5220434F4E53455155454E54 +49414C2C2050554E49544956452C20414E44204345525441494E204F544845522044414D +414745532E205345450A5448452043505320464F522044455441494C532E0A0A436F6E74 +656E7473206F662074686520566572695369676E2072656769737465726564206E6F6E76 +657269666965645375626A656374417474726962757465730A657874656E73696F6E2076 +616C7565207368616C6C206E6F7420626520636F6E736964657265642061732061636375 +7261746520696E666F726D6174696F6E0A76616C69646174656420627920746865204941 +2E0AA336803468747470733A2F2F7777772E766572697369676E2E636F6D2F7265706F73 +69746F72792F766572697369676E6C6F676F2E6769663081AF0603551D200481A7308030 +80060B6086480186F845010701013080302806082B06010505070201161C68747470733A +2F2F7777772E766572697369676E2E636F6D2F435053306206082B060105050702023056 +3015160E566572695369676E2C20496E632E30030201011A3D566572695369676E277320 +43505320696E636F72702E206279207265666572656E6365206C6961622E206C74642E20 +286329393720566572695369676E0000000000003016060A2B06010401823702011B0408 +30060101FF0101FF300D06092A864886F70D010102050003818100954CA27955DA745C8B +25C2A620F06CB8B37B467B9E9F7ABA710648151265CC5D29F8513B8971B1F4143878DA8F +AE0B8036905D4897C500380A53BF4037FF8A13276D004734F7484C2E72F2C6D37EFD446F +228FD1929FE394EDE7FF00C9C2EE721CD99C036EB6C1637B3278443B9E858AFB84863728 +2EE7A638373EBAFCF382233182042430820420020101307530613111300F060355040713 +08496E7465726E657431173015060355040A130E566572695369676E2C20496E632E3133 +3031060355040B132A566572695369676E20436F6D6D65726369616C20536F6674776172 +65205075626C69736865727320434102107966966E83B0D0B601126E9DC0B46571300C06 +082A864886F70D02050500A081AE301906092A864886F70D010903310C060A2B06010401 +8237020104301C060A2B06010401823702010B310E300C060A2B06010401823702011630 +1F06092A864886F70D010904311204105BA6237427F8290EF09CCF5B63F749F83052060A +2B06010401823702010C31443042A01A801800560065007200640061006E006100200046 +006F006E0074A1248022687474703A2F2F7777772E6D6963726F736F66742E636F6D2F74 +727565747970652F300D06092A864886F70D0101010500048201003EFBA519B6A00C823F +B823EA3A1E5E6EBDBBF2C647D1F1093C66910B72FEA26B78E409E7750E62A559DAAC12F7 +CCA36B0725F8BB2E0409AEE1156BE3736F46D1B116DF2B18ABCF394DCF0EF8EE01A758E5 +E4872882FFDD5F04C39F3258358C3DE27BE8FC410AC11736DD19609E3BACBB2257C5E4A4 +836F811D07EC80DAB42FE9AC33537823FA2AC0D406166130C356085818B3CEC8A53763BF +88191B4E52ED790B57C924CEA670505AA2621C1121663215F15D1A9E89A6BC2AA35F5B1F +86E4FDEC2280203A57D736DD2C29A4D2D29F00BAF260927AB3B36EF1C4CC5100CAC54BAA +0AFB74D0101FBEC53815E46B3814DF7E5DFC4A121257608F59AA76D5F333A3A18201D030 +8201CC06092A864886F70D010906318201BD308201B90201013081B830819E311F301D06 +0355040A1316566572695369676E205472757374204E6574776F726B3117301506035504 +0B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369676E +2054696D65205374616D70696E67205365727669636520526F6F7431343032060355040B +132B4E4F204C494142494C4954592041434345505445442C202863293937205665726953 +69676E2C20496E632E021500BD119ADA43ED21FB46588489CA46889025EE1460300C0608 +2A864886F70D02050500A059301806092A864886F70D010903310B06092A864886F70D01 +0701301C06092A864886F70D010905310F170D3938313131323135313835305A301F0609 +2A864886F70D01090431120410641EED59DAFC3103655C9A2A4309D288300D06092A8648 +86F70D01010105000481809092A6C858A52E216E3E56A1C40477C3C63030D247298EF8EA +BFA1C4D5DDE8C375555276DDBB2761ADFC914D772AD331C04DDD675B9736F7D136CAA72D +41CF9F8377C51611E0D1B6EDD8C5AB73694109FD5312908B17319E96C22CCEDD65C9D342 +DC0E3B159C36E0FDA54B21C8DD968B90621C263E94F737AC1997B9D84E517C0000> +] def +/CharStrings 893 dict dup begin +/.notdef 0 def /.null 1 def /nonmarkingreturn 2 def /space 3 def /exclam 4 def +/quotedbl 5 def /numbersign 6 def /dollar 7 def /percent 8 def +/ampersand 9 def /quotesingle 10 def /parenleft 11 def /parenright 12 def +/asterisk 13 def /plus 14 def /comma 15 def /hyphen 16 def +/period 17 def /slash 18 def /zero 19 def /one 20 def +/two 21 def /three 22 def /four 23 def /five 24 def +/six 25 def /seven 26 def /eight 27 def /nine 28 def +/colon 29 def /semicolon 30 def /less 31 def /equal 32 def +/greater 33 def /question 34 def /at 35 def /A 36 def +/B 37 def /C 38 def /D 39 def /E 40 def +/F 41 def /G 42 def /H 43 def /I 44 def +/J 45 def /K 46 def /L 47 def /M 48 def +/N 49 def /O 50 def /P 51 def /Q 52 def +/R 53 def /S 54 def /T 55 def /U 56 def +/V 57 def /W 58 def /X 59 def /Y 60 def +/Z 61 def /bracketleft 62 def /backslash 63 def /bracketright 64 def +/asciicircum 65 def /underscore 66 def /grave 67 def /a 68 def +/b 69 def /c 70 def /d 71 def /e 72 def +/f 73 def /g 74 def /h 75 def /i 76 def +/j 77 def /k 78 def /l 79 def /m 80 def +/n 81 def /o 82 def /p 83 def /q 84 def +/r 85 def /s 86 def /t 87 def /u 88 def +/v 89 def /w 90 def /x 91 def /y 92 def +/z 93 def /braceleft 94 def /bar 95 def /braceright 96 def +/asciitilde 97 def /Adieresis 98 def /Aring 99 def /Ccedilla 100 def +/Eacute 101 def /Ntilde 102 def /Odieresis 103 def /Udieresis 104 def +/aacute 105 def /agrave 106 def /acircumflex 107 def /adieresis 108 def +/atilde 109 def /aring 110 def /ccedilla 111 def /eacute 112 def +/egrave 113 def /ecircumflex 114 def /edieresis 115 def /iacute 116 def +/igrave 117 def /icircumflex 118 def /idieresis 119 def /ntilde 120 def +/oacute 121 def /ograve 122 def /ocircumflex 123 def /odieresis 124 def +/otilde 125 def /uacute 126 def /ugrave 127 def /ucircumflex 128 def +/udieresis 129 def /dagger 130 def /degree 131 def /cent 132 def +/sterling 133 def /section 134 def /bullet 135 def /paragraph 136 def +/germandbls 137 def /registered 138 def /copyright 139 def /trademark 140 def +/acute 141 def /dieresis 142 def /notequal 143 def /AE 144 def +/Oslash 145 def /infinity 146 def /plusminus 147 def /lessequal 148 def +/greaterequal 149 def /yen 150 def /mu1 151 def /partialdiff 152 def +/summation 153 def /product 154 def /pi1 155 def /integral 156 def +/ordfeminine 157 def /ordmasculine 158 def /Ohm 159 def /ae 160 def +/oslash 161 def /questiondown 162 def /exclamdown 163 def /logicalnot 164 def +/radical 165 def /florin 166 def /approxequal 167 def /increment 168 def +/guillemotleft 169 def /guillemotright 170 def /ellipsis 171 def /Agrave 172 def +/Atilde 173 def /Otilde 174 def /OE 175 def /oe 176 def +/endash 177 def /emdash 178 def /quotedblleft 179 def /quotedblright 180 def +/quoteleft 181 def /quoteright 182 def /divide 183 def /lozenge 184 def +/ydieresis 185 def /Ydieresis 186 def /fraction 187 def /Euro 188 def +/guilsinglleft 189 def /guilsinglright 190 def /fi 191 def /fl 192 def +/daggerdbl 193 def /periodcentered 194 def /quotesinglbase 195 def /quotedblbase 196 def +/perthousand 197 def /Acircumflex 198 def /Ecircumflex 199 def /Aacute 200 def +/Edieresis 201 def /Egrave 202 def /Iacute 203 def /Icircumflex 204 def +/Idieresis 205 def /Igrave 206 def /Oacute 207 def /Ocircumflex 208 def +/Ograve 209 def /Uacute 210 def /Ucircumflex 211 def /Ugrave 212 def +/dotlessi 213 def /circumflex 214 def /tilde 215 def /macron 216 def +/breve 217 def /dotaccent 218 def /ring 219 def /cedilla 220 def +/hungarumlaut 221 def /ogonek 222 def /caron 223 def /Lslash 224 def +/lslash 225 def /Scaron 226 def /scaron 227 def /Zcaron 228 def +/zcaron 229 def /brokenbar 230 def /Eth 231 def /eth 232 def +/Yacute 233 def /yacute 234 def /Thorn 235 def /thorn 236 def +/minus 237 def /multiply 238 def /onesuperior 239 def /twosuperior 240 def +/threesuperior 241 def /onehalf 242 def /onequarter 243 def /threequarters 244 def +/franc 245 def /Gbreve 246 def /gbreve 247 def /Idot 248 def +/Scedilla 249 def /scedilla 250 def /Cacute 251 def /cacute 252 def +/Ccaron 253 def /ccaron 254 def /dmacron 255 def /overscore 256 def +/middot 257 def /Abreve 258 def /abreve 259 def /Aogonek 260 def +/aogonek 261 def /Dcaron 262 def /dcaron 263 def /Dslash 264 def +/Eogonek 265 def /eogonek 266 def /Ecaron 267 def /ecaron 268 def +/Lacute 269 def /lacute 270 def /Lcaron 271 def /lcaron 272 def +/Ldot 273 def /ldot 274 def /Nacute 275 def /nacute 276 def +/Ncaron 277 def /ncaron 278 def /Odblacute 279 def /odblacute 280 def +/Racute 281 def /racute 282 def /Rcaron 283 def /rcaron 284 def +/Sacute 285 def /sacute 286 def /Tcedilla 287 def /tcedilla 288 def +/Tcaron 289 def /tcaron 290 def /Uring 291 def /uring 292 def +/Udblacute 293 def /udblacute 294 def /Zacute 295 def /zacute 296 def +/Zdot 297 def /zdot 298 def /Gamma 299 def /Theta 300 def +/Phi 301 def /alpha 302 def /delta 303 def /epsilon 304 def +/sigma 305 def /tau 306 def /phi 307 def /underscoredbl 308 def +/exclamdbl 309 def /nsuperior 310 def /peseta 311 def /IJ 312 def +/ij 313 def /napostrophe 314 def /minute 315 def /second 316 def +/afii61248 317 def /afii61289 318 def /H22073 319 def /H18543 320 def +/H18551 321 def /H18533 322 def /openbullet 323 def /Amacron 324 def +/amacron 325 def /Ccircumflex 326 def /ccircumflex 327 def /Cdot 328 def +/cdot 329 def /Emacron 330 def /emacron 331 def /Ebreve 332 def +/ebreve 333 def /Edot 334 def /edot 335 def /Gcircumflex 336 def +/gcircumflex 337 def /Gdot 338 def /gdot 339 def /Gcedilla 340 def +/gcedilla 341 def /Hcircumflex 342 def /hcircumflex 343 def /Hbar 344 def +/hbar 345 def /Itilde 346 def /itilde 347 def /Imacron 348 def +/imacron 349 def /Ibreve 350 def /ibreve 351 def /Iogonek 352 def +/iogonek 353 def /Jcircumflex 354 def /jcircumflex 355 def /Kcedilla 356 def +/kcedilla 357 def /kgreenlandic 358 def /Lcedilla 359 def /lcedilla 360 def +/Ncedilla 361 def /ncedilla 362 def /Eng 363 def /eng 364 def +/Omacron 365 def /omacron 366 def /Obreve 367 def /obreve 368 def +/Rcedilla 369 def /rcedilla 370 def /Scircumflex 371 def /scircumflex 372 def +/Tbar 373 def /tbar 374 def /Utilde 375 def /utilde 376 def +/Umacron 377 def /umacron 378 def /Ubreve 379 def /ubreve 380 def +/Uogonek 381 def /uogonek 382 def /Wcircumflex 383 def /wcircumflex 384 def +/Ycircumflex 385 def /ycircumflex 386 def /longs 387 def /Aringacute 388 def +/aringacute 389 def /AEacute 390 def /aeacute 391 def /Oslashacute 392 def +/oslashacute 393 def /anoteleia 394 def /Wgrave 395 def /wgrave 396 def +/Wacute 397 def /wacute 398 def /Wdieresis 399 def /wdieresis 400 def +/Ygrave 401 def /ygrave 402 def /quotereversed 403 def /radicalex 404 def +/afii08941 405 def /estimated 406 def /oneeighth 407 def /threeeighths 408 def +/fiveeighths 409 def /seveneighths 410 def /commaaccent 411 def /undercommaaccent 412 def +/tonos 413 def /dieresistonos 414 def /Alphatonos 415 def /Epsilontonos 416 def +/Etatonos 417 def /Iotatonos 418 def /Omicrontonos 419 def /Upsilontonos 420 def +/Omegatonos 421 def /iotadieresistonos 422 def /Alpha 423 def /Beta 424 def +/Delta 425 def /Epsilon 426 def /Zeta 427 def /Eta 428 def +/Iota 429 def /Kappa 430 def /Lambda 431 def /Mu 432 def +/Nu 433 def /Xi 434 def /Omicron 435 def /Pi 436 def +/Rho 437 def /Sigma 438 def /Tau 439 def /Upsilon 440 def +/Chi 441 def /Psi 442 def /Omega 443 def /Iotadieresis 444 def +/Upsilondieresis 445 def /alphatonos 446 def /epsilontonos 447 def /etatonos 448 def +/iotatonos 449 def /upsilondieresistonos 450 def /beta 451 def /gamma 452 def +/zeta 453 def /eta 454 def /theta 455 def /iota 456 def +/kappa 457 def /lambda 458 def /mu 459 def /nu 460 def +/xi 461 def /omicron 462 def /rho 463 def /sigma1 464 def +/upsilon 465 def /chi 466 def /psi 467 def /omega 468 def +/iotadieresis 469 def /upsilondieresis 470 def /omicrontonos 471 def /upsilontonos 472 def +/omegatonos 473 def /afii10023 474 def /afii10051 475 def /afii10052 476 def +/afii10053 477 def /afii10054 478 def /afii10055 479 def /afii10056 480 def +/afii10057 481 def /afii10058 482 def /afii10059 483 def /afii10060 484 def +/afii10061 485 def /afii10062 486 def /afii10145 487 def /afii10017 488 def +/afii10018 489 def /afii10019 490 def /afii10020 491 def /afii10021 492 def +/afii10022 493 def /afii10024 494 def /afii10025 495 def /afii10026 496 def +/afii10027 497 def /afii10028 498 def /afii10029 499 def /afii10030 500 def +/afii10031 501 def /afii10032 502 def /afii10033 503 def /afii10034 504 def +/afii10035 505 def /afii10036 506 def /afii10037 507 def /afii10038 508 def +/afii10039 509 def /afii10040 510 def /afii10041 511 def /afii10042 512 def +/afii10043 513 def /afii10044 514 def /afii10045 515 def /afii10046 516 def +/afii10047 517 def /afii10048 518 def /afii10049 519 def /afii10065 520 def +/afii10066 521 def /afii10067 522 def /afii10068 523 def /afii10069 524 def +/afii10070 525 def /afii10072 526 def /afii10073 527 def /afii10074 528 def +/afii10075 529 def /afii10076 530 def /afii10077 531 def /afii10078 532 def +/afii10079 533 def /afii10080 534 def /afii10081 535 def /afii10082 536 def +/afii10083 537 def /afii10084 538 def /afii10085 539 def /afii10086 540 def +/afii10087 541 def /afii10088 542 def /afii10089 543 def /afii10090 544 def +/afii10091 545 def /afii10092 546 def /afii10093 547 def /afii10094 548 def +/afii10095 549 def /afii10096 550 def /afii10097 551 def /afii10071 552 def +/afii10099 553 def /afii10100 554 def /afii10101 555 def /afii10102 556 def +/afii10103 557 def /afii10104 558 def /afii10105 559 def /afii10106 560 def +/afii10107 561 def /afii10108 562 def /afii10109 563 def /afii10110 564 def +/afii10193 565 def /afii10050 566 def /afii10098 567 def /afii00208 568 def +/afii61352 569 def /pi 570 def /onenumerator 571 def /twonumerator 572 def +/threenumerator 573 def /fournumerator 574 def /fivenumerator 575 def /sevennumerator 576 def +/eightnumerator 577 def /DontCompressHTMX 578 def /glyph579 579 def /glyph580 580 def +/glyph581 581 def /Ohorn 582 def /ohorn 583 def /Uhorn 584 def +/uhorn 585 def /hookabovecomb 586 def /dotbelowcomb 587 def /gravecomb 588 def +/acutecomb 589 def /glyph590 590 def /glyph591 591 def /glyph592 592 def +/glyph593 593 def /glyph594 594 def /glyph595 595 def /glyph596 596 def +/glyph597 597 def /glyph598 598 def /glyph599 599 def /glyph600 600 def +/glyph601 601 def /glyph602 602 def /glyph603 603 def /glyph604 604 def +/Adotbelow 605 def /adotbelow 606 def /Ahookabove 607 def /ahookabove 608 def +/Acircumflexacute 609 def /acircumflexacute 610 def /Acircumflexgrave 611 def /acircumflexgrave 612 def +/Acircumflexhookabove 613 def /acircumflexhookabove 614 def /Acircumflextilde 615 def /acircumflextilde 616 def +/Acircumflexdotbelow 617 def /acircumflexdotbelow 618 def /Abreveacute 619 def /abreveacute 620 def +/Abrevegrave 621 def /abrevegrave 622 def /Abrevehookabove 623 def /abrevehookabove 624 def +/Abrevetilde 625 def /abrevetilde 626 def /Abrevedotbelow 627 def /abrevedotbelow 628 def +/Edotbelow 629 def /edotbelow 630 def /Ehookabove 631 def /ehookabove 632 def +/Etilde 633 def /etilde 634 def /Ecircumflexacute 635 def /ecircumflexacute 636 def +/Ecircumflexgrave 637 def /ecircumflexgrave 638 def /Ecircumflexhookabove 639 def /ecircumflexhookabove 640 def +/Ecircumflextilde 641 def /ecircumflextilde 642 def /Ecircumflexdotbelow 643 def /ecircumflexdotbelow 644 def +/Ihookabove 645 def /ihookabove 646 def /Idotbelow 647 def /idotbelow 648 def +/glyph649 649 def /glyph650 650 def /glyph651 651 def /glyph652 652 def +/sheva 653 def /hatafsegol 654 def /hatafpatah 655 def /hatafqamats 656 def +/hiriq 657 def /tsere 658 def /segol 659 def /patah 660 def +/qamats 661 def /holam 662 def /qubuts 663 def /dagesh 664 def +/meteg 665 def /maqaf 666 def /rafe 667 def /paseq 668 def +/shindot 669 def /sindot 670 def /sofpasuq 671 def /alef 672 def +/bet 673 def /gimel 674 def /dalet 675 def /he 676 def +/vav 677 def /zayin 678 def /het 679 def /tet 680 def +/yod 681 def /finalkaf 682 def /kaf 683 def /lamed 684 def +/finalmem 685 def /mem 686 def /finalnun 687 def /nun 688 def +/samekh 689 def /ayin 690 def /finalpe 691 def /pe 692 def +/finaltsadi 693 def /tsadi 694 def /qof 695 def /resh 696 def +/shin 697 def /tav 698 def /doublevav 699 def /vavyod 700 def +/doubleyod 701 def /geresh 702 def /gershayim 703 def /newsheqelsign 704 def +/vavshindot 705 def /finalkafsheva 706 def /finalkafqamats 707 def /lamedholam 708 def +/lamedholamdagesh 709 def /altayin 710 def /shinshindot 711 def /shinsindot 712 def +/shindageshshindot 713 def /shindageshsindot 714 def /alefpatah 715 def /alefqamats 716 def +/alefmapiq 717 def /betdagesh 718 def /gimeldagesh 719 def /daletdagesh 720 def +/hedagesh 721 def /vavdagesh 722 def /zayindagesh 723 def /tetdagesh 724 def +/yoddagesh 725 def /finalkafdagesh 726 def /kafdagesh 727 def /lameddagesh 728 def +/memdagesh 729 def /nundagesh 730 def /samekhdagesh 731 def /finalpedagesh 732 def +/pedagesh 733 def /tsadidagesh 734 def /qofdagesh 735 def /reshdagesh 736 def +/shindagesh 737 def /tavdages 738 def /vavholam 739 def /betrafe 740 def +/kafrafe 741 def /perafe 742 def /aleflamed 743 def /zerowidthnonjoiner 744 def +/zerowidthjoiner 745 def /lefttorightmark 746 def /righttoleftmark 747 def /afii57388 748 def +/afii57403 749 def /afii57407 750 def /afii57409 751 def /afii57440 752 def +/afii57451 753 def /afii57452 754 def /afii57453 755 def /afii57454 756 def +/afii57455 757 def /afii57456 758 def /afii57457 759 def /afii57458 760 def +/afii57392 761 def /afii57393 762 def /afii57394 763 def /afii57395 764 def +/afii57396 765 def /afii57397 766 def /afii57398 767 def /afii57399 768 def +/afii57400 769 def /afii57401 770 def /afii57381 771 def /afii57461 772 def +/afii63167 773 def /afii57459 774 def /afii57543 775 def /afii57534 776 def +/afii57494 777 def /afii62843 778 def /afii62844 779 def /afii62845 780 def +/afii64240 781 def /afii64241 782 def /afii63954 783 def /afii57382 784 def +/afii64242 785 def /afii62881 786 def /afii57504 787 def /afii57369 788 def +/afii57370 789 def /afii57371 790 def /afii57372 791 def /afii57373 792 def +/afii57374 793 def /afii57375 794 def /afii57391 795 def /afii57471 796 def +/afii57460 797 def /afii52258 798 def /afii57506 799 def /afii62958 800 def +/afii62956 801 def /afii52957 802 def /afii57505 803 def /afii62889 804 def +/afii62887 805 def /afii62888 806 def /afii57507 807 def /afii62961 808 def +/afii62959 809 def /afii62960 810 def /afii57508 811 def /afii62962 812 def +/afii57567 813 def /afii62964 814 def /afii52305 815 def /afii52306 816 def +/afii57509 817 def /afii62967 818 def /afii62965 819 def /afii62966 820 def +/afii57555 821 def /afii52364 822 def /afii63753 823 def /afii63754 824 def +/afii63759 825 def /afii63763 826 def /afii63795 827 def /afii62891 828 def +/afii63808 829 def /afii62938 830 def /afii63810 831 def /afii62942 832 def +/afii62947 833 def /afii63813 834 def /afii63823 835 def /afii63824 836 def +/afii63833 837 def /afii63844 838 def /afii62882 839 def /afii62883 840 def +/afii62884 841 def /afii62885 842 def /afii62886 843 def /Odotbelow 844 def +/odotbelow 845 def /Ohookabove 846 def /ohookabove 847 def /Ocircumflexacute 848 def +/ocircumflexacute 849 def /Ocircumflexgrave 850 def /ocircumflexgrave 851 def /Ocircumflexhookabove 852 def +/ocircumflexhookabove 853 def /Ocircumflextilde 854 def /ocircumflextilde 855 def /Ocircumflexdotbelow 856 def +/ocircumflexdotbelow 857 def /Ohornacute 858 def /ohornacute 859 def /Ohorngrave 860 def +/ohorngrave 861 def /Ohornhookabove 862 def /ohornhookabove 863 def /Ohorntilde 864 def +/ohorntilde 865 def /Ohorndotbelow 866 def /ohorndotbelow 867 def /Udotbelow 868 def +/udotbelow 869 def /Uhookabove 870 def /uhookabove 871 def /Uhornacute 872 def +/uhornacute 873 def /Uhorngrave 874 def /uhorngrave 875 def /Uhornhookabove 876 def +/uhornhookabove 877 def /Uhorntilde 878 def /uhorntilde 879 def /Uhorndotbelow 880 def +/uhorndotbelow 881 def /glyph882 882 def /glyph883 883 def /Ydotbelow 884 def +/ydotbelow 885 def /Yhookabove 886 def /yhookabove 887 def /Ytilde 888 def +/ytilde 889 def /dong 890 def /tildecomb 891 def /currency 892 def + +end readonly def +FontName currentdict end definefont pop +%%EndFont +%%EndProlog +mpldict begin +13.5 175.5 translate +585 441 0 0 clipbox +% polygon +1.000 setgray +1.000 setlinewidth +0 setlinejoin +2 setlinecap +[] 0 setdash +0 0 m +0 441 l +585 441 l +585 0 l +closepath +gsave +fill +grestore +stroke +% polygon +0.000 setgray +73.125 44.1 m +73.125 396.9 l +526.5 396.9 l +526.5 44.1 l +closepath +gsave +1.000 setgray +fill +grestore +stroke +% draw_lines +0.000 0.000 1.000 setrgbcolor +gsave +453.375 352.800 73.125 44.100 clipbox +73.125 44.100 m +82.192 44.625 l +91.260 46.237 l +100.328 49.043 l +109.395 53.206 l +118.463 58.937 l +127.530 66.464 l +136.597 76.012 l +145.665 87.777 l +154.733 101.897 l +163.800 118.431 l +172.868 137.336 l +181.935 158.456 l +191.002 181.511 l +200.070 206.100 l +209.138 231.707 l +218.205 257.720 l +227.273 283.450 l +236.340 308.160 l +245.408 331.100 l +254.475 351.539 l +263.543 368.804 l +272.610 382.309 l +281.678 391.584 l +290.745 396.306 l +299.812 396.306 l +308.880 391.584 l +317.948 382.309 l +327.015 368.804 l +336.083 351.539 l +345.150 331.100 l +354.218 308.160 l +363.285 283.450 l +372.353 257.720 l +381.420 231.707 l +390.488 206.100 l +399.555 181.511 l +408.623 158.456 l +417.690 137.336 l +426.758 118.431 l +435.825 101.897 l +444.893 87.777 l +453.960 76.012 l +463.028 66.464 l +472.095 58.937 l +481.163 53.206 l +490.230 49.043 l +499.298 46.237 l +508.365 44.625 l +517.433 44.100 l +stroke +grestore +% draw_lines +1.000 0.000 0.000 setrgbcolor +gsave +453.375 352.800 73.125 44.100 clipbox +73.125 44.100 m +82.192 58.500 l +91.260 72.900 l +100.328 87.300 l +109.395 101.700 l +118.463 116.100 l +127.530 130.500 l +136.597 144.900 l +145.665 159.300 l +154.733 173.700 l +163.800 188.100 l +172.868 202.500 l +181.935 216.900 l +191.002 231.300 l +200.070 245.700 l +209.138 260.100 l +218.205 274.500 l +227.273 288.900 l +236.340 303.300 l +245.408 317.700 l +254.475 332.100 l +263.543 346.500 l +272.610 360.900 l +281.678 375.300 l +290.745 389.700 l +299.812 389.700 l +308.880 375.300 l +317.948 360.900 l +327.015 346.500 l +336.083 332.100 l +345.150 317.700 l +354.218 303.300 l +363.285 288.900 l +372.353 274.500 l +381.420 260.100 l +390.488 245.700 l +399.555 231.300 l +408.623 216.900 l +417.690 202.500 l +426.758 188.100 l +435.825 173.700 l +444.893 159.300 l +453.960 144.900 l +463.028 130.500 l +472.095 116.100 l +481.163 101.700 l +490.230 87.300 l +499.298 72.900 l +508.365 58.500 l +517.433 44.100 l +stroke +grestore +% draw_lines +0.000 0.500 0.000 setrgbcolor +gsave +453.375 352.800 73.125 44.100 clipbox +73.125 44.100 m +82.192 45.548 l +91.260 49.869 l +100.328 56.992 l +109.395 66.799 l +118.463 79.131 l +127.530 93.783 l +136.597 110.516 l +145.665 129.056 l +154.733 149.096 l +163.800 170.309 l +172.868 192.347 l +181.935 214.846 l +191.002 237.438 l +200.070 259.753 l +209.138 281.422 l +218.205 302.092 l +227.273 321.421 l +236.340 339.094 l +245.408 354.819 l +254.475 368.339 l +263.543 379.431 l +272.610 387.913 l +281.678 393.647 l +290.745 396.538 l +299.812 396.538 l +308.880 393.647 l +317.948 387.913 l +327.015 379.431 l +336.083 368.339 l +345.150 354.819 l +354.218 339.094 l +363.285 321.421 l +372.353 302.092 l +381.420 281.422 l +390.488 259.753 l +399.555 237.438 l +408.623 214.846 l +417.690 192.347 l +426.758 170.309 l +435.825 149.096 l +444.893 129.056 l +453.960 110.516 l +463.028 93.783 l +472.095 79.131 l +481.163 66.799 l +490.230 56.992 l +499.298 49.869 l +508.365 45.548 l +517.433 44.100 l +stroke +grestore +% draw_lines +0.750 0.000 0.750 setrgbcolor +gsave +453.375 352.800 73.125 44.100 clipbox +73.125 72.324 m +82.192 73.656 l +91.260 77.632 l +100.328 84.185 l +109.395 93.207 l +118.463 104.552 l +127.530 118.033 l +136.597 133.427 l +145.665 150.483 l +154.733 168.921 l +163.800 188.437 l +172.868 208.711 l +181.935 229.410 l +191.002 250.195 l +200.070 270.724 l +209.138 290.661 l +218.205 309.676 l +227.273 327.460 l +236.340 343.718 l +245.408 358.186 l +254.475 370.624 l +263.543 380.828 l +272.610 388.632 l +281.678 393.907 l +290.745 396.567 l +299.812 396.567 l +308.880 393.907 l +317.948 388.632 l +327.015 380.828 l +336.083 370.624 l +345.150 358.186 l +354.218 343.718 l +363.285 327.460 l +372.353 309.676 l +381.420 290.661 l +390.488 270.724 l +399.555 250.195 l +408.623 229.410 l +417.690 208.711 l +426.758 188.437 l +435.825 168.921 l +444.893 150.483 l +453.960 133.427 l +463.028 118.033 l +472.095 104.552 l +481.163 93.207 l +490.230 84.185 l +499.298 77.632 l +508.365 73.656 l +517.433 72.324 l +stroke +grestore +% text +0.000 setgray +/Verdana findfont +18.000 scalefont +setfont +144.812 403.956 m +0 4 rmoveto +(Smoothing window in time-domain) show +% text +/Verdana findfont +14.000 scalefont +setfont +69.469 30.1 m +(0) show +% line +0.500 setlinewidth +0 setlinecap +163.800 44.100 m 163.800 48.100 l +stroke +% line +163.800 392.900 m 163.800 396.900 l +stroke +% text +155.769 30.1 m +(10) show +% line +254.475 44.100 m 254.475 48.100 l +stroke +% line +254.475 392.900 m 254.475 396.900 l +stroke +% text +246.444 30.1 m +(20) show +% line +345.150 44.100 m 345.150 48.100 l +stroke +% line +345.150 392.900 m 345.150 396.900 l +stroke +% text +337.619 30.1 m +(30) show +% line +435.825 44.100 m 435.825 48.100 l +stroke +% line +435.825 392.900 m 435.825 396.900 l +stroke +% text +427.731 30.1 m +(40) show +% text +518.844 30.1 m +(50) show +% text +296.656 17.1 m +(n) show +% text +47.812 39.1 m +(0.0) show +% line +73.125 114.660 m 77.125 114.660 l +stroke +% line +522.500 114.660 m 526.500 114.660 l +stroke +% text +47.875 109.66 m +(0.2) show +% line +73.125 185.220 m 77.125 185.220 l +stroke +% line +522.500 185.220 m 526.500 185.220 l +stroke +% text +47.125 180.22 m +(0.4) show +% line +73.125 255.780 m 77.125 255.780 l +stroke +% line +522.500 255.780 m 526.500 255.780 l +stroke +% text +47.812 250.78 m +(0.6) show +% line +73.125 326.340 m 77.125 326.340 l +stroke +% line +522.500 326.340 m 526.500 326.340 l +stroke +% text +47.797 321.34 m +(0.8) show +% text +48.062 391.9 m +(1.0) show +% polygon +1.000 setlinewidth +2 setlinecap +214.291 51.156 m +214.291 161.736 l +385.334 161.736 l +385.334 51.156 l +closepath +gsave +1.000 setgray +fill +grestore +stroke +% draw_lines +0.000 0.000 1.000 setrgbcolor +230.344 143.521 m +237.901 143.521 l +245.457 143.521 l +253.013 143.521 l +stroke +% draw_lines +1.000 0.000 0.000 setrgbcolor +230.344 121.605 m +237.901 121.605 l +245.457 121.605 l +253.013 121.605 l +stroke +% draw_lines +0.000 0.500 0.000 setrgbcolor +230.344 97.688 m +237.901 97.688 l +245.457 97.688 l +253.013 97.688 l +stroke +% draw_lines +0.750 0.000 0.750 setrgbcolor +230.344 71.371 m +237.901 71.371 l +245.457 71.371 l +253.013 71.371 l +stroke +% text +0.000 setgray +/Verdana findfont +24.000 scalefont +setfont +262.081 134.521 m +(Blackman) show +% text +262.081 112.605 m +(Bartlett) show +% text +262.081 86.688 m +0 5 rmoveto +(Hanning) show +% text +262.081 60.371 m +0 5 rmoveto +(Hamming) show + +end +showpage diff --git a/numpy/doc/numpybook/Figures/fig1bw.eps b/numpy/doc/numpybook/Figures/fig1bw.eps new file mode 100644 index 000000000..3353edcb4 --- /dev/null +++ b/numpy/doc/numpybook/Figures/fig1bw.eps @@ -0,0 +1,4575 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: fig1bw.eps +%%Creator: matplotlib version 0.85.1.cvs, http://matplotlib.sourceforge.net/ +%%CreationDate: Fri Jan 6 00:30:28 2006 +%%BoundingBox: 13 175 598 616 +%%EndComments +%%BeginProlog +/mpldict 7 dict def +mpldict begin +/m { moveto } bind def +/l { lineto } bind def +/r { rlineto } bind def +/box { +m +1 index 0 r +0 exch r +neg 0 r +closepath +} bind def +/clipbox { +box +clip +newpath +} bind def +/ellipse { +newpath +matrix currentmatrix 7 1 roll +translate +scale +0 0 1 5 3 roll arc +setmatrix +closepath +} bind def +%%BeginFont: Verdana +%!PS-TrueType-1.0-1.0 +8 dict begin +/FontName /Verdana def +/FontMatrix [1 0 0 1 0 0] def +/FontType 42 def +/Encoding StandardEncoding def +/FontBBox [-102 -423 2963 2049] def +/PaintType 0 def +/FontInfo 7 dict dup begin +/Notice (Typeface and data © 1996 Microsoft Corporation. All Rights Reserved) def +/FamilyName (Verdana) def +/FullName (Verdana) def +/version (Version 2.35) def +/isFixedPitch false def +/UnderlinePosition -180 def +/UnderlineThickness 120 def +end readonly def +/sfnts [ +<00010000001301000004003044534947CD5006A400020D64000014144C5453485694D82F +00001530000003814F532F32477590C3000001B80000005656444D5874F17C6D000018B4 +000005E0636D6170E84D8B8B000007A80000068C637674204CA740E3000022AC00000198 +6670676DEE371553000021740000013867617370001700090000021000000010676C7966 +01F195F700009EC000013BB668646D7809490ECD0000323800006C8868656164C748722C +0000013C0000003668686561133B09D00000017400000024686D7478C905723E00002444 +00000DF46B65726E75BF7E53000200CC00000C966C6F63616784B57700000E34000006FC +6D617870086A023E00000198000000206E616D65A93B95720000022000000587706F7374 +C58F55450001DA7800002651707265701240C02F00001E94000002E00001000000010000 +16FBFC3A5F0F3CF5001B080000000000AA7E442900000000B26DE2ABFF9AFE590B930801 +00000009000200000000000000010000080BFE5200000C2CFF9AFBD40B93000100000000 +00000000000000000000037D00010000037D00620007006B000500020010002F00380000 +0495013F0003000100010411019000050000059A053300000125059A0533000003A00078 +02A70800020B0604030504040204000002870000000000000000000000004D5320200040 +0020FB02061EFE5900CA080B01AE2000019F000000000000000000030008000200100001 +FFFF00030000002801E60001000000000000004300000001000000000001000700430001 +0000000000020007004A0001000000000003002F00510001000000000004000700800001 +000000000005000C00870001000000000006000700930001000000000007002F009A0003 +000104030002000C00C90003000104050002001000D50003000104060002000C00E50003 +000104070002001000F10003000104080002001001010003000104090000008601110003 +000104090001000E01970003000104090002000E01A50003000104090003005E01B30003 +000104090004000E021100030001040900050018021F0003000104090006000E02370003 +000104090007005E024500030001040A0002000C02A300030001040B0002001002AF0003 +0001040C0002000C02BF00030001040E0002000C02CB0003000104100002000E02D70003 +000104130002001202E50003000104140002000C02F70003000104150002001003030003 +000104160002000C03130003000104190002000E031F00030001041B00020010032D0003 +0001041D0002000C033D00030001041F0002000C03490003000104240002000E03550003 +0001042D0002000E036300030001080A0002000C03710003000108160002000C037D0003 +00010C0A0002000C0389000300010C0C0002000C0395547970656661636520616E642064 +61746120A92031393936204D6963726F736F667420436F72706F726174696F6E2E20416C +6C2052696768747320526573657276656456657264616E61526567756C61724D6963726F +736F66743A56657264616E6120526567756C61723A56657273696F6E203120284D696372 +6F736F66742956657264616E6156657273696F6E20322E333556657264616E6156657264 +616E6120697320612074726164656D61726B206F66204D6963726F736F667420436F7270 +6F726174696F6E004E006F0072006D0061006C006F00620079010D0065006A006E00E900 +6E006F0072006D0061006C005300740061006E0064006100720064039A03B103BD03BF03 +BD03B903BA03AC0054007900700065006600610063006500200061006E00640020006400 +6100740061002000A9002000310039003900360020004D006900630072006F0073006F00 +66007400200043006F00720070006F0072006100740069006F006E002E00200041006C00 +6C0020005200690067006800740073002000520065007300650072007600650064005600 +65007200640061006E00610052006500670075006C00610072004D006900630072006F00 +73006F00660074003A00560065007200640061006E006100200052006500670075006C00 +610072003A00560065007200730069006F006E0020003100200028004D00690063007200 +6F0073006F00660074002900560065007200640061006E00610056006500720073006900 +6F006E00200032002E0033003500560065007200640061006E0061005600650072006400 +61006E006100200069007300200061002000740072006100640065006D00610072006B00 +20006F00660020004D006900630072006F0073006F0066007400200043006F0072007000 +6F0072006100740069006F006E004E006F0072006D0061006C004E006F0072006D006100 +61006C0069004E006F0072006D0061006C004E006F0072006D00E1006C004E006F007200 +6D0061006C0065005300740061006E00640061006100720064004E006F0072006D006100 +6C004E006F0072006D0061006C006E0079004E006F0072006D0061006C041E0431044B04 +47043D044B0439004E006F0072006D00E1006C006E0065004E006F0072006D0061006C00 +4E006F0072006D0061006C004E0061007600610064006E006F0041007200720075006E00 +740061004E006F0072006D0061006C004E006F0072006D0061006C004E006F0072006D00 +61006C004E006F0072006D0061006C00000000020001000000000014000300010000011A +000001060000010000000000000001020000000200000000000000000000000000000001 +0000030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324 +25262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748 +494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60610062636465666768696A6B +6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F +909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAB03ACADAEAFB0B1B2 +B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD000D1D2D3D4D5 +D6D7D8D9DADBDCDDDEDF0004057200000084008000060004007E017F019201A101B001FF +02C702C902DD0301030303090323037E038A038C03A103CE040C044F045C045F04911E85 +1EF92015201E2022202620302033203A203C203E2044207F20A420A720AC210521132116 +21222126212E215E22022206220F22122215221A221E222B22482260226525A125AB25CA +25CF25E6F002F00DFB02FFFF0000002000A0019201A001AF01FA02C602C902D803000303 +03090323037E0384038C038E03A30401040E0451045E04901E801EA02013201720202026 +203020322039203C203E2044207F20A320A720AB21052113211621222126212E215B2202 +2206220F221122152219221E222B22482260226425A125AA25CA25CF25E6F001F004FB01 +FFFFFFE30000FF1400A60099FF8A0000FE0F0000FF4C0078FF41FF28FCA00000FE170000 +0000FDD9FDD8FDD7FDD6FDA6E30B0000000000000000E085E095E109E084E0F9E156E077 +E0B70000E0900000E038E02BE123DF6ADF79E068E03CDE96DEA2DE8B0000DEA60000DE74 +DE71DE5FDE2FDE30DB9EDB96DAEEDB73DB5D10BE000005BE000100000082000000000000 +000002380000023800000000000000000000023800000242026800000000000000000000 +000002B203640368037600000000000000000000000000000000036A0000036A00000000 +000000000000000000000000000000000358000003580000000000000000000000000000 +0000000000000000034400000000000300A300840085037C009600E60086008E008B009D +00A900A40010008A01000083009300F000F1008D00970088010100DC00EF009E00AA00F3 +00F200F400A200AC00C800C600AD006200630090006400CA006500C700C900CE00CB00CC +00CD00E7006600D100CF00D000AE006700EE009100D400D200D3006800E900EB0089006A +0069006B006D006C006E00A0006F0071007000720073007500740076007700E80078007A +0079007B007D007C00B700A1007F007E0080008100EA00EC00B901440145010201030104 +010500FB00FC014601470148014900FD00FE01060107010800FF014A014B014C014D014E +014F0109010A010B010C0150015100F600F701520153015401550156015701580159015A +015B015C015D015E015F0160016100F800D50138013901620163016401650166010D010E +01670168010F01100111011200E000E1011301140169016A01150116013A016B016C016D +016E016F01700117011800AF00B00119011A01710172011B011C011D011E0173017400F9 +00FA00E200E3011F01200121012201750176017701780179017A017B017C012301240125 +0126017D017E017F01800181018200BA012701280129012A00E400E5018300D600DF00D9 +00DA00DB00DE00D700DD019D019E019F018A01A001A101A201A401A501A601A701A8012B +01A901AA01AB01AC012C01AD01AE01AF01B001B101B201B301B401B501B601B701B8012D +01B901BA01BB01BC01BD01BE01BF01C001C101C2012E01C301C4012F013001C501C601C7 +01C801C901CA01CB01CC01CD01CE023A01CF01D00131013201D1013301D201D301D401D5 +01D601D701D801D9025D025E025F0260026102620263026402650266026702680269026A +026B026C026D026E026F0270027102720273027402750276027702780279027A027B027C +027D027E027F028002810282028302840285028602870288034C034D034E034F03500351 +03520353035403550356035703580359035A035B035C035D035E035F0360036103620363 +036403650366036703680369036A036B036C036D036E036F037003710191019203740375 +037603770378037900B100B20238013400B500B600C3019300B300B400C4008200C10087 +00F50195037A00BC009900ED00C200A5019B019C023B023C023D023E023F024002410242 +0000001F001F001F001F00470070010401C0025F033C035503A203F10461049604C004DE +04F50520057F05B9063806DB072D07A70830086B090B099309B509F10A350A640AAA0B13 +0BF80C600CDC0D4F0DA00DD60E060E7A0EAE0EDB0F180F860FA61000104C10B8111711AE +122012B812DF132C13881407148814DF15221544156F159015C815DE15FE168916E71747 +17A01803184F18D11912193D198C19E51A001A761AB61B011B5D1BB81BF51C8B1CDB1D1B +1D741DD91E641EC21F041F631F7E1FDC203B205520FE21AA21BD21D021E9220222142226 +2238225322652278230A231C232E234023562369237C23B423EE2400241224242436244C +245E24702482249424AB24E62520259A260826EB270B274327C928832929297B299C29C2 +2A2D2A912B412BCD2C0D2C5A2CA82D0C2D4C2DCB2E3D2E722E9F2EE92F5E2F9F301130E7 +316D31D831FF3223326032DF336433A233F33443346D3480349334A6350E35AD35C735DD +361C365B368036A736E33728373F37593777382D3858388438E139313986399E39C43A03 +3AD73AEA3AFD3B103B243B373B4A3B5D3B773B8A3B9D3BB03BC33BD63BE93BFC3C173C47 +3C8E3CA63CEC3D003D493D7D3DB53DEA3E1B3E5B3E923EA53EB73ECA3EDC3F043F6B3FFF +40124024408840E441014135416941BB4239425A427E42AA42F643024314432743F044AF +44C244D444E744F9456F4586459E45B145C3465F47144727479D47A54806489348A648B8 +48CB48F0492B4961499249BC49CF49E149F44A064A1A4A2D4A404A534A664A794A8C4A9E +4AEE4B6C4B7F4BEC4C354C484C5C4C6F4C824C954CA84CBA4CDA4D584DDD4E3C4EC24F58 +4FB24FE1505D5081509D50E951DF51EF52085268528B52CA538353FD5425543F54665491 +54EA54FC550D551F55345546555B556D557E559055A455B655C755D955EE5600561556B8 +575B576D578757DE583458A458FC593F596C59C05A035A595AB15AC85B225B335B495BA2 +5BEB5C305C465C5C5CD25D2E5D405D515D635D745D855DEA5DFC5E105E4E5EBA5ECC5EDD +5EEF5F005F125F235FA2600E6020603260446055608561656246625C626E6285629A62B1 +62C362D562E762F963166332634963606388639E6422648E64AA64D76504653065556589 +65A265DD65F36611662F664F666E668E66B16700670867106752675A6762676A6772677A +67C367CB67D36812681A6840684868DA68E268EA68F2695D69DC69F66A106A216A376A48 +6A5B6A6F6AFD6B4A6BBD6BFF6C866C8E6D226D7A6DC16DC96E726E7A6ECF6F3B6F7A6FEA +705A70F370FB7112712371347146715A71C571DD7255725D7265727F7287731C738773DE +73F3749074C174C97521752975497594759C765676F2773A77AE783B7892789A78A278AA +78D078D878E078E8795979DE79E67A167A5D7A907ACD7B297B907BE47C5F7CCD7D367D3E +7DCA7E4C7E6C7EBC7EC47F7D8015804D80B18126817B81D38203820B82308238829A82C9 +82D1836C837483AC83EF8425846784C3852B858085F4865386BD86D38757876887D587DD +87E587ED87F5888B88F9894F896489EE8A258A4E8A7B8A918B238B488B6C8BBD8C398C73 +8CD88D0C8D8E8D8E8D8E8D8E8D8E8E208E8D8EF48F598F9F8FB58FBD8FC59006904590BD +9126916491A19209927292C09334938093D1944E94D395479558956C9586959B95B195C7 +95DD95F3960B96219633964996659683969596AA96BC96D196E396F8970A971F973E9759 +976A977B979697AE97C497D597ED97FF98179829983F985598679879989898B198C998DB +98ED98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF9911 +9922994099549970998999A199B399CB99E499FC9A159A359A4E9A659A769A909AA59ABB +9ACC9AE29AF99B0B9B1C9B2D9B3E9B549B659B7C9B949BAF9BC79BDD9BEE9C009C119C22 +9C339C4E9C649C759C8B9CA49CB89CCE9CDF9D639D6B9DDB0000037D01011C1C300E0E0B +0E010A01010E0E010F01010B0B0B0B0B0B0B0B0B0B01010E0E0E0B0C320E101923150E0F +740A0E2D240E0D0D0D0E322C1D322E1C111C0101010101010D0D0E0D0D1C0D0BB4010EB4 +110B100D0D2A11110B0A100F0A11010E0101323210230E0D1D0D0D0D0D0D0D0E0D0D0D0D +B4B4B4B40B10101010100B0B0B0B0B010B0B01010B0101010101010E330D010E0E0E0B10 +010101010B0101010E100B300E010B010127270132320D011C0B01010101010E010A1101 +01010101010B010101013223322323747474740D0D0D1D1D1DB401010101010101010101 +0AD732111C110E1001110A0D0D0E01010101010101010E0D743211100E100E0D0101320D +320D190D10230D230D2DB42D322D010E0B0E0B0D100E2A0E2A32112C112C111D0B1D0B1C +111C11100D130D2612181110010D010A0A110E01240A121901011901320D100E100E230D +230D230D0E0D0E0D0E0D0F0B0F0B74B474B474B474B40A010E0E0E2DB40E0B0E0B0D100D +100E2A32112C111D0B1D0B1D491D182E10110A01320D330E0D10012E102E102E10110A01 +010B01010101012E010101320E1C10160C27B4320E01231C0F740E0A240E300D0F0D1E2C +111C111474110D120BB40B0B0F0D0B0DB40D0A130A011010010B0C1010B40B100B10230A +100D3274740A0C0E010E1111320E0E10012311010E0E0E12240F0D0F0D102C11131C2D22 +11111F2D0E0D01100D240A010D0D301210100B011D1010100D0F110A170F270D11320C11 +0C0E0D0A0D0B010E11B4B4010A0E0B0B0A10100A01011001010101010101010101012D10 +282001010101010101010101010101010101010101320D320D320D320D320D320D320D32 +0D320D320D320D320D230D230D230D230D230D230D230D230D74B474B401010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010D100D100D100D100D100D100D102D102D102D102D102D101D0B1D0B +28202820282028202820110A110A110A110A0D010B00000000000001000101010101000C +00F808FF00080008FFFE0009000AFFFE000A000AFFFE000B000BFFFE000C000CFFFE000D +000DFFFD000E000EFFFD000F000FFFFD0010000FFFFD00110011FFFD00120012FFFC0013 +0013FFFC00140015FFFC00150015FFFC00160016FFFC00170017FFFB00180018FFFB0019 +001AFFFB001A001BFFFB001B001BFFFB001C001CFFFA001D001DFFFA001E001EFFFA001F +0020FFFA00200020FFFA00210021FFF900220022FFF900230023FFF900240025FFF90025 +0026FFF900260026FFF800270027FFF800280028FFF800290029FFF8002A002BFFF8002B +002BFFF7002C002CFFF7002D002DFFF7002E002EFFF7002F0030FFF700300031FFF60031 +0031FFF600320032FFF600330033FFF600340034FFF600350036FFF500360036FFF50037 +0037FFF500380038FFF500390039FFF5003A003BFFF4003B003CFFF4003C003DFFF4003D +003DFFF4003E003EFFF4003F003FFFF300400041FFF300410041FFF300420042FFF30043 +0043FFF300440044FFF200450046FFF200460047FFF200470047FFF200480048FFF20049 +0049FFF1004A004AFFF1004B004CFFF1004C004DFFF1004D004DFFF1004E004EFFF0004F +004FFFF000500051FFF000510052FFF000520052FFEF00530053FFEF00540054FFEF0055 +0055FFEF00560057FFEF00570058FFEE00580058FFEE00590059FFEE005A005AFFEE005B +005CFFEE005C005DFFEC005D005DFFEC005E005EFFEC005F005FFFEC00600060FFEC0061 +0062FFEB00620062FFEB00630063FFEB00640064FFEB00650065FFEB00660067FFEA0067 +0068FFEA00680068FFEA00690069FFEA006A006AFFEA006B006BFFE9006C006DFFE9006D +006DFFE9006E006EFFE9006F006FFFE900700070FFE800710072FFE800720072FFE80073 +0073FFE800740074FFE800750075FFE700760076FFE700770078FFE700780078FFE70079 +0079FFE7007A007AFFE6007B007BFFE6007C007DFFE6007D007DFFE6007E007EFFE6007F +007FFFE500800080FFE500810082FFE500820083FFE500830083FFE500840084FFE40085 +0085FFE400860086FFE400870088FFE400880088FFE400890089FFE3008A008AFFE3008B +008BFFE3008C008DFFE3008D008EFFE3008E008EFFE2008F008FFFE200900090FFE20091 +0091FFE200920093FFE200930093FFE100940094FFE100950095FFE100960096FFE10097 +0098FFE100980099FFE000990099FFE0009A009BFFE0009B009BFFE0009C009CFFE0009D +009EFFDF009E009EFFDF009F00A0FFDF00A000A0FFDF00A100A1FFDF00A200A3FFDE00A3 +00A4FFDE00A400A4FFDE00A500A6FFDE00A600A6FFDE00A700A7FFDD00A800A9FFDD00A9 +00A9FFDD00AA00ABFFDD00AB00ABFFDD00AC00ACFFDC00AD00AEFFDC00AE00AFFFDC00AF +00B0FFDC00B000B0FFDC00B100B1FFDB00B200B2FFDB00B300B4FFDB00B400B5FFDB00B5 +00B6FFDB00B600B6FFDA00B700B7FFDA00B800B9FFDA00B900BAFFDA00BA00BBFFDA00BB +00BBFFD900BC00BCFFD900BD00BDFFD900BE00BFFFD900BF00C0FFD900C000C1FFD800C1 +00C1FFD800C200C2FFD800C300C4FFD800C400C5FFD800C500C5FFD700C600C6FFD700C7 +00C7FFD700C800C8FFD700C900CAFFD700CA00CBFFD600CB00CCFFD600CC00CCFFD600CD +00CDFFD600CE00CFFFD600CF00D0FFD500D000D0FFD500D100D1FFD500D200D2FFD500D3 +00D3FFD500D400D5FFD400D500D5FFD400D600D7FFD400D700D7FFD400D800D8FFD400D9 +00DAFFD300DA00DBFFD300DB00DCFFD300DC00DCFFD300DD00DDFFD300DE00DEFFD200DF +00E0FFD200E000E0FFD200E100E2FFD200E200E2FFD200E300E3FFD100E400E5FFD100E5 +00E6FFD100E600E7FFD100E700E7FFD100E800E8FFD000E900E9FFD000EA00EBFFD000EB +00EBFFD000EC00ECFFD000ED00EDFFCF00EE00EEFFCF00EF00F0FFCF00F000F1FFCF00F1 +00F2FFCF00F200F2FFCE00F300F3FFCE00F400F4FFCE00F500F6FFCE00F600F7FFCE00F7 +00F7FFCD00F800F8FFCD00F900F9FFCD00FA00FBFFCD00FB00FCFFCC00FC00FDFFCC00FD +00FEFFCC00FE00FEFFCC00FF00FFFFCCB8FFC0401EB229323610B220B240B250B270B280 +B2A0B2B0B2D0B2E0B20AC0B2F0B202B8FFC04070B51718361F44010F561F56024F555F55 +026F54019F54AF54025153170452531604535215044A4952044649370447493204484932 +04493539043C3F32043D3F3D043E3F2104433F1D04423F5204413F5204403F52043F3532 +0432336404333534043534540434351E04D034E034F03403B8FFEEB3B4254836B8FFE0B3 +B4102336B8FFEE400DB4090F36B41A480476B386B302B8FFF0B3B3254836B8FFFA40FFB3 +092436B314480489881304706C7078020F9CDF9E02409D161936409C161B364097171936 +4096171B368685131F0F840F850F8E0F8F0F901F841F8E1F8F2F8E808580888F91908590 +8790880F40820910360F721F72024071090C360F6D0120C80120C7013FC6EFC60220C540 +C50200620100621062024061A061020F5B012D1411042C1425042B1439042A1413042914 +15041F141E042120430420143C04C91A45041A1B47041B1A3C041A143204151439041314 +480412141A0411141A0470140140144143360F0E2A1F0006010DC34B1F0CC24B1F0AC04B +1F09C04B1F05BC4B1F04BD4B1F03B94B1F02BA4B1F01B64B1F00B74B1FC3C22A1FC0BF2A +1FBD4056BC211FBAB9211FB7B6211FC2C3C40DBFC0C10DBCBDBE0CB9BABB0CB6B7B80C10 +BC80BC0240B980B9020FB63FB64FB67FB6040FB62FB63FB66FB67FB6BFB6CFB6FFB6080A +0937040C0D02050402030202010002500501B801FF858D8D1DB0964B5258B0801D59B808 +004B5458B001B0018E59B0084B5358B001B0018E59002B2B2B2B2B737473732B2B2B2B2B +2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB00345B006456861B006234473B00345B00E456861 +B00E2344B00E45B00F456861B00F23442B01B0144568B01423442B732B2B2B2B2B2B2B2B +2B2B2B2B2B2B2B2B7373737373737373732B732B732B2B2B2B2B73732B2B2B2B732B2B2B +2B00752B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73747373742B73742B400C3736 +26251F13120D0C0504022C20B003254523452361688A204568208A234460442D2C4B5258 +45441B2121592D2C202045684420B001602045B0467668188A4560442D2CB0122BB00225 +45B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C +60B0022523442121212D2CB100032545685458B0032545B0032545606820B004252344B0 +042523441BB00325204568208A2344B00325456860B003252344592D2CB0032520456820 +8A2344B00325456860B0032523442D2C4B525845441B2121592D2C462346608A8A462320 +468A608A61B8FF8062232010238AB14B4B8A70456020B0005058B00161B8FFBA8B1BB046 +8C59B0106068013A2D2C2045B003254652583F1B2111592D2C4B53234B515A5820458A60 +441B2121592D2C4B53234B515A58381B2121592D061E061405F005D1047C045D03DD0010 +0000FFE7FFE1FE78FE64FE590394001FFFFF009600AA00B900C600CEFFFFFFFFFFFFFFFF +00BC00C2FFFFFFFF007600B200C000CBFFFFFFFFFFFFFFFFFFFFFFFF0081009400A600CC +00DA00EFFFFFFFFFFFFFFFFF0098009E00AB00B0FFFFFFFFFFFFFFFFFFFFFFFF00900098 +009E00A400A900AE00B300BA00C3FFFF00880091009800A500ACFFFFFFFFFFFFFFFFFFFF +006F0087008F009B00A000D3011DFFFFFFFFFFFF00C3021401C2FFFFFFFF00E9000C02D1 +0173018E001A002C0044005C0073007E008600B200C8014C001A003D00440050005C0072 +0078009200B200B900C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003D0056005D006A +006E00B100B900C1FFFFFFFF002A003D00540064006A00B100B9FFFFFFFFFFFF0071007A +008900A100A700BB006F007A00870091009AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +008102210221007400E500B900CA019502C600AC00A700850614000A000005D1001F0000 +045D001F00000000FFE10000FE64FFF50000036202F402A2029100AF026A004C08000100 +0000000002D0000002D000000326012303AC00A8068C00C30516009B089C009505D00073 +022600A403A200B503A20093051600A7068C00D202E9009303A2009902E900FD03A2FFE2 +0516008905160116051600A1051600A70516004D051600BB051600890516009A0516007A +0516007103A2015A03A200E6068C00FE068C00F5068C010C045D00A0080000B00578001A +057C00C805960073062A00C8050F00C8049900C806340073060300C8035E008903A3002C +058B00CD047400C806BE00C805FC00C8064C007304D300C8064C0073059000C805780086 +04EE000005DB00B20578001A07E9005C057B004404EC0006057B007E03A200EF03A20046 +03A200AB068C00BA0516FFFC0516015404CE006804FC00B9042B006904FC006C04C4006A +02D0004404FC006C051000B9023200AF02C1FFC204BC00C1023200BB07C800B9051000B9 +04DB006A04FC00B904FC006C036A00B9042B006E0327003E051000B104BC003D068C0056 +04BC003C04BC003D0434005D051400AD03A2017A051400BB068C00BB0578001A0578001A +05960073050F00C805FC00C8064C007005DB00B204CE006804CE006804CE006804CE0068 +04CE006804CE0068042B006904C4006A04C4006A04C4006A04C4006A023200A00232FFEB +0232FFF502320005051000B904DB006A04DB006A04DB006A04DB006A04DB006A051000B1 +051000B1051000B1051000B1051600BB0456009A0516009F05160089051600AC045D00B9 +0516008904F600B90800009F0800009F07D000AA0516021D0516015A068C00F507E0000E +064C0073080000A1068C00D7068C00FE068C010C0516006C052200BE0516009505D100BB +068C009005A900710516008A045D0097045D0079068C006B07A4006804DB005D045D0071 +03260123068C00D2068C00860516FFDC068C00F305D10032052800A6052800AE068C00B2 +0578001A0578001A064C0073088F007807DA006A051600990800009903ACFFED03AC0096 +0226FFED022600A0068C00D2068C00AC04BC003D04EC000602E4FF9A0516000003A200BA +03A200C20500004405020044051600BB02E900FD0226FFF603ACFFF60C2C00950578001A +050F00C80578001A050F00C8050F00C8035E0089035E005D035E007E035E0089064C0073 +064C0073064C007305DB00B205DB00B205DB00B2023200BB05160136051600ED05160118 +05160113051602210516012D05160161051601560516019F05160132047E001802460018 +05780086042B006E057B007E0434005D03A2017A0634000E04E5006A04EC000604BC003D +04D800C804FC00B9068C00DC068C012304560123045600CF045600CF080000AB080000AB +0800008C0516003C0634007304FC006C035E008905780086042B006E05960073042B0069 +05960073042B006904FC006C0516FFFC02E900FD0578001A04CE00680578001A04CE0068 +062A00C8052E006C0634000E050F00C804C4006A050F00C804C4006A047400C8023200AB +047400C8025E00BB047400C803AB00BB05FC00C8051000B905FC00C8051000B9064C0073 +04DB006A059000C8036A00B9059000C8036A009205780086042B006E04EE00000327003E +04EE00000327003E05DB00B2051000B105DB00B2051000B1057B007E0434005D057B007E +0434005D048800C8064C0073068D006904FC006C04DD006A041A006D050B006A03F8000A +065200680516FFFC04FF0123045D009A094F00C806F7008904E900AF05D8000002E400D5 +047500D5089C00950296000F04D5009202D6008302D6008304D500B102D600700578001A +04CE006805960073042B006905960073042B0069050F00C804C4006A050F00C804C4006A +050F00C804C4006A0634007304FC006C0634007304FC006C0634007304FC006C060300C8 +051000B90603002005100013035E002C0232FFF2035E005F0232FFFC035E008002320001 +035E00890232008E03A3002C02C1FFC2058B00CD04BC00C104BC00C1047400C802320005 +05FC00C8051000B905FC00C8051000B9064C007304DB006A064C007304DB006A059000C8 +036A001B05780086042B006E04EE00000327003E05DB00B2051000B105DB00B2051000B1 +05DB00B2050B00B105DB00B2050B00B107E9005C068C005604EC000604BC003D026700B9 +0578001A04CE006807E0000E07A40068064C007304DB005D03A2015A07E9005C068C0056 +07E9005C068C005607E9005C068C005604EC000604BC003D0226FFED0516FFD005160089 +05BE00B1080000AB0800008C0800008A0800009901B00061051601610516021205160100 +057800070602000006F6000004510000070C000006070000074300000232FFCB0578001A +057C00C805A0001A050F00C8057B007E060300C8035E0089058B00CD057C001A06BE00C8 +05FC00C805310072064C0073060300C804D300C80561007604EE000004EC0006057B0044 +06F700B3068C006C035E007E04EC000604FC006C041A006D051000B9023200A0050D00B1 +04F600B904BC003D03A9006C051000B904FE0089023200BB04BC00C104BC003D051E00B9 +04BC003D0406006804DB006A050000B904100069050D00B104B80030069300B006820071 +02320005050D00B104DB006A050D00B106820071050F00C80657FFFF048800C8059B0073 +05780086035E0089035E007E03A3002C08F2001208D300C8068BFFFF058B00CD04EC0006 +060300C80578001A057C00C8057C00C8048800C805F7000A050F00C807C9002004ED0051 +060100C8060100C8058B00CD05E0001206BE00C8060300C8064C0073060300C804D300C8 +0596007304EE000004EC0006068D0069057B0044061700C805B2008E083E00C8085C00C8 +06440000075D00C8057200C8059C0061084600C805A6002C04CE006804EA007404C200B9 +03C500B904F9000904C4006A0662003404320041051F00B9051F00B904BC00C104F7001D +059200B9051900B904DB006A051900B904FC00B90446006A03F8000A04BC003D06BA006F +04BC003C052800B904D8008E070200B9071A00B90520000A065B00B9049100B904600053 +06B600B904CC004304C4006A0510001303C500B90460006A042B006E023200AF02320005 +02C1FFC20750001D075000B90510001304BC00C104BC003D051900B9048800C803C500B9 +080000CB096000C8051900B904560119045600EF045600E6045600B3045600E6045600F3 +045600C5000000000000000000000000000000000674007304DB006A060D00B2054700B1 +0000020900000221000001540000021D0516013605160003051601360516012505160142 +051601420516014205160125051602090516013605160142051601420516014205160142 +051601360578001A04CE00680578001A04CE00680578001A04CE00680578001A04CEFFE3 +0578001A04CE00680578001A04CE00680578001A04CE00680578001A04CE00680578001A +04CE00680578001A04CE00680578001A04CE00680578001A04CE0068050F00C804C4006A +050F00C804C4006A050F00C804C4006A050F00C804C4006A050F002904C4FFFC050F00C8 +04C4006A050F00C804C4006A050F00C804C4006A035E008902320096035E0089023200AF +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000064C007304DB006A064C0073 +04DB006A064C007304DB006A064C007304DBFFE5064C007304DB006A064C007304DB006A +064C007304DB006A0674007304DB006A0674007304DB006A0674007304DB006A06740073 +04DB006A0674007304DB006A05DB00B2051000B105DB00B2051000B1060D00B2054700B1 +060D00B2054700B1060D00B2054700B1060D00B2054700B1060D00B2054700B104EC0006 +04BC003D04EC000604BC003D04EC000604BC003D04EC000604BC003D04FC006C000000ED +0516008A0000001F00000380090E09000303050507070B07030404070703050304070707 +070707070707070404070707060A08070808070608080505070609080907090707070808 +090707070404040706060606060606030606030306030906060606040604060607060605 +060506070808080708090806060606060606060606060303030306060606060606060606 +07050707060507060909090606070A090907070707060607070607050507090606050707 +0707070606070808090A0907090404020207070607030604040606070302040E08070807 +070505050509090908080803060606060606060606060603070607050508060706070607 +070505050909090608060507060806080606060308060806080608070607060603060306 +040806080609060704070407060704070408060806070507050609070606050605090606 +050B09060703050B03050303050308060806080607060706070608060806080608060806 +050305030503050305030706060603080608060906090607040706070408060806080608 +06090707060308060A090906040907090709070706020607060909090902060606080809 +060908090308070607070805070809080709080706070707090905070605060306060505 +060603060606060506060506050907030606060707080608070505050A0A070707070807 +070607070906080807070908090807080707070708070909080907080907060606040606 +070506060606070606060606050609060705090907080606080606060406060303030909 +060606060505090B06050505050505050000000009060806000000000606060606060606 +060606060606060806080608060806080608060806080608060806080608060706070607 +060706070607060706070605030503000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000090609060906 +090609060906090609060906090609060906080608060806080608060806080607060706 +07060706060007000A0F0A000404040508070B0703050507080405040507070707070707 +0707070505080808060A070708080606080805050706090709070908070708070B070707 +0505050806060707050707040707030307030B0707070704060407060707060606050608 +070708060709080707070707070507070707030303030707070707070707070707050707 +060507060A0A0A0606080A090A080808070706070807070505080A070604080807080706 +06080707090B0A070A0505030308080607040605050606070403050F0706070606050505 +050909090808080306060606060606060606060307060706050806070607070808050505 +0A0A0A060807050706080508050706040707070708070806070607060306030605070707 +0709070804080407060704070408070807070607060609090707050705090606050C0906 +0704060B0306040406040707080508050607060706070807080708070807080705030503 +0503050305030707070603070707070907090708040706070408070807080708070B0707 +060307070A0A0907050B070B070B070706030607070A0A0A0A0206060607070906090909 +030707070607080507070907070908070707070709090507070507030707070507070307 +0607060507070507060909030707070906080608070505050B0B08070708070707060706 +0906080807070908090807080707090709070B0B080907080A0707070605060707050707 +0706070707070705050609070706090A0708060608060707050606030303090907070607 +06050A0C0705050505050505000000000907080700000000060606060606060606060606 +060606070707070707070707070707070707070707070707070707060706070607060706 +070607060706070503050300000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000009070907090709070907 +090709070907090709070907090708070807080708070807080708070706070607060706 +070007000B110B000404040509070C080305050709040504050707070707070707070705 +05090909060A080809090706090805050806090809070908080708080B08070805050509 +07070707060707040707030407030B070707070506040707090707060705070908080907 +080908070707070707060707070703030303070707070707070707070706070707060707 +0B0B0B0707090B090B090909070707080908070606090B07060409090709080707090808 +090C0B070B05050303090907070407050507070704030511080708070705050505090909 +08080803070707070707070707070603080608060509070707070709090606060B0B0B07 +090705080609060906070704080708070907090707070706030603060508070807090708 +05080508060704070408070807080608060609090707060705090707060D0A070804060C +040704040704080709060906070707070707090709070907080708070503050305030503 +05040807070603080708070907090708050806070408070807080708070B090707030807 +0B0B0907050B090B090B090707030707080B0B0B0B02070707080809060A090903080808 +070808050808090807090807070707080909050707060703070707050707030707070706 +07070607070909030707070907090609080505050D0C090808080808080608070B070808 +08080908090807090708090809080B0C090A07090B080707070508070906070707070707 +07070706050709070807090A080907070A0707070507060303040A0B0707070706050B0D +070606060606060600000000090708070000000007070707070707070707070707070708 +070807080708070807080708070807080708070807080707070707070707070707070707 +070707050305030000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000907090709070907090709070907 +090709070907090709070807080708070807080708070807070707070707070707000700 +0C120C00040405060A080D09030505080904050405080808080808080808080505090909 +070C0808090908070909050508070A090A080A08080709080D0807080505050A08080808 +060808040808030407030B0808080805070508070B0707070805080A08080908090A0908 +08080808080608080808030303030808080808080808080808070808080708070C0C0C08 +08090C0A0C090909080808090A080807070A0B080705090A080A0908080A08080A0D0D08 +0C06060303090A070704080505080808040306120808080808050505050A0A0A09090903 +0808080808080808080807030807080705090707070808090A0707070C0C0C0809080508 +07090609060808040808080809090908080808070307040706090809080A080805080508 +07070507050908090808070807070A0B0808060807090808070E0A070904070D04070404 +070408080906090608080808080809080908090809080908050305030503050305040807 +070703090809080A080A0808050807070509080908090809080D0B07070408080C0B0A08 +050D0B0D0B0D0B0707030808090C0C0C0C0308080808090A060B090B0308080808080905 +08080A09080A0908080707080B0A05070806080308070706080803080708070608080608 +070B0B030808080B080A0709080505050D0D0A0808090808080709080D07090908090A09 +0A09080907080B0809090D0E090B08090C080808070608080B0608080707080808080806 +07070B0709080B0C080907080B0708080608070303040B0B0807070807060C0E08070707 +07070707000000000A080908000000000808080808080808080808080808080808080808 +080808080808080808080808080808080808080808080808080808080808080808080805 +030503000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000A080A080A080A080A080A080A080A080A08 +0A080A080A0809080908090809080908090809080707070707070707080008000D140D00 +050505050A080D09030606090905070506080808080808080808080606090909070D0908 +090908080909050608070B090A080A08090909090D0909090606060B0808080808080805 +0808030407030B0808080805070608080B0708070807080B09090908090A090808080808 +080808080808030303030808080808080808080808070808080708080D0D0D0808090C0A +0D090909080808090B090807070B0B080705090B080B0908080B09090A0E0D080D060603 +03090B080905080606080808050306140908090808050505050A0A0A0909090308080808 +08080808080807030907090707090809080808090B0707070D0D0D080908050907090809 +080808050908090809080908080808070307040706090809080A08080508050907090609 +060908090809070907070A0B08080708070B0808070F0B080A05070E0408050508050908 +090809080808080808080908090809080908090805030503050305030604080707070309 +0809080A080A0808050907090609080908090809080D0B09080409080C0B0A08060D0B0D +0B0D0B0908030808090D0D0D0D0308080809090A060B0A0C030908090809090508090B09 +080A0908090909090B0B05090807080308080906080803080808080708080708080B0B03 +0808080B080A0709090505060F0D0B080909090808070A080D080909080A0B090A090809 +09090B090A090D0E0A0C08090D080808080608080B070808080809080808080807080B07 +09080B0C080907080B0808080608070303040C0D0808080807060D0F0807070707070707 +000000000A08090900000000080808080808080808080808080808090809080908090809 +080908090809080908090809080908080808080808080808080808080808080503050300 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000A080A080A080A080A080A080A080A080A080A080A08 +0A0809080908090909090909090909090908090809080908080008000E150E0005050606 +0B090F0A040606090B050705060909090909090909090906060B0B0B080E0A0A0A0B0908 +0B0A05060A080B0A0B080B0A0A090A0A0F0A090A0606060B090908090709080509090305 +08030D0909090906080609080B0908080906090B0A0A0A090A0B0A080808080808070808 +0808030303030909090909090909090909080909090809090E0E0E09090B0E0B0E0B0B0B +0909090A0B0A0908080B0D0908060B0B090B0A09090B0A0A0B0F0E090E060604040B0B08 +0905090606090909050406150A090A0909050505050B0B0B0A0A0A030909090909090909 +090908030A080A08060B09090808090B0B0808080E0E0E090B09050A080A070A07090905 +0A080A080B090B090809080803080408060A090A090B090A060A060A08090609060A090A +090A080A08080B0B09090709070B090908100C080A05080F0508050508050A080A070A07 +0908090809080B090B090B090A090A09050305030503050306050A080808030A090A090B +090B090A060A0809060A090A090A090A090F0B0908040A080E0D0B09060F0B0F0B0F0B09 +080409090A0E0E0E0E030909090A0B0C070C0B0C030A0A0A090A0A050A0A0B0A090B0A08 +0909090A0B0B05090907090309090906090903080809080709090709080B0B030909090B +090B080A0A050506100F0B0A090B0A0A0A080A090F090B0B0A0A0B0A0B0A080A09090B0A +0B0A0D0E0B0D0A0A0E0A0809080709080B07090908090A090909090807080B090A080B0C +090B08080C0808090708080303050D0D0908080908070E10090808080808080800000000 +0B090B0A000000000909090909090909090909090909090A080A080A080A080A080A080A +080A080A080A080A080A0809080908090809080908090809080908050305030000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000B090B090B090B090B090B090B090B090B090B090B090B090A09 +0A090B0A0B0A0B0A0B0A0B0A0908090809080908090009000F170F00050506070C0A100B +0407070A0C050705070A0A0A0A0A0A0A0A0A0A07070C0C0C080F0A0A0B0B09090C0B0507 +0A080D0B0C090C0A0A090B0A0F0A090A0707070C0A0A0909080909050909030509030F09 +0A090906080609090D0909090A070A0C0A0A0B090B0C0B09090909090908090909090303 +0303090A0A0A0A0A090909090A080A0A0A080A090F0F0F0A0A0C0F0C0F0C0C0C0A090A0B +0C0B0A08080C0E0A08060C0C0A0C0B0A0A0C0A0A0C100F0A0F070704040C0C0909050A07 +0709090A050407170A090A0909050505050C0C0C0B0B0B030A0A0A0A0A0A0A0A0A0A0803 +0A080A09070B09090909090C0C0808080F0F0F0A0C09050A080B080B08090A050A090A09 +0B0A0B090909090803080408070B090B090C0A0A060A060A08090609060B090B090A090A +09090C0D090A080A070B0A0908110D080B0508100509050509050A090B080B0809090909 +09090C090C090C090B090B09050305030503050307050A090908030B090B090C0A0C0A0A +060A0809060B090B090B090B080F0D0909050A090F0E0C0A070F0D0F0D0F0D0909040A0A +0B0F0F0F0F030A0A0A0A0B0D070D0B0D030A0A0B090A0B050A0A0D0B0A0C0B090A09090A +0D0C0509090809030909090709090309090909080A0A0809090B0D03090A090D090C090B +0A05050711110C0A0A0B0A0A0A090B090F090B0B0A0B0D0B0C0B090B090A0D0A0B0B0F10 +0C0E0A0B100A0909090709090D08090909090A090A09090807090D090A090D0E0A0C0908 +0D0909090708080303050E0E0909090909070F120908080808080808000000000C0A0C0A +000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090A090A090A090A090A +090A090A090A090909090909090909090909090909090905030503000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B090B090C0A +0C0A0C0A0C0A0C0A090909090909090909000A0010181000060606070D0A110C0407070A +0D060706070A0A0A0A0A0A0A0A0A0A07070D0D0D09100B0B0B0C0A090C0C07070B090D0C +0D0A0D0B0A0A0C0B110B0B0B0707070D0A0A0A0A080A0A060A0A050609050F0A0A0A0A06 +09070A090D0909090A070A0D0B0B0B0A0C0D0C0A0A0A0A0A0A080A0A0A0A050505050A0A +0A0A0A0A0A0A0A0A0A090A0A0A090A0A1010100A0A0D100D100D0D0D0A0A0A0C0D0B0A09 +090D0F0A09060D0D0A0D0C0A0A0D0B0B0D11100A10070704040D0D090B060A07070A0A0A +060407180B0A0B0A0A070707070D0D0D0C0C0C050A0A0A0A0A0A0A0A0A0A09030A090B09 +070C0A0B090A0A0D0D0909091010100A0C0A070A090B080B080A0A060B0A0B0A0C0A0C0A +0A0A0A0905090509070C0A0C0A0D0A0B060B060A090A070A070C0A0C0A0B090B09090D0D +0A0A090A070D0A0A09130E0B0C060911050A06060A060B0A0B080B080A0A0A0A0A0A0C0A +0C0A0C0A0C0A0C0A070507050705070507060B090909050C0A0C0A0D0A0D0A0B060A090A +070C0A0C0A0C0A0C0A110D0B09050B0A100F0D0A07110D110D110D0B09040A0A0B101010 +10030A0A0A0B0C0E090E0C0E050B0B0B0A0B0C070B0B0D0C0A0D0C0A0B0A0B0B0D0D070B +0A090A050A0A09070A0A0509090A09080A0A080A090D0D050A0A0A0D0A0D090B0A070707 +12120D0B0B0B0B0B0B090C0A110A0C0C0B0C0D0C0D0C0A0B0A0B0D0B0C0B0F100D0E0B0B +110B0A0A0A080A0A0D090A0A090A0B0A0A0A0A0907090D090A0A0D0E0A0C09090D0A0A0A +0809090505060F0F0A09090A090810130A09090909090909000000000D0A0D0B00000000 +0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B +0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0705070500000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0A0C0A0D0B0D0B0D0B +0D0B0D0B0B090B090B090B090A000A00111A1100060607080E0B120C0508080B0E060806 +080B0B0B0B0B0B0B0B0B0B08080E0E0E09110C0C0C0D0B0A0D0D08080C090E0D0D0A0D0C +0C0A0C0C110C0A0C0808080E0B0B0A0B090B0A060B0B05060A05110B0A0B0B0709070B0A +0E0A0A090B080B0E0C0C0C0B0D0D0C0A0A0A0A0A0A090A0A0A0A050505050B0A0A0A0A0A +0B0B0B0B0B090B0B0B090B0B1111110B0B0E110D110E0E0E0B0B0B0C0E0C0B09090E100A +09070E0E0B0E0C0B0B0E0C0C0D12110B11080805050E0E0A0A060B08080B0B0B0605081A +0C0B0C0B0B080808080D0D0D0C0C0C050B0B0B0B0B0B0B0B0B0B0A050C090C09080D0A0A +0A0A0B0E0E0909091111110B0D0B080C090C090C090B0B060C0A0C0A0D0B0D0B0A0B0A09 +05090509080D0B0D0B0D0A0C070C070C090A070A070C0B0C0B0C090C090A0D0E0B0A080B +080D0B0B09140F0A0C060912060A06060A060C0A0C090C090B0A0B0A0B0A0D0B0D0B0D0B +0D0B0D0B080508050805080508060C0A0A09050D0B0D0B0D0A0D0A0C070C090A070C0B0C +0B0C0B0C0B110E0A0A050C0A11100D0A08110E110E110E0A0A050B0B0C11111111040B0B +0B0C0D0F090F0D10050C0C0C0B0C0D080C0C0E0D0B0D0D0A0B0A0A0C0F0E080A0B080B05 +0B0B0A080B0B050A0A0B0A090A0B090B0A0E0E050B0A0B0E0B0D0A0C0C08080813130E0C +0A0D0C0C0C0A0D0B110A0D0D0C0D0E0D0D0D0A0C0A0A0E0C0D0C12120D100C0C120C0A0A +0A080B0A0E080B0B0A0B0C0B0A0B0B09080A0D0A0C0A0F0F0B0E0A090E0A0A0B08090905 +050610100B0A0A0B0A0811140B09090909090909000000000D0A0D0B000000000B0B0B0B +0B0B0B0B0B0B0B0B0B0B0B0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B +0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A080508050000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000D0A +0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0B0C0B0D0B0D0B0D0B0D0B0D0B +0A0A0A0A0A0A0A0A0B000B00121B1200060607080F0B130D0508080B0F070807080B0B0B +0B0B0B0B0B0B0B08080F0F0F0A120C0C0D0E0B0A0E0E08080C0A0F0D0E0B0E0D0C0B0D0C +120C0B0C0808080F0B0B0B0B090B0B060B0B05060B05120B0B0B0B0809070B0B0F0B0B09 +0B080B0F0C0C0D0B0D0E0D0B0B0B0B0B0B090B0B0B0B050505050B0B0B0B0B0B0B0B0B0B +0B0A0B0B0B0A0B0B1212120B0B0F120E120F0F0F0B0C0B0D0F0D0B0A0A0F110B0A070F0F +0B0F0D0C0C0F0C0C0E13120B12080805050F0F0B0B070B08080B0B0B0705081B0C0B0C0B +0B080808080E0E0E0D0D0D050B0B0B0B0B0B0B0B0B0B0A050C090C09080E0B0B0B0B0B0F +0F0A0A0A1212120B0E0B080C090D090D090B0B070C0B0C0B0E0C0E0B0B0B0B0A050A050A +080D0B0D0B0E0B0D080D080C090B070B070D0B0D0B0C090C090A0E0E0B0B090B090E0B0B +0A15100B0D070A13060B06060B060C0B0D090D090B0B0B0B0B0B0E0B0E0B0E0B0E0B0E0B +080508050805080508060C0B0B0A050D0B0D0B0E0B0E0B0D080C090B070D0B0D0B0D0B0D +0B120F0B0B050C0B12110E0B08120F120F120F0B0B050B0B0D12121212040B0B0B0C0E10 +0A100E10050C0C0D0B0C0E080C0C0F0D0C0E0E0B0C0B0B0C100E080B0B090B050B0B0B08 +0B0B050B0B0B0B090B0B090B0B0F0F050B0B0B0F0B0E0A0D0C08080814140F0C0B0E0C0C +0C0A0D0B120B0E0E0C0D0F0E0E0E0B0D0B0B0E0C0E0D13130E110C0D130D0B0B0B080B0B +0E090C0C0B0B0D0B0B0B0B0A090B0F0B0C0B10100C0E0A0A0F0B0B0B080A090505061010 +0B0B0B0B0A0812150B0A0A0A0A0A0A0A000000000E0B0D0B000000000B0B0B0B0B0B0B0B +0B0B0B0B0B0B0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0B0B0B0B0B +0B0B0B0B0B0B0B0B0B0B0B08050805000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000E0B0E0B0E0B +0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0B0B0B0B +0B0B0B0B0B000B00131D130007070709100C140E0509090C10070907090C0C0C0C0C0C0C +0C0C0C09091010100A130D0D0D0F0C0B0F0E08090D0B100E0F0B0F0D0D0C0E0D130D0C0D +090909100C0C0B0C0A0C0B070C0C06070B06120C0C0C0C080A070C0B100B0B0A0C090C10 +0D0D0D0C0E0F0E0B0B0B0B0B0B0A0B0B0B0B060606060C0C0C0C0C0C0C0C0C0C0C0A0C0C +0C0A0C0C1313130C0C10130F131010100C0C0C0E100D0C0A0A10120C0A0710100C100E0C +0C100D0D0F14130C130909050510100B0C070C09090C0C0C0705091D0D0C0D0C0C080808 +080F0F0F0E0E0E060C0C0C0C0C0C0C0C0C0C0B060D0A0D0A090F0C0C0B0C0C10100A0A0A +1313130C0F0C080D0A0D0A0D0A0C0C070D0B0D0B0F0C0F0C0B0C0B0B060B060B090E0C0E +0C0F0C0D080D080D0A0C070C070E0C0E0C0D0A0D0A0B0F100C0C0A0C090F0C0C0A16110C +0E070B14060B07070B070D0B0D0A0D0A0C0B0C0B0C0B0F0C0F0C0F0C0E0C0E0C08060806 +0806080609070D0B0B0B060E0C0E0C0F0C0F0C0D080D0A0C070E0C0E0C0E0C0E0C13100C +0B060D0B13120F0C091310131013100C0B050C0C0E13131313040C0C0C0D0E110A110E11 +060D0D0D0C0D0E080D0D100E0C0F0E0B0D0C0C0D110F080C0C0A0C060C0C0B090C0C060B +0B0C0B0A0C0C0A0C0B100F060C0C0C0F0C0F0B0D0D0808091515100D0C0E0D0D0D0B0E0C +120C0E0E0D0E100E0F0E0B0D0C0C100D0E0E14140F110D0D140D0B0C0B090C0B0F0A0C0C +0B0C0D0C0C0C0C0A090B100B0D0C11110C0F0B0A100B0B0C090A0A06060711110C0B0B0C +0B0913160C0A0A0A0A0A0A0A000000000F0C0E0C000000000C0C0C0C0C0C0C0C0C0C0C0C +0C0C0C0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0C0B0C0B0C0B0C0B0C +0B0C0B0C0B0C0B0806080600000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000F0C0F0C0F0C0F0C0F0C +0F0C0F0C0F0C0F0C0F0C0F0C0F0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0C0B0C0B0C0B0C0B +0C000C00141E140007070809100D160F0509090D10070907090D0D0D0D0D0D0D0D0D0D09 +091010100B140E0E0E0F0D0C100F08090E0B110F100C100E0E0C0F0E140E0C0E09090910 +0D0D0C0C0A0C0C070C0D06070C06130D0C0C0C090A080D0C100C0C0B0D090D100E0E0E0D +0F100F0C0C0C0C0C0C0A0C0C0C0C060606060D0C0C0C0C0C0D0D0D0D0D0B0D0D0D0B0D0C +1414140D0D101310141010100D0D0D0F100E0D0B0B10130C0B0810100D100F0D0D100E0E +1015140D140909050510100C0C070D09090D0D0D0705091E0E0D0E0D0D08080808101010 +0F0F0F060D0D0D0D0D0D0D0D0D0D0B060E0A0E0B09100C0C0C0C0C10100B0B0B1414140D +100C080E0A0E0A0E0A0C0D070E0C0E0C0F0D100D0C0D0C0B060B060B090F0D0F0D100C0E +090E090E0A0C080C080F0D0F0D0E0B0E0B0B10100C0C0A0D0A100D0C0B17110C0F070B16 +060C07070C070E0C0E0A0E0A0D0C0D0C0D0C100C100C100C0F0D0F0D0806080608060806 +09070E0C0C0B060F0D0F0D100C100C0E090E0A0C080F0D0F0D0F0D0F0D14100C0C060E0C +1313100C091410141014100C0C050D0D0E14141414040D0D0D0E0F110B120F12060E0E0E +0D0E0F080E0E110F0D100F0C0D0C0C0E1110080C0C0A0D060D0C0C090D0C060C0C0D0C0A +0C0D0A0D0C1010060D0C0D100D100B0E0E0808091616100E0C0F0E0E0E0B0F0D130C0F0F +0E0F110F100F0C0E0C0C100E0F0E151510120E0E150E0C0C0C090C0C100A0D0D0C0C0E0D +0C0D0C0B0A0C110C0D0C12120D100B0B110C0C0D090B0A06060712120D0C0C0D0B091417 +0D0B0B0B0B0B0B0B00000000110C0F0D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E +0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0D0C0D0C0D0C0D0C0D0C0D0C0D +0C0D0C080608060000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000100C100C100C100C100C100C100C +110C110C110C110C110C0F0D0F0D0F0D0F0D0F0D0F0D0F0D0C0C0C0C0C0C0C0C0C000D00 +152015000707080A110D170F060A0A0D11080A080A0D0D0D0D0D0D0D0D0D0D0A0A111111 +0B150E0E0F100D0C1010080A0F0C1210110D110F0E0D0F0E150E0D0E0A0A0A110D0D0D0D +0B0D0D070D0D06070C06140D0D0D0D090B080D0C110C0C0B0D0A0D110E0E0F0D10110F0D +0D0D0D0D0D0B0D0D0D0D060606060D0D0D0D0D0D0D0D0D0D0D0B0D0D0D0B0D0D1515150D +0D111411151111110D0D0D0F110F0D0B0B11140D0B0811110D110F0E0E110E0E1116150D +150A0A060611110C0D080D0A0A0D0D0D08060A200E0D0E0D0D080808081111110F0F0F06 +0D0D0D0D0D0D0D0D0D0D0C060E0B0E0B0A100D0D0C0D0D11110B0B0B1515150D100D080E +0B0F0B0F0B0D0D080E0D0E0D100E100D0D0D0D0C060C060C0A100D100D110D0F090F090E +0B0D080D080F0D0F0D0E0B0E0B0C11110D0D0B0D0A110D0D0B18120D0F080C17070D0707 +0D070E0D0F0B0F0B0D0D0D0D0D0D100D100D100D100D100D08060806080608060A070F0C +0C0C06100D100D110D110D0F090E0B0D080F0D0F0D0F0D0F0D15110D0C060E0D1414110D +0A1511151115110D0C060D0D0F15151515040D0D0D0E10120B131013060E0E0F0D0E1008 +0F0E12100E11100D0E0D0D0E1211080D0D0B0D060D0D0C0A0D0D060C0C0D0C0B0D0D0B0D +0C1111060D0D0D110D110C0F0E08080A1717110F0D100E0E0E0C100D140D10100F0F1210 +11100D0F0D0D110E100F161610130E0F160F0D0D0C0A0D0D110B0D0D0C0D0F0D0D0D0D0B +0A0C120C0E0D12130D110C0B120D0D0D0A0B0B06060713130D0C0C0D0C0A15190D0B0B0B +0B0B0B0B00000000120D100D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0D0E0D0E +0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D08 +060806000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000110D110D110D110D110D110D110D120D120D +120D120D120D0F0D0F0D100D100D100D100D100D0D0C0D0C0D0C0D0C0D000D0016211600 +0808090A120E1810060A0A0E12080A080A0E0E0E0E0E0E0E0E0E0E0A0A1212120C160F0F +0F110E0D11110A0A0F0C1310110D110F0F0E100F160F0E0F0A0A0A120E0E0D0E0B0E0D08 +0E0E06080D06150E0D0E0E090B090E0D120D0D0C0E0A0E120F0F0F0E1011100D0D0D0D0D +0D0B0D0D0D0D060606060E0D0D0D0D0D0E0E0E0E0E0C0E0E0E0C0E0E1616150E0E121511 +161212120E0E0E1012100E0C0C12150D0C0912120E12100E0E120F0F1118160E160A0A06 +0612120D0E080E0A0A0E0E0E08060A210F0E0F0E0E0A0A0A0A111111101010060E0E0E0E +0E0E0E0E0E0E0C060F0B0F0C0A110D0E0D0D0E12120C0C0C1616160E110E0A0F0B0F0B0F +0B0E0E080F0D0F0D110E110E0D0E0D0C060C070C0A100E100E110D0F090F090F0B0E090E +09100E100E0F0C0F0C0C11120E0D0B0E0B110E0E0C1A130E10080C18070D08080D080F0D +0F0B0F0B0E0D0E0D0E0D110E110E110E110E110E0A060A060A060A060A080F0D0D0C0610 +0E100E110D110D0F090F0B0E09100E100E100E100E16120E0D070F0D1515110D0A161216 +1216120E0D060E0E1016161616050E0E0E0F11130C131114060F0F0F0E0F110A0F0F1310 +0E11110D0F0E0E0F13120A0E0E0B0E060E0E0D0A0E0E060D0D0E0D0B0D0E0B0E0D121206 +0E0D0E120E110C0F0F0A0A0A1918120F0E110F0F0F0C100E150E11110F10131111110D0F +0E0E120F1110171711140F0F17100D0E0D0A0E0D120C0E0E0D0E0F0E0D0E0E0C0B0D130D +0E0D13140E110D0C120D0D0E0A0C0B06060814140E0D0D0E0C0A161A0E0C0C0C0C0C0C0C +00000000120D110F000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0D0F0D0F0D0F0D0F +0D0F0D0F0D0F0D0F0D0F0D0F0D0F0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0A060A0600 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000110D110D110D110D110D110D110D120D120D120D120D +120D100E100E110F110F110F110F110F0E0D0E0D0E0D0E0D0E000E00172317000808090B +130F1911060A0A0F13080A080A0F0F0F0F0F0F0F0F0F0F0A0A1313130D17101010120F0D +12110A0A100D1311120E1210100E111017100E100A0A0A130F0F0E0E0C0E0E080E0F0608 +0E06160F0E0E0E0A0C090F0E130E0E0C0F0A0F131010100F1112110E0E0E0E0E0E0C0E0E +0E0E060606060F0E0E0E0E0E0F0F0F0F0F0C0F0F0F0D0F0E1717160F0F13161217131313 +0F0F0F1113100F0D0D13160E0D0913130F13110F0F1310101219170F170B0B060613130E +0E080F0A0A0E0E0F08060B23100F100F0F0A0A0A0A121212111111060F0F0F0F0F0F0F0F +0F0F0D06100C100C0A120E0E0E0E0E13130C0C0C1717170F120E0A100C100C100C0E0F08 +100E100E120F120F0E0F0E0D060D070D0B110F110F120E100A100A100C0E090E09110F11 +0F100C100C0D12130E0E0C0F0B120F0E0D1B140E11080D19070E08080E08100E100C100C +0F0E0F0E0F0E120E120E120E110F110F0A060A060A060A060A08100E0E0D06110F110F12 +0E120E100A100C0E09110F110F110F110F17130E0E07100E1616120E0A1713171317130E +0E060F0F1117171717050F0F0F1011140C141115061010100F10110A101013110F12110E +0F0E0E1014130A0E0E0C0F060F0E0E0B0F0E060E0E0F0E0C0E0E0C0F0E1313060F0E0F13 +0F120D10100A0A0A1A1913100E111010100D110F160E11111011131112110E100E0E1310 +121018181215101018100E0E0E0B0E0E120C0F0F0E0E100F0E0F0E0C0B0E130E0F0E1414 +0F120D0D130E0E0F0B0D0C06060815150F0E0E0F0D0B171B0F0C0C0C0C0C0C0C00000000 +130E1110000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E10 +0E100E100E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A060000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000120E120E120E120E120E120E120E130E130E130E130E130E110F +110F111011101110111011100E0E0E0E0E0E0E0E0E000F00182518000808090B140F1A11 +060B0B0F14090B090B0F0F0F0F0F0F0F0F0F0F0B0B1414140D18101011130F0E13120A0B +110D1412130E1311100F121018100F100B0B0B140F0F0E0F0D0F0E080F0F06080E06170F +0F0F0F0A0D090F0E140E0E0D0F0B0F141010110F1213120E0E0E0E0E0E0D0E0E0E0E0606 +06060F0F0F0F0F0F0F0F0F0F0F0D0F0F0F0D0F0F1818170F0F141713181414140F0F0F11 +14110F0D0D14170F0D0914140F14110F0F141010131A180F180B0B060614140E0F090F0B +0B0F0F0F09060B25100F100F0F0A0A0A0A131313121212060F0F0F0F0F0F0F0F0F0F0D06 +100D100D0B130F0F0E0F0F14140D0D0D1818180F130F0A100D110D110D0F0F09100E100E +1310130F0E0F0E0D060D070D0B120F120F130F110A110A100D0F090F09120F120F100D10 +0D0E13140F0F0C0F0C130F0F0D1C150F12090D1A080F09090F09100E110D110D0F0E0F0E +0F0E130F130F130F120F120F0A060A060A060A060B08110E0E0D06120F120F130F130F11 +0A100D0F09120F120F120F120F18140F0E07100E1717130F0B1814181418140F0E060F0F +1118181818050F0F0F1012150D151216061010110F10120A111014121013120E100F0F10 +15140A0F0F0C0F060F0F0E0B0F0F060E0E0F0E0C0F0F0C0F0E1414060F0F0F140F130E11 +100A0A0B1B1A14110F121010100E120F170F12121112141213120E110F0F141012111919 +1316101119110E0F0E0B0F0E130D0F0F0E0F110F0F0F0F0D0C0E140E0F0F15150F130E0D +140E0E0F0B0D0D06060816160F0E0E0F0E0B181C0F0D0D0D0D0D0D0D00000000130F1210 +000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E100E100E10 +0E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A06000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000130F130F130F130F130F130F130F130F130F130F130F130F120F120F1210 +12101210121012100F0E0F0E0F0E0F0E0F000F001B291B000A0A0B0C16111D14070C0C11 +160A0C0A0C111111111111111111110C0C1616160F1B12131315111015140B0C130F1714 +15101513121114121B1311130C0C0C16111110110E11100A1111070910071A111011110C +0E0B11101610100E110C1116121213111415141010101010100E10101010070707071110 +1010101011111111110F1111110F11111B1B1A1111161B151B161616111111141613110F +0F161A100F0B16161116141111161212151D1B111B0C0C0707161610110A110C0C111111 +0A070C2912111211110B0B0B0B15151514141407111111111111111111110F07120E130E +0C15111110101116160F0F0F1B1B1B1115110B120E130E130E11110A1210121015111511 +1011100F070F080F0C141114111510130C130C120E110B110B14111411130E130E0F1516 +11100E110D1511110F1F1811140A0F1D09100A0A100A1210130E130E1110111011101511 +15111511141114110B070B070B070B070C091310100F071411141115101510130C120E11 +0B14111411141114111B1611100812101B1A15100C1B161B161B161110071111131B1B1B +1B061111111214180F181419071213131113140B13131714121514101211111318160B11 +110E11071111100C111107101011100E10110E11101616071110111611150F13120B0B0C +1E1E161311141213130F14111A11141413141714151410131111161315131C1C15191213 +1C131011100D1110160E1111101113111011110E0D1017101110181811150F0F17101011 +0D0F0E0707091919111010110F0D1B20110F0F0F0F0F0F0F000000001610141200000000 +111111111111111111111111111111121012101210121012101210121012101210121012 +101210111011101110111011101110111011100B070B0700000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000015101510151015101510151015101610161016101610161014111411141214121412 +141214121110111011101110110011001D2C1D000A0A0B0D18121F15080D0D12180B0D0B +0D121212121212121212120D0D181818101D14141416121116160D0D1410181617111714 +141215141D1412140D0D0D18121211120F12110A1212090A11091C121212120C0F0B1211 +1811110F120D1218141414121617151111111111110F1111111109090909121212121212 +1212121212101212121012121D1D1C1212181D171D181818121312151815121010181C12 +100B18181218151313181414171F1C121D0D0D0808181811120A120D0D1212120B080D2C +14121412120D0D0D0D17171715151509121212121212121212121009140F140F0D161212 +11121218181010101D1D1D1216120D140F140F140F12120B141114111613161211121110 +091009100D161216121712140C140C140F120B120B15121512140F140F10171812120F12 +0E17121210221912150A101F09120A0A120A1411140F140F121112111211161216121612 +161216120D090D090D090D090D0A14111110091612161217121712140C140F120B151215 +12151215121D1812110914111D1C17120D1D181D181D181211081212151D1D1D1D061212 +12141619101A161A091414141214160D14141816131716111412121419180D12120F1209 +1212110D121209111113110F12120F12111818091212121812171014140D0D0D20201814 +12161414141016121C12161614151816171611141212181416151E1E171B14141E141112 +110E1211170F1313111214121212120F0E1118111312191A13171110181111120E100F09 +090A1B1B12111112100E1D22121010101010101000000000171216130000000012121212 +121212121212121212121214111411141114111411141114111411141114111411141112 +1112111211121112111211121112110D090D090000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000001712 +171217121712171217121712171217121712171217121512151216131613161316131613 +121112111211121112001200203120000B0B0D0F1A142217090F0F141A0C0F0C0F141414 +141414141414140F0F1A1A1A112016161619141219180D0F16121B181913191616141716 +201614160F0F0F1A141413141114130B1414090B13091F141314140E110D14131A131311 +140F141A1616161418191713131313131311131313130909090914131313131314141414 +141114141411141420201F14141A1F19201A1A1A141514171A171411111A1F13110D1A1A +141A1715151A161619221F14200F0F09091A1A13140C140F0F1414140C090F3116141614 +140D0D0D0D19191917171709141414141414141414141209161116110F1914141313141A +1A1111112020201419140D16111611161114140C16131613191519141314131209120912 +0F181418141913160E160E1611140D140D171417141611161112191A1413101410191414 +11251C14170C12220A130B0B130B16131611161114131413141319141914191418141814 +0D090D090D090D090F0B16131312091814181419131913160E1611140D17141714171417 +14201A14130A16131F1F19130F201A201A201A141309141417202020200714141416181C +111C181D091616171416180D16161B1815191813161414161C1A0D14141014091414130F +141409131314131013141014131A1A091413141A14191216160D0D0F24231A1614181616 +161218141F14181816181B181918131614141A1618172121191D161621171314130F1413 +1A111414131416141314141110131B1315131C1C151912121B1313140F121109090B1D1D +14131314120F20261411111111111111000000001A131815000000001414141414141414 +141414141414141613161316131613161316131613161316131613161316131413141314 +13141314131413141314130D090D09000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000191319131913 +19131913191319131A131A131A131A131A13171417141815181518151815181514131413 +1413141314001400213221000C0C0D0F1B152418090F0F151B0C0F0C0F15151515151515 +1515150F0F1B1B1B12211717171915131A190D0F17121C191A141A171714181721171417 +0F0F0F1B151514151115140C1515090B140920151415150E110D15141B141411150F151B +17171715191A181414141414141114141414090909091514141414141515151515121515 +1512151421212015151B201A211B1B1B151515181B171512121B2014120D1B1B151B1815 +151B17171A232015210F0F09091B1B14140C150F0F1515150C090F3217151715150D0D0D +0D1A1A1A18181809151515151515151515151309171117110F1A14141414151B1B121212 +212121151A150D17111711171115150C1714171419151A151415141209120A120F191519 +151A14170E170E1711140D140D1815181517111711131A1B15141115101A151512261D14 +180C12240B140C0C140C1714171117111514151415141A151A151A15191519150D090D09 +0D090D090F0B1714141209191519151A141A14170E1711140D1815181518151815211B14 +140A171420201A140F211B211B211B141409151518212121210715151517191D121D191E +091717171517190D17171C19151A1914161414171D1B0D14151115091514140F15150914 +1415141114151115131B1B091514151B151A1317170D0D0F25241B171419171717131915 +2014191917181C191A19141714141B17191822221A1E161722171414141015141A111515 +141417151415151210141C1415141D1D151A13121C14141510121109090B1E1E15141415 +131021271512121212121212000000001B14191600000000151515151515151515151515 +151515171417141714171417141714171417141714171417141714151415141514151415 +141514151415140D090D0900000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000001A141A141A141A141A14 +1A141A141B141B141B141B141B1418151815191619161916191619161414141414141414 +15001500253825000D0D0F111E18281B0A1111181E0D110D111818181818181818181811 +111E1E1E142519191A1D17151D1C10111A151F1C1D161D1A19171B19251917191111111E +181816171317160D17170A0D160A241716171710130F17161E1616131711171E19191A17 +1C1D1B16161616161613161616160A0A0A0A171616161616171717171814181818141817 +25252418181E241D251E1E1E1818181B1E1A1814141E2316140F1E1E181E1B18181E1919 +1D2824182511110A0A1E1E16170D1811111717180D0A11381917191717101010101D1D1D +1B1B1B0A18181818181818181818150A19131913111D17171616171E1E14141425252518 +1D171019131A131A1317180D191619161D181D17161716150A150B15111C171C171D161A +101A101913170F170F1B171B1719131913151D1E17171317121D1817142B20171B0D1528 +0C160D0D160D19161A131A131716171617161D171D171D171C171C17100A100A100A100A +110D1A1616150A1C171C171D161D161A101913170F1B171B171B171B17251E17160B1916 +24231D1611251E251E251E17160A18181B2525252508181818191C2014211C220A19191A +17191C101A191F1C181D1C1619171719201E10171713170A1717161117170A1616181613 +16171317161E1E0A1716171E171D151A1910101129291E1A171C191919151C1724171C1C +1A1B1F1C1D1C161A17171E191C1A26271D22191A261A1617161117161E13181816171A18 +1618171412161F1618162021181D15141F1616171114130A0A0D2222171616181511252B +1814141414141414000000001E161C180000000018181818181818181818181818181819 +161916191619161916191619161916191619161916191617161716171617161716171617 +161716100A100A0000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000001D161D161D161D161D161D161D16 +1E161E161E161E161E161B171B171C181C181C181C181C18171617161716171617001800 +2A402A000F0F1113221B2D1F0B13131B220F130F131B1B1B1B1B1B1B1B1B1B1313222222 +172A1D1D1D201B18212012131D17231F2119211D1D1A1F1D2A1D1A1D131313221B1B191A +161A190F1A1B0C0E190C291B191A1A1216111B19221919161B131B221D1D1D1B1F211F19 +191919191916191919190C0C0C0C1B19191919191B1B1B1B1B171B1B1B171B1A2A2A291B +1B222A212A2222221B1B1B1F221E1B1717222819171122221B221F1B1B221D1D212D291B +2A13130B0B2222191A0F1B13131A1A1B0F0B13401D1B1D1B1B121212122121211F1F1F0C +1B1B1B1B1B1B1B1B1B1B180C1D161D1613211A1A19191A22221717172A2A2A1B211A121D +161D161D161A1B0F1D191D19201B211B191B19170C170C17131F1B1F1B21191D121D121D +161A111A111F1B1F1B1D161D161821221A1A161A15211B1A1731251A1F0F172D0E190F0F +190F1D191D161D161B191B191B19211A211A211A201B201B120C120C120C120C130E1D19 +19170C1F1B1F1B211921191D121D161A111F1B1F1B1F1B1F1A2A221A190D1D192A282119 +132A222A222A221A190B1B1B1E2A2A2A2A091B1B1B1D2025172520260C1D1D1E1B1D2012 +1D1D231F1B2120191C1A1A1D2522121A1A161B0C1B1A19131B1A0C19191B1915191A151B +1923220C1B191B221B21181D1D1212132F2E221D1A201D1D1D181F1B291A20201D1F2320 +2120191D1A1A221D201E2B2C21271D1D2B1E191A19141A1922161B1B191A1D1B191B1A16 +151923191B1925251B2118172319191B1417160C0C0E26261B19191B18142A311B171717 +17171717000000002219201C000000001B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1D191D191D +191D191D191D191D191D191D191D191D191D191B191B191B191B191B191B191B191B1912 +0C120C000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000211921192119211921192119211922192219 +2219221922191F1B1F1B201C201C201C201C201C1A191A191A191A191A001B002E462E00 +10101215261D32210C15151D26111511151D1D1D1D1D1D1D1D1D1D1515262626192E1F20 +20231D1A24231215201A2722241C24201F1C221F2D201C20151515261D1D1C1D181D1B10 +1D1D0C101B0C2D1D1C1D1D1418121D1B261B1B181D151D261F1F201D2224221C1C1C1C1C +1C181B1B1B1B0C0C0C0C1D1C1C1C1C1C1D1D1D1D1D191D1D1D191D1D2E2E2D1D1D262E24 +2E2626261D1E1D2126211D1919262C1C191226261D26211E1E261F1F24312D1D2E15150C +0C26261B1C111D15151D1D1D110C15461F1D1F1D1D121212122424242222220C1D1D1D1D +1D1D1D1D1D1D1A0C1F18201815241C1C1B1C1D26261919192E2E2E1D241D121F18201820 +181D1D111F1C1F1C231E241D1B1D1B1A0C1A0E1A15221D221D241C201420141F181C121C +12221D221D201820181A24261D1C181D17241D1D1936281C22111A320F1C10101C101F1C +201820181D1B1D1B1D1B241D241D241D231D231D120C120C120C120C1510201B1B1A0C22 +1D221D241C241C20141F181C12221D221D221D221D2D261C1B0E1F1C2E2C241C152D262D +262D261C1B0C1D1D212E2E2E2E0A1D1D1D1F23281929232A0C1F20201D20231220202722 +1E24231C1F1C1C202826121C1D181D0C1D1D1B151D1D0C1B1B1D1B171C1D171D1B26250C +1D1C1D251D241A201F121215333326201C231F20201A221D2D1C23232022272324231C20 +1C1C262023212F30242A1F2030201C1C1B161D1B25181D1D1B1D201D1C1D1D19171B271B +1E1C28291D251A19271C1B1D1619180C0C102A2A1D1B1B1D1A162E361D19191919191919 +00000000251C231E000000001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1F1C1F1C1F1C1F1C1F +1C1F1C1F1C1F1C1F1C1F1C1F1C1F1C1D1B1D1B1D1B1D1B1D1B1D1B1D1B1D1B120C120C00 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000241C241C241C241C241C241C241C251C251C251C251C +251C221D221D231E231E231E231E231E1C1B1C1B1C1B1C1B1D001D00324C320012121417 +292036240D17172029121712172020202020202020202017172929291B3222222327201D +27261517231C2A25271E2723221F252231221F221717172920201E1F1A1F1E121F200F11 +1E0F31201E1F1F151A14201E291E1E1A20172029222223202527251E1E1E1E1E1E1A1E1E +1E1E0F0F0F0F201E1E1E1E1E20202020201B2020201B201F323231202029322732292929 +202020242923201B1B29301E1B1429292029242020292222273531203217170D0D29291E +1F122017171F1F20120D174C2220222020151515152727272525250F2020202020202020 +20201C0F221A221A17271F1F1E1E1F29291B1B1B32323220271F15221A231A231A1F2012 +221E221E272027201E201E1C0F1C0F1C1725202520271E23152315221A1F141F14252025 +20221A221A1C27291F1E1A201928201F1B3A2C1F25121C36101E12121E12221E231A231A +201E201E201E271F271F271F26202620150F150F150F150F1711231E1E1C0F2520252027 +1E271E2315221A1F14252025202520252031291F1E0F221E3230271E173129312931291F +1E0D202024323232320B20202022262C1B2C262D0F2222232022261523222A252027261E +221F1F222C29151F1F1A200F201F1E17201F0F1E1E201E191E1F19201E29290F201E2029 +20281C2322151517383729231F262222221C2520311F262623252A2627261E231F1F2922 +26243434272E222334231E1F1E181F1E281A20201E1F23201E201F1B191E2A1E201E2C2C +20281D1B2A1E1E20181B1A0F0F112E2E201E1E201C18323B201B1B1B1B1B1B1B00000000 +281E262100000000202020202020202020202020202020221E221E221E221E221E221E22 +1E221E221E221E221E221E201E201E201E201E201E201E201E201E150F150F0000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000271E271E271E271E271E271E271E281E281E281E281E281E2520 +2520262126212621262126211F1E1F1E1F1E1F1E1F00200036523600131315192C223A27 +0F1919222C141914192222222222222222222219192C2C2C1D362525262A221F2A291719 +251E2E282B212B2625212825352521251919192C222220221C22201322220F13200F3522 +212222171C1522202C20201C2219222C25252622282B282020202020201C202020200F0F +0F0F22212121212122222222221D2222221D222136363522222C362B362C2C2C22232227 +2C26221D1D2C34211D152C2C222C2723232C25252B3A35223619190F0F2C2C2021142219 +19222222140F19522522252222171717172B2B2B2828280F222222222222222222221E0F +251C251C192A21212021222C2C1D1D1D363636222A2217251C261C261C22221425202520 +2A232A222022201E0F1E101E19282228222B2126172617251C2115211528222822251C25 +1C1F2B2C22211C221B2B22221D3F2F2127141E3A1121131321132520261C261C22202220 +22202A222A222A2229222922170F170F170F170F19132520201E0F282228222B212B2126 +17251C21152822282228222822352C212010252036342B2119352C352C352C21200F2222 +27363636360B22222225292F1D3029310F2525262225291725252E28232B292124212125 +2F2C1721221C220F2221201922220F202023201B21221B22202C2C0F2221222C222B1F26 +251717193C3C2C2521292525251F28223521292925282E292B29212621212C2529263838 +2A32252638262021201922202B1C2323202226222122221D1B202D2023212F30232B1F1E +2D202022191E1C0F0F133131222020221F19363F221D1D1D1D1D1D1D000000002C212924 +000000002222222222222222222222222222222520252025202520252025202520252025 +2025202520252022202220222022202220222022202220170F170F000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000002B212B212B212B212B212B212B212C212C212C212C212C21282228222924 +29242924292429242120212021202120220022003A583A001414171B2F253E2A101A1A25 +2F151A151A252525252525252525251A1A2F2F2F203A2828292D25212D2C181A2820312B +2E232E2828242A28392824281A1A1A2F252523241E24231424250F14220F382523242419 +1E1725222F22221E251A252F282829252B2E2A2323232323231E232323230F0F0F0F2523 +2323232325252525251F2525252025243A3A3925252F392E3A2F2F2F2525252A2F292520 +202F372320172F2F252F2A25252F28282E3E39253A1B1B10102F2F222415251A1A242425 +15101B582825282525181818182E2E2E2A2A2A0F25252525252525252525210F281E281E +1A2D23242223242F2F1F1F1F3A3A3A252D2418281E291E291E242515282328232D262D25 +232523200F2011201B2B252B252E2328192819281E241724172A252A25281E281E212E30 +24231E251D2E2524204333242A15203E1323151523152823291E291E2523252325232D24 +2D242D242C252C25180F180F180F180F1A14282222200F2B252B252E232E232819281E24 +172A252A252A252A25392F242211282339372E231A392F392F392F24221025252A3A3A3A +3A0C252525282C321F332C350F28282925282C182828312B262E2C2327242428332F1824 +241E250F2524221B25240F222225221D23241D2522302F0F2523252F252E21292818181A +41402F28242C282828212B2538242C2C282B312C2E2C2329242430282C293C3D2D352729 +3C292324231B24232E1E2525222428252325241F1D22312225233333252E212031232325 +1B201E0F0F14353525222225211B3A44251F1F1F1F1F1F1F000000002F232C2600000000 +252525252525252525252525252525282328232823282328232823282328232823282328 +23282325232523252325232523252325232523180F180F00000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00002E232E232E232E232E232E232E232F232F232F232F232F232A252A252C262C262C26 +2C262C262422242224222422240025004366430018181A1F372B4831121E1E2B37181E18 +1E2B2B2B2B2B2B2B2B2B2B1E1E37373725432E2E2F342A2734321D1E2E2538323528352F +2E29312E422E292E1E1E1E372B2B282A232A28182A2A12172812412A292A2A1D231A2A28 +372828232B1E2B372E2E2F2A3235312828282828282328282828121212122A2929292929 +2A2A2A2A2B242B2B2B252B2A4343412B2B374335433737372B2B2B31372F2B2525374029 +251A37372B37312B2B372E2E3548422B431F1F121237372829182B1E1E2A2A2B18121F66 +2E2A2E2A2A1D1D1D1D353535313131122B2B2B2B2B2B2B2B2B2B26122E232E231E342929 +28292A37372424244343432B342A1D2E232F232F232A2B182E282E28342B342A282A2825 +122514251F322A322A35292F1D2F1D2E23291A291A312A312A2E232E232635372A29222A +21352B2A254E3A29311825481628181828182E282F232F232A282A282A28342A342A342A +322A322A1D121D121D121D121E172E28282512322A322A352935292F1D2E23291A312A31 +2A312A312A42372928142E28434035291E4237423742372928122B2B30434343430E2B2B +2B2E323A243B323D122E2E2F2A2E321D2E2E38322B3532282D29292E3A371D292A222A12 +2A2A281F2A2A1228282B2822292A222A283737122A292A372A35262F2E1D1D1E4B4A372E +29322E2E2E26322A412932322E3138323532282F2929372E33304546343E2E2F452F2829 +28202A2835232B2B282A2F2B292B2A24212838282B293B3B2B3526253828282A20252312 +12173D3D2A28282B2620434F2B24242424242424000000003629332C000000002B2B2B2B +2B2B2B2B2B2B2B2B2B2B2B2E282E282E282E282E282E282E282E282E282E282E282E282A +282A282A282A282A282A282A282A281D121D120000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000003529 +35293529352935293529352936293629362936293629312A312A332C332C332C332C332C +29282928292829282A002B004B724B001A1A1E223D305137142222303D1B221B22303030 +3030303030303022223D3D3D294B3333343A2F2B3A381F22342A3F383B2D3B34332E3733 +4A332E332222223D30302D2F272F2D1A2F2F151A2C15492F2E2F2F20271E2F2C3D2C2C27 +3022303D3333342F383B372D2D2D2D2D2D272D2D2D2D151515152F2E2E2E2E2E2F2F2F2F +302930303029302F4B4B4930303D4A3B4B3D3D3D303030373D353029293D482E291E3D3D +303D3730303D33333B504A304B222214143D3D2C2E1B3022222F2F301B142272332F332F +2F1F1F1F1F3B3B3B37373715303030303030303030302A1533273327223A2E2E2C2D2F3D +3D2929294B4B4B303A2F1F3327342734272F301B332D332D3A313A2F2D2F2D2A152A162A +22382F382F3B2E3420342033272E1E2E1E372F372F332733272A3B3D2F2E262F253B302F +2957412E371B2A51182D1B1B2D1B332D342734272F2D2F2D2F2D3A2F3A2F3A2F382F382F +1F151F151F151F15221A342C2C2A15382F382F3B2E3B2E342033272E1E372F372F372F37 +2F4A3D2E2C17332D4A483B2E224A3D4A3D4A3D2E2C143030364B4B4B4B10303030333841 +28423944153333352F33381F34333F38313B382D322E2E33413D1F2E2F262F152F2F2C22 +2F2F152C2C302C262E2F262F2C3E3D152F2E2F3D2F3B2A35331F1F2254533D342E383333 +332A382F492E383834373F383B382D342E2E3D3339354D4E3B4533354E352D2E2D232F2D +3C2730302C2F34302E302F28252C3F2C302D4243303C2B293F2D2D2F23292715151A4545 +2F2C2C302A234B583029292929292929000000003D2E3931000000003030303030303030 +30303030303030332D332D332D332D332D332D332D332D332D332D332D332D2F2D2F2D2F +2D2F2D2F2D2F2D2F2D2F2D1F151F15000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000003B2E3B2E3B2E +3B2E3B2E3B2E3B2E3D2E3D2E3D2E3D2E3D2E372F372F393139313931393139312E2C2E2C +2E2C2E2C2F003000537E53001D1D21264435593C16262635441E261E2635353535353535 +35353526264444442D5339393A403430403E22263A2E463E4132413A39333D3952393339 +26262644353532342B34311D3435181D31185135323434232B2135314431312C35263544 +39393A343E413D3232323232322B313131311818181835323232323235353535352D3535 +352D35335353513535445241534444443535353C443B352D2D444F322D21444435443C36 +36443939415951355326261616444431331E3526263434351E16267E3934393434222222 +224141413D3D3D18353535353535353535352F18392B392C2640333331323444442D2D2D +53535335403422392B3A2B3A2B34351E39323932403640343134312E182E192E263E353E +3541323A233A23392B332133213D353D35392C392C2F414434322B34294235342D614833 +3D1E2E591B321D1D321D39323A2B3A2B3431343134314034403440343E353E3522182218 +22182218261D3A31312E183E353E35413241323A23392B33213D353D353D353D34524433 +31193932524F41322652445244524433311635353C5353535312353535393E482D493F4B +1839393A34393E223A39463E36413E323833333948442233342B35183433312635341831 +3135312A32342A34314444183432344434422F3A392222265D5C443A333E3939392F3E34 +51333E3E3A3D463E413E323A333344393F3B5657414C393A563B323331273431422C3535 +31343A353235342C293146313632494A35422F2D46323135272D2B18181D4C4C35313135 +2F275361352D2D2D2D2D2D2D0000000043323F3700000000353535353535353535353535 +353535393239323932393239323932393239323932393239323932343134313431343134 +313431343134312218221800000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000041324132413241324132 +41324132433243324332433243323D353D353F373F373F373F373F373331333133313331 +340035005C8C5C002020242A4B3A6343192A2A3A4B212A212A3A3A3A3A3A3A3A3A3A3A2A +2A4B4B4B325C3F3F40473A354745272A40334E45483748403F39433F5B3F393F2A2A2A4B +3A3A373930393720393A18203618593A3839392730243A364B3636303A2A3A4B3F3F403A +4548433737373737373037373737181818183A38383838383A3A3A3A3A323A3A3A323A39 +5C5C5A3A3A4B5B485C4B4B4B3A3B3A434B413A32324B583832244B4B3A4B433B3B4B3F3F +48625A3A5C2A2A19194B4B3639213A2A2A3A3A3A21192A8C3F3A3F3A3A27272727484848 +434343183A3A3A3A3A3A3A3A3A3A34183F303F302A4738393638394B4B3232325C5C5C3A +4739273F3040304030393A213F373F37473C473A373A373318331B332A453A453A483840 +2740273F3039243924433A433A3F303F3034484B39382F3A2E493A39326B503843213363 +1E38212138213F37403040303A373A373A37473947394739453A453A2718271827182718 +2A204036363318453A453A4838483840273F303924433A433A433A433A5B4B39361C3F37 +5B5848382A5B4B5B4B5B4B3936193A3A425C5C5C5C133A3A3A3F455032514554183F3F41 +3A3F4527403F4E453C4845373E39393F504B2739392F3A183A39362A3A391836363B362E +383A2F3A364C4B183A383A4B3A4934403F27272A67654B4039453F3F3F34453A5A394545 +40444E454845374039394B3F46425F6048553F415F413739372B393749303B3B3639403B +383B39312E364D363B3851523B4935324D37373A2B323018182054543A36363B342B5C6C +3B32323232323232000000004A38463D000000003A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3F +373F373F373F373F373F373F373F373F373F373F373F373A373A373A373A373A373A373A +373A37271827180000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000004838483848384838483848384838 +4A384A384A384A384A38433A433A463D463D463D463D463D393639363936393639003A00 +649864002323272E52406C491B2D2D4052242D242D404040404040404040402D2D525252 +37644445464D3F394E4B2A2D4538544B4F3C4F46443E494463453E452D2D2D5240403C3E +343E3C233E3F1B223B1B613F3D3E3E2B34273F3B523B3B353F2D3F524444463F4B4F493C +3C3C3C3C3C343C3C3C3C1B1B1B1B3F3D3D3D3D3D3F3F3F3F403640404037403E64646240 +4052634F6452525240404049524740373752603D3727525240524940405244444F6B6240 +642E2E1B1B52523B3E24402D2D3F3F40241B2E98443F443F3F2A2A2A2A4F4F4F4949491B +40404040404040404040381B443445352D4E3D3E3B3D3E5252363636646464404E3E2A44 +34463446343E4024443C443C4D414E3F3C3F3C381B381E382E4B3F4B3F4F3D462B462B44 +343E273E27493F493F45354535394F523E3D333F324F403E3774573D4924386C203C2323 +3C23443C463446343F3C3F3C3F3C4E3E4E3E4E3E4B3F4B3F2A1B2A1B2A1B2A1B2D22453B +3B381B4B3F4B3F4F3D4F3D462B44343E27493F493F493F493F63523E3B1E443C63604F3D +2D6352635263523E3B1B4040486464646415404040444B5736584B5B1B4445463F454B2A +4545544B414F4B3C433E3E4557522A3E3E333F1B3F3E3B2E3F3E1B3B3B403B323D3F333F +3B52511B3F3D3F513F4F3946442A2A2D706E52453E4B444545394B3F613E4B4B4549544B +4F4B3C463E3E52454C4767694E5C444667473C3D3B2F3E3C503440403B3E46403D403E35 +323B543B403D5859404F3937543C3C3F2F37341B1B225B5B3F3B3B40392F647540363636 +3636363600000000513D4C4200000000404040404040404040404040404040443C443C44 +3C443C443C443C443C443C443C443C443C443C3F3C3F3C3F3C3F3C3F3C3F3C3F3C3F3C2A +1B2A1B000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000004F3D4F3D4F3D4F3D4F3D4F3D4F3D513D513D +513D513D513D493F493F4C424C424C424C424C423E3B3E3B3E3B3E3B3E00400000020100 +000007000600000300070014B706020400060204002FCDDDCD002FCDDDCD313021112111 +2521112101000600FA800500FB000600FA0080050000000201230000020305D100030007 +0027401703030202075505080F0901005D042B035D0F051F0502052F5DE4FDE45D003FED +332F3F3130010323031323353302031AAA1CD6CCCC05D1FBC90437FA2FD3000200A803D1 +0304061400030007002640150206060307010F09400902032C0040000100042C072FED33 +5D2FED5D003F3C332F3C3130010323032303230303042B842BA82B842B0614FDBD0243FD +BD024300000200C3000005C905D1001B001F00B1407140215609740570097B137B167B17 +7B1A080A091E1D160F1501671501151E0C0F1013140B1407081F1C17001801681801181E +0502011A06190662191462700B010B03110B111903040D001B011B1B0D171A011D0410B5 +131E020509040CB50F070F1318040B00140114030F0B4F0B020B08003F5D3F5D1217392F +ED17392FED1739012F332F5D1217392F2F2F5DE42FE4313087C0C0C0C0FD5D71C0C0C0C0 +C08710C0C0C0C0FD5D71C0C0C0C0C0015D01210321152103231321032313213521132135 +2113330321133303210521032105C9FEB35C0134FEA9688168FEF2688168FED6014D5CFE +CC0157698169010E698169012AFE35FEEE5E011203A4FE8887FE5B01A5FE5B01A5870178 +8701A6FE5A01A6FE5A85FE840003009BFE9704880628002C0033003A00BC408D7D087E16 +70197620702C7A36060E16012B1B16122B230D350D3C163C24352B430D4A164C24432B5A +08532053335A356B0865206529632B6A30643A171D40090B371D382E11221D2226471B18 +312D1227373400030A067F1E011E050A11470A05060F3C1F3C0221210334207F00010031 +201818063F094F09020900112D1B1E263706031E0930064006700603062F5D33ED173932 +2F5D12392FED2F5DED12392F5D002F3333ED2F2F2F5D121739ED33332F1139392F2B3130 +5D5D011406071123112E012735331E01171E0117112E01272E01353436371133111E0117 +15232E0127111E01171E0125110E0115141601342627113E010488F2C47684E855101362 +2E348B4F28441DA38EE9D17665D4480E4BA3851E461A95A3FDD46B926C02007584788101 +7C9BCD13FE960165013127C60E351113210301B1080F0829A57994CC110110FEF2022C1D +C42E4709FE51051105209CE8019D08655A5B5CFE585E5719FE620C6200050095FFE30807 +05ED000B000F001B00270033009C40720908060A0918061A0F351808170A1818171A2908 +260A2918261A460D480F4035560D580F680E13791F7625792B76310425512F034F030203 +031F5109020F030E082B51201940190219193151130A4F0C400E020C0E2E2A0016011616 +282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D123939ED33 +2F5DED2F2F5D003FED332F5DED3F3F3FED332F5DED5D3130015D01140623222635343633 +321625012309011406232226353436333216013426232206151416333236013426232206 +1514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6BAFABB59 +64665858666459049359646658586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADC +DDE0DADA01B8AC8888ADAD8787FE17AC8888ADAD878700030073FFE1061305F0000B0018 +004500E1406F090F190F3C0C3015301D352D3E3D4F1A471D4F44791C0B6A25603F7B0576 +087B0F761D7A25703E703F090508062A06371408161D142A1437153F290C2A1D26373008 +300A4008400A490C41144F1C431D46204C21412D413C5108590D5B25690566086B0F601D +1E3F0C161D20231903B8FFC0403B12173703AA190D2C093E05233502163F230A1E082C0D +3E032F00143806142F3F0C4513201D2F38041A26001E011E1E45140D1A011A1A13152673 +4610F6ED332F5DED332F5D11121739111239392FED2FED121739003F3FED3F121739ED2B +2F12393912393931305D5D015D013426232206151416173E0113010E01070E0115141633 +323601151406070123270E01232224353436373E01372E01353436373E01333216151406 +070E0107013E0137362635031871585C744F836265C2FE221F3E1F1C24AB9D5DB7016B32 +3C017AF6E573F07FD0FEED34232368356E61353532A161ADD6181D20765E01730E0E0102 +0104A75F6D7B594B744F2387FD0001D20F312A276E4592B35B02AE6060F06DFE90E08E71 +F3C55C86312F531F48926F437932303CAF862C6F2C315A20FE96286034388A30000100A4 +03D10182061400030015400A020203010F0501002C032FED5D003F332F31300103230301 +822B882B0614FDBD0243000100B5FE64030F061400150048403709010907190119072803 +28054F01480348054F075F015F076F016F077F01780278067F07120701010C7A04010830 +000100000F1F04881610F4ED332F5D3C5D003F3F3130015D012326021110123733150E01 +070602151412171E0117030FE5B1C4C4B1E551933F3C4B493E3C9A4DFE64CB01E0012D01 +2D01E0CB0A49BF7F7BFED8A4ABFEE4807BC7450000010093FE6402ED06140015004E403D +060306131503151326012603261326154701400340134715500350136003601379007602 +700370137614151201040C750001123F040104040B1F00921710F6ED332F5D3C5D003F3F +3130015D0110020723353E01373612353402272E01273533161202EDC4B1E54D9B3B3E49 +4A3D3F9351E5B1C4023CFED3FE20CB0A45C77B80011CABA401287B7FBF490ACBFE200001 +00A70276047106140011009040094F1301114009103708B8FFC040580910375B025B0554 +0B540E6B026B05640B640E7B027B05730B730E0C01060F0A0B0E08110502060C064F0450 +0402040A0F0C01040C010F131F130200110D4010011008070C4F090109100E020304050B +060D2809700C010C2F5D33ED1739322F5D1239392F5D1239395D003F335D332F5D331217 +392F332F3331305D012B2B5D01072513231305272D013705033303251705047140FE9606 +8105FE9741017DFE8341016A068107016B40FE8403776ED5FE980168D66ECFCF6ED50167 +FE99D46ECD00000100D2001B05BA04FD000B0039402303AC01045408AC0A0F070107400D +01300D400D0200AB0A800101012A05AB07400401042F5D3CE4FD5D3CE45D5D002F5D3CE4 +FD3CE4313001211123112135211133112105BAFDDFA6FDDF0221A60221023CFDDF0221A0 +0221FDDF00010093FE8E023F011D0003003540261A012A012B0235003902450048025500 +590264007400C5030C0202035604000004021A0202022F5D332F0010F4322F3130015D09 +012313023FFEE692AE011DFD71028F00000100990231030902E600030020401401420F02 +01020F054F004F055F005F05050000022F332F5D002F5DED3130012135210309FD900270 +0231B500000100FD000001EC011D00030016400C02560108002D2F013F0102012F5DED00 +3FED31302123113301ECEFEF011D0001FFE2FED0035C0614000300364025030100050116 +01250138004900440156016701770186010A011202032F02010200010000022F332F003F +2F5D31300187ED5D87C009012301035CFD33AD02CA0614F8BC07440000020089FFE1048F +05EF000B0023004140303601390B340C3B123B18341E4501490B440C4B124B18441E0C15 +4909022149030A0F21009E250F251F25021B2106982410F6ED5D10F6ED003FED3FED3130 +5D011002212002111012212012013E01353426272E01232206070E01151416171E013332 +36048FFBFEF8FEF4F7FA0109010CF7FEF92319192423795F5E7B24221916242179645E7C +02E9FE6FFE89017C018A018D017BFE7FFCB551DB9A98E04E4D4E4E4F4AEE8E9CD2534E52 +4E00000101160000043C05D6000F003A4023054606060C030E034801080F111F11020502 +1F0F010F0F0C0E20023F036F03700303032F5D33ED39322F5D2F335D003FFD323F332FED +3130290135211121353236373E0137331121043CFCDA0136FECA3F90252E35049B013098 +03E6881514194D41FAC2000100A10000049105F000200097407B501F601F020503061116 +03151124113B05380D350E3F1D3F1E391F4B05480D450E4F1D4F1E491F5F035D045D055B +0956115F195E1B5D1C5F1D5F1E6A036406651162156F1E700274117F1A7F1C7F1E25000F +100F2D082F1C300F400F060F0F0B4A1302021F4A01081F0208211616209E220F221F2202 +101002992110F6322F5D10F6322FED1239003FFD323FED332F5D31305D015D2901353E01 +373E013534262322060723353E01333204151406070E01070E0107210491FC1069D35BC0 +8E99895BD4650A47ED6FE501042B2A27694B6BE4630321D15AB459BADB7F74834042D223 +3ADDBD5593423E784969C554000100A7FFE1047C05F0003D009540700B0B052F1A0B152F +290B262F293C3C0B35143122342F4A0B45144322432F56015905590B552F6A0B662F6A3C +780B762F74357B3C1A343A443A023B3A1E491F012D112D022D2D294A1F0931020F0D1F0D +020D0D114A090A2321371E2E1621032E1E3A37040C03A03F0F3F1F3F020C9A3E10E65D10 +E611173910ED2F2F2FED003FED332F5D3F1239ED332F5D2FFD39395D31305D011E011514 +06070E012322262735331E01333236373E01353426272E012B0135333236353426272E01 +2322060723353E01333216171E0115140607151E01040E303E4A434BCB797CF04D0F55E6 +6B3F8E2C2E2D332D2D804A5A4698B52E292B623E5FD65F0A47ED6F6DA643484AAF77307C +02CD2B826766AA3F46433B23D1384A2A292C6A5150691E1F17A67F7A36511A1A14443ED1 +233B282C30885B7CB9180E0833000002004D000004B305D1000A000D00684041040D140D +240D340D440D700D060C0D480606070C0607090D4901050503070303083F0A4F0A020A0F +0F1F0F02070C04200A090D064F060101010F061F063F0603062F5D332F5D12393333ED39 +395D2F5D003F3F12392F3CFD321239393130018710FD04C0015D01231123112135013311 +3321110104B3DDC0FD3702D1B8DDFE63FDBF01A3FE5D01A3E60348FC7202A0FD60000001 +00BBFFE1048505D1002A0070404E0A081A082B083D0835113D164B0844115A0854296A08 +7A080C1D1D1A490F251F2540250325214A25061E020F0A1F0A020A0A0E4A060A2022204F +1D011D142100201D09009F2C0F2C1F2C02099B2B10E65D10E611393910ED2F5DED2F003F +ED332F5D3F1239ED2F5DFD322F31305D011406070E012322262735331E01333236373E01 +353426272E012322060711211521113E01333216171E0104854C4248C7837AE24E0E52DC +6A4785342C2D352F34955C58A33B0380FD412B5A2179B64C505801D968BE41464B3324D3 +344928322B784F4D6A20261F180C02FFAFFE740404293437AE0000020089FFE104A705ED +0022003700644044060D160D3925333133374925423143375F01560D5020502165217531 +0E1A0329491D1313174A1D030F023549030A1A2C2F122321001209009C390F391F39022F +2109983810F6ED5D10E6113910ED2F123939003FED3F1239FD322F2FED123931305D0114 +002322262726023534123736243332161715232E01232200073E01333216171E01073426 +272E01232206070E01151416171E0133323604A7FED5D96EB445565D555D580116B93B50 +290A1C713BD7FF001554A36B5F914C5859CB373F2E703D55924D020241392E6B3F91A601 +E3E3FEE14443530112C1C6013277717F0A0DBF0F1BFEF3E5333523353DBA8D5D7A2D2014 +282A16291F9EB7352C29B1000001009A0000049505D10006004F403209010A0224014801 +4B0258027903070301000120020203000002034A050302080F081F087B02030300020204 +0F00010000042F332F5D12392F12395D003F3FFD11392F3130018710ED87C0015D090123 +012135210495FD5ED602CDFCB003FB04F2FB0E0522AF0003007AFFDE049C05F300190028 +0037009440702D2B3415332234273433441541224427453350155B195A1B5A1F54225F2B +592C5F31543354376008620E6212621960236027760E76127B2C86121DA926A62F022616 +0A2F04031D4710023548030A1A200013011313002F0A0D292100162620009D390F391F39 +0220210D0D322106973810F6ED332FED5D10E411393910ED11393911332F71ED003FED3F +ED1217395D31305D01140023222435343637352E0135342433320415140607151E010334 +26232206151416171E01173E01133426272E01270E01151416333236049CFED3E4F2FEE1 +908378730114D5DF010A7E7A8C94EDA5807EA15152258B42634C1F51762F705D5A6DBA8F +92AF019FC1FF00FAC37CC93B06409872A8E0D6A565C337063CB0024F6B7F786648692912 +3A13428EFD735C6F3816262231A86A87B09600020071FFE3048F05EF0022003700644045 +0804190429043C253C2B352E4C254C2B432E58045F175D18521B70017B250F111D324914 +294914061D020A0A0E4A060A351109232100091A009E390F391F39022C211A963810F6ED +5D10E6113910ED2F3939003FFD322F3F1239ED2FED123931305D01140207060423222627 +35331E01333212370E01232226272E01353400333216171612073426272E012322061514 +16171E01333236373E01048F595A5BFEEEB9345C240A1D6A41DDFB145DA4615C954B5859 +012CD86CB845555CCA40382F6C3F90A736402D6C424EA04601030342C3FEC270727C0B0C +BF0F1B0109E9383024343DBC83E4011E434353FEFBA49BBC342D27B4A35F782D1F152A28 +15290002015A00000249045D00030007001E4010015602050656050807002D0600010101 +2F5D3CFD3C003FED3FED313001231133112311330249EFEFEFEF0340011DFBA3011D0002 +00E6FE8E0292045D00030007004C40370A050A061A051A062A052B063504390645044806 +5504590664047404C5070F01560205060607560806063F044F04020404002D000101012F +5DFD322F5D332F0010F4322F3FED3130015D01231133130123130249EFEF49FEE692AE03 +40011DFCC0FD71028F00000100FE004D058004CB0006005E401073050105045403020306 +540001002C00B8FFE240260A1837031E0A1837031F002F0002030F000100400801300840 +080204050100004001500102012F5D332F1239395D5D002F5D335D2F2B2B31304B535887 +10FD8710FD05C059015D250135011509010580FB7E0482FC72038E4D02017C0201B4FE75 +FE75000200F5016A059703AE00030007003540200554060154060F020102400901300940 +09020405012F004000020000400101012F5D332F5D1239395D5D002F5D33ED2FED313001 +213521112135210597FB5E04A2FB5E04A2030EA0FDBCA0000001010C004D058E04CB0006 +006040107C030103045405050602540101002C01B8FFE240280A1837051E0A1837051F01 +2F0102050F010101400801300840080203050100002F013001400103012F5D332F123939 +5D5D002F5D335D2F2B2B31304B53588710FD8710FD05C059015D09013509013501058EFB +7E038EFC720482024EFDFFB4018B018BB4FDFF00000200A0000003ED05EF001C00200069 +40470F221F2224140335184F024F034F0544185C0554186904691064187418741C0C0870 +090109061A1E161612341A02081F551E08202B1F1F061F7F0901090F1509172000010000 +172F332F5D1239ED2F5DED332FED003FED333FFD322F111239395D2F31305D015D011406 +070E01071523113E01373E013534262322060723353E013332160123353303ED46393892 +52B34197303A4099796CC1380A46D760D7F9FE75CCCC047362993B39642FE1013125582D +346F56716F4423CC1B2BD1FAE2D3000200B0FF1E074E05EF0042004F00D640A206020F04 +0B050A090F1B0E1C0F3F0F4016021F041C051F1B1F1C142214271F3F1F4125022C042C05 +2F1B2F1C242220272F3F2F414740444856481D0A05052759496E09650D691A6821652766 +3F664174167B1B70277439743B0F120511081247520E1440151B371404044D53082D2D2A +510E083D311E51313D020F2D012D051143122D144A123F0B010B0F512051021829140B37 +0F0020007F000300002429376B5010F6ED332F5D123939ED5D2F5DED2F33FD32322F5D00 +3F33ED2F123939ED332F2FED332FCD2B2FED331239392F31305D015D0114020721270E01 +23222635341233321617353311333E013534022726242322040706021514121716043332 +3637150E0123222427260235341237362433320417161201112E01232206151416333236 +074E514BFE481B4A8858A8C9F6AB4970419FF32A2B5B5858FEFCA5A0FEF75F606D685F63 +010A9D56B75461A859BAFEC2727380867474013EB5C401346A6A71FD8F3F64398192747B +438602978BFEFC6B743C40FEE4E3010E212130FCB64BE159A4010C606067746262FEEF9A +A5FEEF61656716188E150F7F72730142C3B9013F7575867C7070FEC5FE4002061D19B4A6 +A3A73E000002001A0000055E05D10007000A009840694009014A0645070209090A080287 +01010114000700090A0387040104140505067C067307020334300A400A700A030A090A06 +03017A050105080F0C0106070903050C002400390042005A006A0074000700006E0C0F0C +010A052B0536054D05550565057B050705640B10E65D5D10F62F5D1217395D003F5D3C3F +39392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D005D2123032103230121 +130901055ED392FD7C92C9021E01087CFEFBFEFA019FFE6105D1FC7802DBFD25000300C8 +0000052B05D100150024003300524033050C150C270C550256157F190612112C341E1E07 +1D3408032D3407081615122C0F0F0725150071350F354035021E2C14076C3410F6FD325D +10F6ED12392F1239ED003FED3FED12392FED39393130015D011406070E01232111213216 +171E0115140607151E01013426272E012B0111213236373E01133426272E012321112132 +36373E01052B544754C99BFDF001B9A3A24A524A6C5A97AEFEB324282F8663EC01005D6E +2F2F277F3647308962FEC9010682A635383401CA6FAA37423805D118262B875E6A952D08 +1FCB0204364A171B0DFE52131E1E5FFD9A5A6A25190FFDD61B24276400010073FFE50546 +05EC002A0061404A05010D09061416011B0914152515361543145B08580A580E5B105B28 +600361147002760F70141316161A3412022A2A2634060A1600712C0F2C010F2C1F2C2F2C +3F2C6F2C0520150C682B10F6ED5D5D10F63C003FED332F3FED332F3130015D250E01070E +012322242726023534123736243332161715232E01232206070E01151416171E01333236 +373305463759483D8F56A2FEF762606C68625F010DA478EF920F7BF28A71B547454D5543 +46BB688FFA6D0E6C182A17131B5B615F0125C2B801226461663A49EB675E494D4BE5969D +E2474A476262000200C8000005B205D1000E001D003A4027391249126902680D04163408 +03173407087600010F1500741F0F1F2F1F401F601F041714076C1E10F6ED5D10F6ED5D00 +3FED3FED3130015D011402070E01232111213204171612073426272E012B011133323637 +3E0105B2B19366FBCDFE880174DA01015998AACF7A7958C68ABABA8FD5596F6F02E7CBFE +B65B3F3805D13F375FFEC4D6AFF0453227FB832A3947E800000100C80000049D05D1000B +003B402309350006100602060601053502030A350108040008010800730D0F0D01060914 +016C0C10F6FD325D10F63C5D3C003FED3FED12392F71ED31302901112115211121152111 +21049DFC2B03D5FCF1030FFCF1030F05D1B0FE68B0FDD700000100C80000047F05D10009 +0034401E053502020701350803070800034F0B02030300640B0F0B01020514076C0A10F6 +FD325D10F4322F5D003F3FED12392FED313001211121152111231121047FFD0F0287FD79 +C603B70521FE5CB0FD3305D100010073FFE305A205EC00240069404907010906060E1D06 +130E210E350E4901410E510E6506650B630E740E741C0F223540230123230C0310101734 +0C021D34030A7609012210220910216C0075260F264026021A1509682510F6ED5D10F6ED +3312392F2F5D003FED3FED332F1112392F5DED3130015D25060423222427260235100021 +32041715232E01272E01232200111000213236371121352105A27AFEDF87AEFEDE666770 +01A1016C7F010999121F763945AF6FFAFEDD0130010660BF48FE7102536E385360606101 +23C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAE00000100C80000053B +05D1000B003A4023033500081008020808050A070301050809021400780D0F0D400D500D +03080314056C0C10F6FD325D10F6FD32003F3C3F3C12392F71ED31302123112111231133 +11211133053BC6FD19C6C602E7C602D9FD2705D1FDB8024800010089000002D505D1000B +002E401909043206030A033201080D6D0A080B5A0A140305025A036D0C10F6F43210FDF4 +3210E6003FFD323FFD32313029013533112335211523113302D5FDB4C3C3024CC3C39804 +A19898FB5F000001002CFFEB02EA05D100150030401C6A017C01021233150307070B3403 +09131312140077170F170106651610E65D10F6ED332F003FFD322F3FED31305D01140623 +22262735331E01333236373E01351121352102EAEFC930A0360B29783F5C6D1A1B0FFEC5 +02010183C4D4110CB90E1E2A2728744C03659E00000100CD0000057505D1000B00A74075 +190956015C09030509280938094A0968098A09D809070F010A091E0119022A012B093901 +3909350B49014909450B5C01650B72007908100202038801C8010201B3000B000809B302 +0B0A030A840A010802050A07030105080B02030A0A0F0D20003000400004500001006E0D +400D01080314056C0C10F6FD325D10F65D5D322F123939003F3C3F3C1239393130015D87 +10C0C07AFD1804C00187107AFD5D1808C0015D71722901010711231133110133010575FE +FFFDB394C6C602D3F0FD6702979EFE0705D1FCF70309FD44000100C80000047605D10005 +002040110203043501080000070F07010414016C0610F6ED5D11332F003FED3F31302901 +113311210476FC52C602E805D1FADF00000100C8000005F605D1000C00794059560A0138 +023805360A6F0260036F05600A7F0270037F05700A0B5509560A5A0B0364037403750903 +050A020309000410043404440454046A04060404070B0903010708090A0B030502140078 +0E0F0E1F0E500E030513076C0D10F6ED5D10F6ED111739003F3C3F3C12392F5D12173931 +30015D72005D722123110123011123112109012105F6C6FE6276FE65B9010E018D018001 +130503FC970369FAFD05D1FCC3033D00000100C80000053805D10009006B404E0C071F07 +34074507510761077107077606010F0102061F0115063406440653066B0160067F017006 +0B0C010406025A01550602020701080603010408060102071300780B0F0B400B02021304 +6C0A10F6ED5D10F6FD113939003F3C3F3C12393931300172715D5D005D21230111231121 +0111330538F5FD3EB901330284B90534FACC05D1FB4004C000020073FFE105DA05F00017 +002300564042040004060B0C0B1217001706190C19125701570553075F0B580D58115F13 +53171076097915021B3415022134090A18150373250F25010F251F253F25031E150F6824 +10F6ED5D5D10F6ED003FED3FED5D3130015D011612151402070E01232224272602353412 +373624333216131000232200111000333200051E5B6163595CFBA19DFEFF5A5A61605C58 +01059AA0FF47FEFCE1E3FEFD0108DEDE0107052664FEDEB8B8FEDD6165666863630120B9 +B6012167626869FD610122013BFEC5FEDEFEDBFEC9013700000200C80000049605D10010 +001F0056403D3A143D1D4B144B1D500E540F650F071934000710070207070918340A0309 +080F211F21021115200030004000700004006F210F213F2102190714096C2010F6FD325D +10F45DED5D003F3FED12392F5DED3130015D011406070E012B01112311213216171E0107 +3426272E012B0111333236373E010496453E4DD2A0C6C6019486BA48555DCE3637307B5E +C4A778962F2F27040F63A93E4D4DFDD505D12D3039AA874D72241F1BFDAD2B2F306A0002 +0073FE7705F805F000250031008640610B0C0B120418041D190C19121518161D5C0B590D +59115C1353175719571D742010551F651F751D742D0425252135030B29341E0609760979 +150215022F34090A1E130600337326151B0009061D030F1B73330F33010F331F333F3303 +2C150F683210F6ED5D5D10E61117393210EDE62F2FED003FED3F5D123939ED3FFD322F31 +305D015D010E01232226270E01232224272602353412373624333216171612151002071E +01333236373303100023220011100033320005F83C753DAED309182D159DFEFF5A5A6160 +5C5801059AA0FF595B61DFBC0464842971181BECFEFCE1E3FEFD0108DEDE0107FE930F0D +BFB204036863630120B9B60121676268696164FEDEB8FEEFFE8A4B727E190A039F012201 +3BFEC5FEDEFEDBFEC9013700000200C80000059805D10010001F007A405408011D012D01 +3A01391D450F4814481D5A01560F59146F016902600A650B7E01750B110201B300100010 +071A34400201020205183407030105080F211F2140210311150F0D010D0D102000010019 +031400056C2010F632FD322F5D39392F5DED5D003F3C3FED12392F5DED12393130018710 +7AFD18C0015D29010121112311213216171E0115140607133426272E012B011133323637 +3E010598FEFFFE0EFEE9C601A187B448515BA28E612D342B7650E9C85E8C312D2B0250FD +B005D1232D339B77A1D93701A34063221D17FDCE212D2A6D00010086FFE5050205EC0030 +009A40790B09031F00231B08141F29082818241F242F390836103813351F362A4A084510 +4913451F4A27442A5802551B551F552D6B19661B651F662B602F7B16701F7020742A742D +86122309400E103708400E103700111A28041D06212125341D020A0A0E34060A2128151A +111500211A090074320F32703202096A3110E65D10E611393910ED2FED2F003FED332F3F +ED332F1112173931302B2B5D011406070E012322242735331604333236353426272E0127 +2E013534243332041715232624232206151416171E01171E010502514950D596A1FEFF85 +0E71012882B8CD61634BAF62C6BF013CF39D0106650E55FEEB919FC1607940EC52A6A801 +A957AA3B40483C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E28 +152CB20000010000000004EE05D1000700274018010435060303080F091F094F0903005B +0114045B4F0501052F5DF4FDE45D003F3FFD323130012111231121352104EEFDECC6FDEC +04EE0521FADF0521B000000100B2FFE1052905D1001D003A4029231223183D033D094C03 +4C0977137717081C0D031534060A1B1400761F0F1F1F1F401F030F140C6B1E10F6ED5D10 +F6ED003FED3F3C31305D011406070E01232226272E01351133111416171E01333236373E +01351133052947514DCE898CD0475147C621272C976A6B962D2721C60256A2F1504C464A +4852E8A9037BFC7B798C394142414239936D038A0001001A0000055E05D10006008C4066 +470148020205040507065706860603061400000105070457048604030414030203080144 +014B02580273017C02060005027503010303020845004A0302020103040024003A005A00 +6A00740006006E080F08010F08010B032B033503550365037B030603640710E65D5D5D10 +F65D1139395D003F3F5D1239393130015D8710FD5DC08710FD5D08C0015D090121013309 +01055EFDE2FEF8FDE2D401D301D305D1FA2F05D1FAE2051E0001005C0000078D05D1000C +00BB409E470367037903030D010B020404020505080C0B1701190318051908190B290329 +08290B3B023903320434083C09330A3A0B4B02440444084C09430A4B0B55015A0255045A +0557075909550A65016A0265046A056A09650A7F02700473087C09720A7C0B2E0C140001 +000714060506030301000300090205080B03090C0602060302083B0034064B0044067A00 +75060600720E1F0E3F0E5F0E7F0E0406670D10EE5D10E65D003F3F1217395D5D31300187 +10FD8710FD015D005D09012309012301330901330901078DFE7DDFFEC7FECEDAFE76CB01 +390134C90137013705D1FA2F04D4FB2C05D1FB2A04D6FB1E04E2000100440000053805D1 +000B00C2409775017A07020A04050A1A04150A2C04230A37094D04420A58035F04580557 +09500A570B68036D0468056709600A670B7B04730A170B14000100091408070803140201 +020514060607050407010A0B0602080302080F0D01060216022602360247020509081908 +290839084808050208070A04010406020D00160026003600470050000600660D08090619 +062906390648065F060606660C10F65D3210F65D321117392F2F5D5D5D003F3F12173931 +30018710ED8710ED8710ED8710ED005D015D09022309012309013309010538FDFE0201E5 +FE6AFE60D80207FE05E40191019A05D1FD20FD0F0265FD9B02E802E9FDA3025D00010006 +000004E605D10008007C405D2C012C04280735074001400440075007680470070A160619 +08270628085606590865066A08080814000100061405040502000D050200010004000703 +040107080402050302080F0A1F0A4F0A7F0A04005B01070114045B4F057F0502052F5DF4 +ED3910E45D003F3F1217395D3130015D8710ED8710ED015D005D09011123110133090104 +E6FDF4C6FDF2DB0197019B05D1FCBCFD7302780359FD66029A000001007E0000050805D1 +000900594036030708060813082608360846085608660876080808B30202030707033506 +03020208350108040803020707040209730B0F0B0102690A10E65D10E61139392F123939 +2F003FFD322F3FFD322F31300187107AED5D1887C0290135012135211501210508FB7603 +91FC910452FC6603B0B80469B0B3FB92000100EFFE7802F706140007001C400E05520201 +0652010B030000061F012FED332F3C003FED3FED3130012111211521112102F7FDF80208 +FEA6015AFE78079C8FF9820000010046FED003C006140003003A40280301020A0119012A +0138014B01590168017801890109011200032F000100030100006002700202022F5D332F +003F2F5D31300187ED5D87C00123013303C0ADFD33B0FED00744000100ABFE7802B30614 +0007001C400E045207010352010B031F000005012F3C332FED003FED3FED313001213521 +1121352102B3FDF8015AFEA60208FE788F067E8F000100BA02AA05D205D1000600474034 +3B0133034B0145035F0150036F0160037F0170030A69027B02020102050F031F033F035F +036F0305030305030000004F000200042F335D2F003F332F5D12393931305D015D012309 +0123013305D2C6FE39FE3AC5024D7E02AC0273FD8B0327000001FFFCFED4051AFF4C0003 +0011B6015002000005022F11332F002FED313001213521051AFAE2051EFED47800010154 +051602FA068C000300244016480159026902790204500360037003030303010000022F33 +2F002F332F5D3130015D0123013302FA95FEEFF30516017600020068FFE1041D04780026 +0033007A40540C0A0423190A152304590E511E5C2C690E601D6F2D7B0A7A14701D7B2C0A +0208283D3011401102111120084F1C011C1C183F20043141080A01080F1D011D1127021A +001D0B0091350F351F353F35032E1B0B853410F6ED5D10E6113910FD32322F5D003F3FED +3FED332F5D1112392F5DED123931305D015D2123350E01070E0123222635343637362437 +353426272E012322060723353E01333216171E011503110E01070E01151416333236041D +BB1955282F7A5297D26D6566011EA42D2A28703D4AB6610A37D06576AF403F42BB56E944 +5164747763A477113D12171FC89B7F9D2D2D20081D40541817102725BF0F24272F2E926C +FE1D013705141317615560614D00000200B9FFE10490061400130020005140393402350F +3B1530204402450F4B154020571267127F087B1C0C0E0906174211040C011E40060A0B08 +141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED3F3FED123939 +31305D011406070E012322262707231133113E0133321203342623220607111E01333236 +04904F4347AA665F8E450CB0BC4FB26FC6E5C2849352A8485073499CB102378CE04C4F4F +2D26340614FDD44153FED0FEE6C8CF4738FD80241CCD00010069FFE703F3047700210057 +40410F234F23022B01220E2A1624183A01350E3A16351849014F0A440E4F164118590155 +0E6901650E7A01730E131010143F0C0421211A3F03090F008D23171B09852210F6ED10F6 +3C003FED332F3FED332F31305D015D250E01232226272E013510003332161715232E0123 +2206151416333236373E01373303F35EA95F79CA484950012DF760B94D0A56B757A0B9B5 +A439762F2948150A462D32474848DC93011201383627D14348D7D0CAD91E18152F110002 +006CFFE10443061400130020004B40333C1A301C38204F1A421C48205806680670100912 +0102110518410E0401081E42050A1114021A0092221F223F22021B1B08852110F6ED5D10 +F6FD3232003FED3F3FED1239393F31305D2123350E01232202113436373E013332161711 +3303112E012322061514163332360443BC51B067C8EB514544B56158884BBCBC4C78479E +B0889650A475464E013401118EDE4E4C50252701E4FAFF0281221ADCCAC7CF470002006A +FFE60460047C0018001F005A404026042B0D30043B0D3C1E43044B0D4B1E5A0D50166A0D +6017780D7A1E0E013C1F1F0F1C3D15040B0B073F0F090C0C191A008F210F211F213F2103 +1F011B12852010F6FD325D10F4ED332F003FED332F3FED12392FED31305D01211416171E +013332363733150E0123200011100033321215272E01232206070460FCC93E36348F5672 +E7310A5FC66DFEEAFEC8012BF4E2F5B701939697B30C021B67993130305B2CCD2836012D +011501120142FEF8F32A94A2B2840001004400000312061E0018004B402D081439147505 +030000043F15000B0E3E0811050D080009400902090F090E00080B1A0F11000E400D1037 +0E891910F62B323232FD322F12392F2F5D003F3F33FD323FFD322F3130015D01232E0123 +22061D012115211123112335333534363332161703120A1F6426796D0153FEB3BC7F7FC6 +BB3F652A055E09136B8C269EFC4103BF9E25C7D50C080002006CFE590443047C00230030 +006E404E3D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C05 +702011220512211528401E0407070B40030D2E4115070F0601062124121A000618009232 +1F323F32022B1B18853110F4ED5D10E4113910FD32322F5D003FED3FED332F3FED123939 +3F31305D2510002122262735331E01333236373E013D010E01232202113436373E013332 +1617373303112E012322061514163332360443FEFEFEF459A9520A2EC864607E23231E55 +9B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A57FFEE4FEF61917C012352E29 +276E446644430121010790D14C474F272830FCD60261221DD0C6BCC23F00000100B90000 +045F061400160037402203151615751503100D084213040E01010D08021A0091181F1860 +1802100B1A0D881710F6FD325D10F6ED003F3C3F3FED123931305D2123113426272E0123 +22060711231133113E0133321615045FBC1218195E4B4DA84DBCBC58BC63B5BE027C4D87 +262A294C3BFCBE0614FDCD4952DACD00000200AF0000018305DB000300070030401E0144 +02400B0D370203060505087F090109920060041A01607F050105880810F65DE4FDE4E65D +003F3F3F2BED313001233533032311330183D4D40CBCBC0518C3FA25045D0002FFC2FE59 +021505DB000300190049402E0A051C0502014402400B0D370203163E19050B0B0F40070D +4F1701177F0A010A0160161A00600A1770190119921B10F65D3232E4FDE42F5D2F5D003F +FD322F3FED3F2BED31305D012335330314062322262735331E01333236373E0135112335 +210215D4D40CC8A828832C0A1C5F2D485816160DE901A50518C3FA0AC4C8100CB30B1C28 +2828715103849E00000100C1000004AF0614000B007D40512802D801DB090309010F0D1F +011D021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A +0802050A0507010105080B02600A700A020A0A00000D200D400D0208031A05890C10F6FD +325D11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0 +015D7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B0614FC +1A022FFDFC00000100BB0000017706140003001E4011020101087F05010592001A7F0101 +01880410F65DFDE65D003F3F3130212311330177BCBC0614000100B900000717047C002B +006A4048032403291324132944204426B72A07B62501251F1D1C0817422822041D050110 +1C08402D011F2D302D402D502D702D05001A016110250B1C0F1A101F1A1A1C611F104010 +801003102F5DF4FD3210FD11393910F4ED5D5D003F3C3C3F3F3CFD32111239395D31305D +2123113426272E01232206071E01151123113426272E012322060711231133153E013332 +16173E01333216150717BC0D151756514F9E4F0304BC0D151756514D9B4DBCBC58AF6372 +9F2772BC6BB8AF027C4886282B2C4F3D173D1EFD35027C4A85282B2B4C3BFCBE045D7C49 +5260556055DFC800000100B90000045F047C00160037402203151615751503100D084213 +040E05010D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3C3F3FED +123931305D2123113426272E012322060711231133153E0133321615045FBC1218195E4B +4DA84DBCBC58BC63B5BE027C4D87262A294C3BFCBE045D7C4952DACD0002006AFFE10471 +047C000B0017003E402C3B0E341034143B164B0E441044144B16080F3F0904153F030A0C +1B0090190F191F193F196F1904121B06851810F6ED5D10F6ED003FED3FED3130015D0110 +002322001110003332000334262322061514163332360471FEE8EBEDFEE90117EDEB0118 +C2AA9799A9AA9896AB022EFEEFFEC4013C01110111013DFEC3FEEFD9D3D3D9D2D9D70002 +00B9FE640490047C00130020004D4035320239153220430249154220561267127E087C1C +0A0E0906174211040C051E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD +32325D10F4ED003F3FED3F3FED12393931305D011406070E012322262711231133153E01 +33321203342623220607111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F +51A44B5073499DB0023C88E14E4A512628FE2C05F9753F55FECFFEECCAC84639FD87241A +D4000002006CFE640443047C00130020004B40333B033D1A301C3A204C034B1A461C4A20 +701009120502110418400E04010C1E4205091114021A0092221F223F22021B1B08852110 +F6ED5D10F4FD3232003FED3F3FED1239393F31305D0123110E01232202113436373E0133 +321617373303112E012322061514163332360443BC57AC64C7ED534442B2635A8B480CB0 +BC4E7846A3AA899352A4FE64021A4B490133010E90DD4B4950282730FCBF0278231CDDC2 +C4D34700000100B900000372045D001200384021000D100D200D030C090F000004430A0F +05090800001440147014020C071A09881310F6FD325D11332F003F3F3CFD322F11123931 +305D01232E012322060711231133153E013332161703720A2A4F3657A24BBCBC70AB5931 +2C2C03900A094D3DFCE7045DA55A4B0507000001006EFFE503D704780033009340710602 +091B1502191B26092A2432093C2442094C245E055D165321562F54326F056C166020642F +6532147A057F1174207928742B8A01880D851A872894019A1B0B000E1829041E03802201 +2222263E1E0407070B3E030921291B180E1B00211807008E350F351F353F355F357F3505 +07863410E65D10E611393910ED2FED2F003FED332F3FED332F5D1112173931305D015D01 +14062322262735331E0133323635342726272E01272E01353436373E013332161715232E +0123220615141716171E011716171603D7FDDB7CCF460A59DA647C8C26266C288135937B +393A38AD6B64CD440A48CE63678E2B2A5E34812B834747014299C43B23D3434F50564222 +221809180E27976E457A302F373123C935494F4E452323160C180A1E494A0001003EFFEA +02FD059E001B0048402C0C051A052B05030B10073E0D0B0A051B1B173F03094F1D7F1D02 +0E008C1D080D101A0A0807400D103707881C10F62B3232FD322F10F6325D003FFD322F3F +3333FD322F31305D250E012322263511233533113311211521111416171E013332363733 +02FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A0A0E12B8CB02529E0141FEBF9E +FE0358632B28251B0900000100B1FFE10457045D0016003740220B0619077A0703020515 +09051142050A010814021A0092181F186018020B1A08871710F6ED5D10F6FD32003F3FED +3F3C123931305D2123350E01232226351133111416171E013332363711330457BC5FAE69 +B0C4BC101A1B565249AD4BBC7C4B50D7D002D5FD8455792B2C284C3B03420001003D0000 +047F045D000600864041260429063604390646044906062905390540055105600505061A +000100041A03020328002703380037034A00470375017A02080005027503010305020802 +010300B8FFC0401E0910370C001C006A007A0004008D080F080103031303650375030403 +820710E65D5D10F45D2B113939003F3F5D1239393130015D8710FD8710FD005D015D0901 +2301330901047FFE3CBDFE3FCC015A0157045DFBA3045DFC870379000001005600000636 +045D000C0088406D0D031D032C012A0229032504260524082B0B34013B0544014B055701 +58045905570B6D02620464086A09640A6B0B79017D02720474087B09730A7A0B1E0C1A00 +0100071A060506000910090205080B03090C0602060502080F061F062F0603008E0E100E +3F0E6F0E030006830D10F6325D10E65D003F3F1217395D3130018710FD8710FD015D0901 +23090123013313013301130636FEDDAEFEE1FEE3ADFEDAC4CD01179B011EC2045DFBA303 +5DFCA3045DFC9F0361FC9F0361000001003C00000480045D000B00DA408C090B1B011403 +14071B09270327073C003B0134033404340634073B093D0A4C004B014403440444064407 +4B094D0A5A0155035A0555075A09550B6F016003690560076F09660B230F0200083F0230 +084F0240087D02700808091A0A0B0A071A060506011A000B00031A0405040102050B0809 +06047A047506020605040809060106020D010502080B04040A00B8FFC0401C0910370600 +01008D0D0F0D010F0D1F0D400D5F0D040602040104820C10F65D325D5D10F65D2B321117 +395D2F5D003F3F5D1217393130018710ED8710ED8710ED8710ED005D015D212309012309 +0133090133010480EDFEC3FEC1DB01B4FE50ED013B013CDCFE4901ADFE53022D0230FE5A +01A6FDDA0001003DFE64047F045D0007008C404104063406440650066006700606090307 +0519031705460149035800570179030902071A000100051A040304490046040200030204 +05020C02680101010203030400B8FFC040220910370C001C004A006A007A0005008D090F +0901030413044504650475040504820810E45D5D10F65D2B1117395D2F003F3F12393931 +30015D8710FD8710FDC0015D005D0901231301330901047FFD74C9D0FE43CC0157015A04 +5DFA0701D20427FCC4033C000001005D000003E3045D00090056403A15083A0335084A03 +45085C03540860087F0370080A0707033E06050202083E01080408030207070402098E0B +1F0B3F0B5F0B6F0B7F0B0502840A10E65D10E41139392F1239392F003FFD322F3FFD322F +3130015D2901350121352115012103E3FC7A028BFD830367FD72029F8B03359D86FCC800 +000100ADFE78045906140025005640382F1D3A074A07562367237523063A1D4A1D021D1C +09533F0A4F0A020A0A01145112012451010B140F00400002000919201F0E000940050105 +2F5D33333CFD3C2F2F5D3C003FED3FED12392F5DFD39395D3130015D012322263D013426 +2B01353332363D0134363B01152322061D01140607151E011D0114163B01045996B3DFA6 +AB3333ABA6DFB39672887B9A89899A7B8872FE78C7BC95A9BF9CBFA995BCC78A7E8CAF8B +BD371837BD8BAF8C7E000001017AFE78022806140003001B400F0F054F05020201010B00 +1F4F0101012F5DED003F3F3130015D012311330228AEAEFE78079C00000100BBFE780467 +0614002500544034211235023112400240127A0C06131200533F254F25022525091B511C +010A51090B1B0009010900170E1F050509004F200120202710D62F5D33333C10FD3C2F2F +5D3C003FED3FED12392F5DFD39393130015D012322061D0114062B01353332363D013436 +37352E013D0134262B01353332161D0114163B01046733ABA6DFB39672887B9A89899A7B +887296B3DFA6AB3301F8BFA995BCC78A7E8CAF8BBD371837BD8BAF8C7E8AC7BC95A9BF00 +000100BB018B05D1039F001F0056404206030609091309191908170A1518191A3B083418 +4B0844185A035A0A550D541B5B1D60056E14611875047A147518170F1C54060C54061F16 +1F2A000001000F2A00102F33ED2F5DED002F3333ED2FED333130015D010E01070E012322 +26272E0123220607233E01373E01333216171E013332363705D102292D2E82645E925466 +5C325E6409A702292C2B8A605D935550663D676103039F63C04B4D584F667D40AFC464BD +4D4A5B4D68625BCAA900FFFF001A0000055E07500236002400000117008E002F0175001A +40130320113011401170118011050200110E060725012B355D350003001A0000055E0801 +0012001E002100DF40442B2040205A18551A501E55206918651A651E09180B170D4A0646 +125906561278027703082020211F02870101011400120020210387040104140505067B06 +74120216510CB8FFC0405D0D10370C033470210121212006120405001C011C0301050813 +114F0F500F600F030F191140095F096F0903090F230106090F1204050C00240039004200 +5A006A0074000700006E230F23010A052B0536054D05550565057B050705642210E65D5D +10F62F5D1217395D2F5DED2F5DED003F3C3F5D1217392F5DED2F2BED3130015D8710FD5D +C0C0C08710FD5DC0C008C0015D005D212303210323012E01353436333216151406071334 +26232206151416333236130901055ED394FD8094C90207596BCC9293CB69592C72565672 +7355567236FEFEFEFD019FFE61057F2C9F668FC2C28F64A32A012F56737455567373FBF1 +02CBFD3500010073FE59054605EC00410097406F0A20032B1C20152B250B222B3402330B +342B4302430B452B5D1F582158255A275E3F6102602B70027626702B160B0B1B0B022D2D +313429021A061D41413D341D0A101014320C0D0F0F172A0009100920090309091D234371 +2C0071430F43010F431F432F433F436F4305371523684210F6ED5D5D10F43CE41239392F +5DED332F003FFD322F3FED332F1239393FED332F31305D015D250E01070E01071E011514 +062322262735331E01333236353426270E01232224272602353412373624333216171523 +2E01232206070E01151416171E01333236373305463759480B1A120203BB9326772D091A +5B326A620202132B12A2FEF762606C68625F010DA478EF920F7BF28A71B547454D554346 +BB688FFA6D0E6C182A17030903133317A2AC0E0CA20A1C5056132D1402025B615F0125C2 +B801226461663A49EB675E494D4BE5969DE2474A47626200FFFF00C80000049D08010236 +002800000117008D001E0175000BB601000D0D020325012B3500FFFF00C80000053807C8 +023600310000011700D7008C0175000BB60100170A050925012B3500FFFF0070FFE105D7 +075002360032FD000117008E009601750018401103002930295029702904020029240F03 +25012B355D35FFFF00B2FFE1052907500236003800000117008E00620175001840110210 +24202440246024040100241E0D1D25012B355D35FFFF0068FFE1041D068C023600440000 +0116008DE300000BB6020036371D2625012B3500FFFF0068FFE1041D068C023600440000 +01160043E800000BB6020035371D2325012B3500FFFF0068FFE1041D068C023600440000 +011600D6E000000BB6020038341D2625012B3500FFFF0068FFE1041D05DB023600440000 +0116008EE000001E4016030F39703902020039103920394039040039341D2625012B5D35 +5D35FFFF0068FFE1041D0653023600440000011600D7E200000BB6020041341D2525012B +3500FFFF0068FFE1041D07B1023600440000011600DBD300000DB70302003A341D262501 +2B35350000010069FE5903F3047700380080405B0F3A4F3A022A012A0726252A2D252F3B +01390735253B2D342F4B014F2140254F2D402F590153256C0166257A017525150B081B08 +0227272B3F230417031A3838313F1A090D0D113D090D0C0C142A06061A2026008D3A2E1B +20853910F6ED10F63C1139392FED332F003FFD322F3FED332F1239393FED332F31305D5D +015D250E01071E011514062322262735331E01333236353426270E01232226272E013510 +003332161715232E01232206151416333236373E01373303F3214D1D0305B79225742D09 +1A583268620302101D1979CA484950012DF760B94D0A56B757A0B9B5A439762F2948150A +460F1F0913391CA2AC0E0CA00A1A4E58162E140204474848DC93011201383627D14348D7 +D0CAD91E18152F11FFFF006AFFE60460068C0236004800000116008DFD00000BB6020022 +21121825012B3500FFFF006AFFE60460068C02360048000001160043FD00000BB6020021 +20121825012B3500FFFF006AFFE60460068C023600480000011600D6F900000BB6020024 +20120025012B3500FFFF006AFFE6046005DB0236004800000116008EF9000014400D0330 +2560250202002520120025012B355D35FFFF00A000000246068C023600D500000117008D +FE830000000BB601000505020325012B3500FFFFFFEB00000191068C023600D500000117 +0043FE970000000BB601000505020325012B35000002FFF50000023C068C0006000A003D +40247A0174037A057406040201030505030905080800047F0C01000C92071A047F080108 +880B10FD5D32FDE4335D2F2F003F3F2F332F1239393130015D01230B0123133303231133 +023C978F8E93B2E313BCBC0511010BFEF5017BF974045D00000300050000022D05DB0003 +0007000B0041402702010744600401040A050908011A7F000100041A700501057F0D0100 +0D92081A057F090109880C10F65D32FDE4335D2F5DED2F5DED003F3F2F5DED3939313001 +2335330523353313231133022DBDBDFE95BDBDB5BCBC0518C3C3C3FA25045D00FFFF00B9 +0000045F0653023600510000011600D70700000BB6010024170E1525012B3500FFFF006A +FFE10471068C0236005200000116008DE200000BB602001919060025012B3500FFFF006A +FFE10471068C02360052000001160043E200000BB602001919060025012B3500FFFF006A +FFE10471068C023600520000011600D6E200000BB602001C18060025012B3500FFFF006A +FFE1047105DB0236005200000116008EE2000014400D03301D501D0202001D1806002501 +2B355D35FFFF006AFFE104710653023600520000011600D7E200000BB602002518060025 +012B3500FFFF00B1FFE10457068C0236005800000116008DEE00000BB601001918101225 +012B3500FFFF00B1FFE10457068C023600580000011600430200000BB601001818091625 +012B3500FFFF00B1FFE10457068C023600580000011600D6F800000BB601001B17091625 +012B3500FFFF00B1FFE1045705DB0236005800000116008EFD000016400F02301C501C60 +1C0301001C17091625012B355D35000100BB0087045B0614000B003C4026070A0B000104 +0605AA0606080308010F0D1F0D02006302040708090A010602280563700301032F5DE6ED +173910E65D003F2F12392FED17393130012513231305350503330325045BFE6D058405FE +6D01930584050193040A05FC780388058105018EFE7205000002009A02CC03BC05EC000B +0017002840186A0F65157A0F751504155403030F5409020C2A0000122A062FED332FED00 +3FED332FED5D313001140623222635343633321607342623220615141633323603BCE8A9 +A9E8E8A9AAE7A58666668689636686045CA8E8E7A9A8E8E8A8668B8B6668898C0002009F +FE97046005C3001C0023007B40553C0A3F2030224B0A4F2040225A0153116C0164117901 +7611791F76230E1D1E180D3F134F130213130D1747060C030F0505201C301C401C031C18 +471C05030F251F2502130021202F090109001D0C0F1804031E09062F33ED1739322F5DED +2F3C5D002F3333ED2F5D2F3F123939ED33332F5D2F11393931305D250E01071123112600 +353400371133111E011715232E0127113E01373305110E01151416046047B46876E3FEFB +010BDD7668BA410B37AE7378AD330BFE2787A2984A1E2F03FE9D0167150120FAF2012B16 +0163FEA1032C1FCB2C5209FCB90A552985034214D2BDB5D2000100890000048B05EE0021 +00774050201D3415321D03031E151E251E410E530E5B16630E7302730E091B1805460F08 +1F084F0803081010144908010C0202204A01080F231F23021F02181B20080519060F0605 +190F040220004000020000022F332F5D1217392F2F2F2F33FD3211395D003FFD323F1239 +ED332F2F5DED393931305D015D2901353E01352335331134123332161715232E01232206 +1511211521151406071521048BFBFE7667B0B0FDCD6998400A3E98568C8B019FFE617C62 +0345CF20BDB98A0136C801012211CE2A30A590FEDD8A3D7EBB390B00000200ACFE7F0468 +05EF0043006100A9407F05050A2714051D273E2030424D104F20433240425C105E165132 +63096E106A2B63321152055F205F255F275B2D5B3950426B1F6A20653D654061427C097C +10742B7431107B50745F0218075F50293A062F0D3333373F2F021111153F0F0D1F0D020D +181B5F045607333A1B50262911471A1129330704221000010000561A222FED332F5D1217 +39ED2F2F3939ED2F2F123939ED002F5DFD322F3FFD322F111217395D31305D015D011406 +07151E01151406070E012322262735331E01333236353426272E01272627263534363735 +2E01353436373E013332161715232E01232206151416171E0117161716033E0135342627 +2E01272E01270E01070E01151416171E01171E01173E01046876636158424148C27C57A7 +5C0A4FB46C86A2272D299052D6525372666554404340C78057A85B0A3ABD797FA92B2B2B +845BC85A59F71C1E211D1C4E2C275D46123E1618261F1D1B512C266043144202596AA237 +072E915A4D8A3238361B1FC2253261573841191725143451518162A93907309259518334 +323A1C1DC21B3C5C573947171725152E4F4FFEAB21413A334617181F0C0B1514092D181A +563132461817200B0A18130B2F00000100B9012103A4040B000B0013B703030900000688 +0C10F6322F002F332F313001140623222635343633321603A4DC9A9ADBDB9A9ADC02969A +DBDB9A9ADBDB00010089FE95045205D1000D003B40245308610802010F0501054F060106 +0602AA0C030F0F1F0F020529040402290F0D010D0D092F332F5DED332FED5D003FED332F +5D2F5D3C31305D012311231123112E013534243321045294D695CEFC0104F301D2FE9506 +BAF94603BC05F8CCCFE8000100B9FFE8048D061E0036006D4048052E152E2E132C343913 +39343736490E4636532166217B1B0C3433143D151E3C15032D0007070B3D03092608181B +303400140C061C060206111B000614300325009038251A26883710F6ED10E611173910ED +2F5D2F12392FED003F3FFD322F3F1239ED2FED39393130015D0114002322262735331E01 +333236373E0135342623353236353426272E01232206070E01151123113436373E013332 +1615140607151E01048DFEF1DB2C73240A2A63384A6E21231FD3C69D9A161E1B583D395C +28252DBC48403CB35EB7E58E71A4BE01E1D6FEDD0F0DA518123A31347F4CA6A996778123 +421F1D231D2724845FFBC104387CB73E3A3BAE9770B2200925DF0004009FFF2E076105F0 +000B00170028003700AD407A7C0D7C11701370177A1A74277336070D1A04231E1A122314 +282C0E231022142C16211824233F1936234919472252186B0E641064146B166A19151A19 +2A182818292A25252818311B2A001D101D4F1D0318001D01901D011D0CAD1D06000012AD +06281AAA31311E19401D011D30AA1E15501D1E0903030F500902003FED332F123939ED2F +ED2F5D3C12392FED39012FED332F1239ED2F5D71335DFD3C2F39392FED8710FDC0313001 +5D005D011000212000111000212000031000212000111000212000072301231123112132 +16171E0115140607373426272E012B0111333236373E010761FE05FE9AFE9AFE0501FB01 +66016601FB74FE49FECAFECAFE4901B70136013601B7C0DFFEB5A2A501385E7A3B3F3B71 +63201C211F4635957F3E5A1D1F19028FFE9AFE0501FB0166016601FBFE05FE9A013601BC +FE44FECAFECAFE4401BC820163FE9D0393101F226149618126FD243812110AFECB131719 +3C000003009FFF2E076105F0000B001700330096406D7C0D7C117013701779197223062C +0E231022142C1633183324332A332E44184124442A442E54185424542A542E6B0E641064 +146B1662186A1D642417257F1801182C2A181E0CAD1E06000012AD06103320330233332F +521B1F252F2502252529522115501B210903030F500902003FED332F123939ED2FFD322F +5D2FFD322F5D012FED332F1239ED2F33ED2F5D3C3130015D005D01100021200011100021 +2000031000212000111000212000050E012322243534003332161715232E012322061514 +1633323637330761FE05FE9AFE9AFE0501FB0166016601FB74FE49FECAFECAFE4901B701 +36013601B7FE72569F4EE3FEF8010DDE59AC3E1036A9598E9F9994539D4810028FFE9AFE +0501FB0166016601FBFE05FE9A013601BCFE44FECAFECAFE4401BC572727F6EAE1010230 +1CB52846ABA59FAE3A34000200AA031106F105D1000E0016005240217B0478057A060379 +0C010B0C0D01030406080815121210135015030D280B0F370BB8FFC440110B0F37022800 +000728090FAE102814AE132FE4FDE42FED332FED2B2B003FFD3C332F1217395D3130005D +0123112303230323112311331B0133052311231123352106F17C14ED4FEF197BEEBFBFE3 +FC02E57FE5024903110269FE3D01CAFD9002C0FE82017E75FDB5024B75000001021D0516 +03C3068C000300244016470156006600760004500360037003030303010000022F332F00 +2F332F5D3130015D0901231303C3FEEF95B3068CFE8A01760002015A051803BE05DB0003 +000700264015020644016005010500140F010101041401000501052F5D33ED2F5DED002F +5D3CFD3C3130012335330523353303BEC7C7FE63C7C70518C3C3C300000100F5001B0597 +04FD0013008840541612010C0B080704030E111201020D80029002A002B0020402290303 +0C030D030112045307110E08530D070F0B010B40150130154015020407080B0112110E08 +030D0309030D1004062F004000020000400601062F5D332F5D1217392F2F1217395D5D00 +2F5D3333ED39392FED3939322F2F3130018710FD5D87C0C0C0C010C0C0C0C0C0015D0121 +0323132135211321352113330321152103210597FDA0689968FE5701DA54FDD2025E6999 +6901ABFE2453022F016AFEB1014F9C010C9C014FFEB19CFEF4000002000E0000076D05D1 +000F00130079404F04030B061B041B052A042B053B064A044A054D064D120B1213030414 +05050675057C06020A100E140115730601080B0440000100000F05010564140334130D35 +0A0A13050835123406030E35010508003F3CED3FEDED1239392FED2FED300110F65D322F +5D1739E62FED393931305D8710FDC0C0C0015D2901112103230121152111211521112101 +112303076DFC50FDF4D4CF0252050DFD1302EDFD1302EDFC50DBEF022CFDD405D1B0FE68 +B0FDD702230259FDA70000030073FF6E05DA064B001D002A003700A640850203000B0A0D +0C120F1A051C1103190D1F121F1A151C550254045A08590D59115B135017551C792A140B +090318061B1F0A1F0B1118161B2609272F75037F097F0A7F0B7F0C791270187019701A70 +1B132A2F1E2E043221340C09181B040615023234060A2A2F1E2E04272B15000C09181B04 +0F0073390F39010F391F393F390327150F683810F6ED5D5D10E411173910ED111739003F +ED3F121739FD11173931305D015D011402070E0123222627072313260235341237362433 +3216173733031612012E01232206070E011514161701342627011E01333236373E0105DA +63595CFBA173C94F9F84CD656D605C5801059A76C2528E84BC656FFE6F3990596EB44240 +453B3A035C3C3AFD683C91596EB73E434202E8B8FEDD6165663A37E4012664012CC4B601 +216762683737C9FEF464FED7013A2E2D4D4E4CE5938CE04C01B88BE44BFC432D2E504C52 +E100000300A1009D075F047C00170026003500724054051608311526192F2923262C3B34 +441C4B34510256075F0A5F0E5A1351165918553063026D0A631669236C24642C642D1821 +AF33AF0306120F09092AAF1BAF150F7B18743002272A0030180C0099371E2A0C993610F6 +ED10E411393910ED5D002F3CEDED332F1239393CEDED3130015D011402232226270E0123 +2202353412333216173E01333212052E01232206151416333236373E0125342623220607 +0E01071E01333236075FF5CF85DE454FD38FBFE2FACA86DE444FD58DBFE2FC683FB8608A +9C7F776E7C392225030C807658814A1E33133CBB608A9C0297EFFEF599929794010FD6EE +010C9A919695FEF1947575A79A85A6615E39470186A5477830672C7377A6000100D700B3 +05B505B6000F004540290E03540F010101010D045408AC0A070C401101301140110200AB +0A800D010D2A040105AB07400401042F5D3CF43C10FD5D3CF45D5D3C002F3CE4FD3C322F +5DFD3C31302521352111213521113311211521112105B5FB22021CFDE4021CA6021CFDE4 +021CB39E01A69E0221FDDF9EFE5A000200FE0000058005710006000A0061401605045403 +020306540001002C26012902360139020400B8FFE240240B1837031E0B18370954080303 +00400C01300C400C020504090A040100004001500102012F5D332F1217395D5D002F332F +2FED2B2B31305D4B53588710FD8710FD05C05909013501150901112135210580FB7E0482 +FC870379FB7E0482012F01E37C01E3B7FE96FE96FE1AA0000002010C0000058E05710006 +000A0063401603045405050602540101002C26002906360039060401B8FFE240260B1837 +051E0B1837095408050501400C01300C400C020503090A040100002F013001400103012F +5D332F1217395D5D002F332F2FED2B2B31305D4B53588710FD8710FD05C0590901350901 +350111213521058EFB7E0379FC870482FB7E04820312FE1DB7016A016AB7FE1DFC72A000 +0001006C000004A705D1001000834020300E3F10420E4F10540E5B10650E6A10730E7C10 +0A0020090B371020090B370EB8FFE0B3090B370DB8FFE04033090B374601550F700F0305 +0208320B0B0C010F0005070D0307080F121F1202030A005C0501030F05130D5C0C0A0F08 +BF0802082F5D3333E4ED39323210E42F2F5D003F3F1217392FED393931305D012B2B2B2B +5D090115211521112311213521350133090104A7FE400174FE8EBCFE8E0174FE3DD4014C +015005D1FCC15E8AFE5601AA8A490354FD6D0293000100BEFE640464045D001500384020 +080205140B051042050900080A0C0102131A0092171F176017020D091A0A881610F6FD3C +5D10F4FD3939003F3F3FED3F3C12393931302123270E012322262711231133111E013332 +363711330464B20A3B815B567F42BCBC209B5B5D8536BC76414A4640FDF305F9FCBA2752 +433C034000020095FFE0047905EF00220031006640481502151B162E2904241B310A351B +410A431B560A551A561F5020562A641A661E642A632E751B702E140F06263F0C0C061D19 +19153F1D022C3F060A1A0F232912141A0900002914092FED332F1239ED1139392F003FED +3FFD322F1112392FED123931305D011402070E01232226353400333216173E0135342623 +22060723353E01333216171E01032E01232206151416333236373E0104794E5255CB71C0 +F3010DCA5A9F4F02029E984EB74E0B51C96089CD3E2A1DCB3C98488DA8877080A322060B +0345A4FE987B7C62FDCBE4012134411A3B1AD9CA3F37C22C2D6D7C56CEFEC42F36B6AA91 +99C2BE215000000100BBFF43055905D1000C00A9406A01030F08450B8B03D903D30B0601 +08010B2B033208320B5D03660A600B08030203080908B3040304030B0A0BB30202030302 +03080908B3040304030B0A0BB30202030303610A010A07040304070A04020C0C0203090A +0A6B090109040202040309040B0835050301350B002FED3FED1117392F2F2F5D332F1239 +012F332F1217392F2F2F5D332F313087107AED87C0018710ED8708C00187107AED87C001 +8710ED8708C0015D71052135090135211521011501210559FB6202A1FD69046DFC850288 +FD6603B4BDBF029C0277BCB0FDA748FD730000010090FF3F05FC05D1000B003B40250307 +050009350A0270007F09020414005A6F017F010201010D0514095A00086008700803082F +5DE4ED11332F5DE4ED5D003FFD3C3C2F3C313001231123112111231123352105FCC8C6FD +B0C6C8056C0523FA1C05E4FA1C05E4AE0001007100000541045D000B002B401703070500 +093E0A05041A00B001010D051A09B0100801082F5DE4ED11332FE4ED003FFD3C3C2F3C31 +300123112311211123112335210541CABCFE3CBCCA04D003BFFC4103BFFC4103BF9E0001 +008AFE590490061E0021002C4018000004401E00111115400D0D0F231F2302001000091A +10192F33FD322F2F5D003FFD322F3FFD322F313001232E01232207061511140706232226 +2735331E013332373635113437363332161704900A2073208134356869BC346D310A216C +228135346868BD3A6636055708153D3D95FB9DCE6D6E0B0AB208153D3D950463CC6F6E0B +0A0000020097021303B005F000230030005740370A0A06211B0916212E0925215529600E +6029700E70290B02082552111120081C1C1853200201012E5308061D1125022A1D0B002B +2A000B2F33ED2F1239FD32322F003FED332F3FFD322F1112392FED12393130015D012335 +0E01070E01232226353436373E0137353426272E012322060723353E013332161503350E +01070E0115141633323603B0AA1C312C2D514980AF5D4D4EEF88242122573054A8270E2D +B84DD9BEAA45B736404E5B5E5283022A5E1425131415AA846A8724241F0612354013120A +300EAC0D20A99FFE74F504100F124D444C4C430000020079021303E405F0000B00170031 +40205D015D055207520B046A0F6515020F530902155303060C2A40000100122A00062F33 +ED2F5DED003FED3FED5D31305D0114022322023534123332120734262322061514163332 +3603E4F4C1C9EDEDC9C1F4B687787A86867A78870401EBFEFD0109E5E5010AFEFCEBACAC +AEAAAAADAB000001006B0000062105F00027006240440909090D1A091A0D2C092C0D3403 +300530113413460346136A1A641D64216A24101925140204160B341F0226183501160825 +1202191214081502141C272222290E15171C2FC4ED11332FC4123939ED2FED2FED003F3C +FD3C3FED12173931305D2901113E01373E01353426232206151416171E01171121352135 +26023510002120001114020715210621FDA443842D2F38F8E2E2F83A2F2F7F44FDA401B4 +A8D90172013601360172D9A801B40185275A373A9970C8FDFDC86E9E38395727FE7BAE7C +580132CC0116015AFEA6FEEACCFECE587C0000030068FFE3073F047C00390043005200B9 +40840B190B1D1C192604200D3604320D383D34414204420D4A3D4241520D5237554B630D +6137654B13161D4B2A512E622E7B0D7E137C1E7D24732E73387C4B0B47013C2170430143 +124333033018403D36042C2C283F30040B0B073F0F0A5041180A433A011A474412213304 +00470F2D012D0C0C3A1A00472D1B008F544054014D1B001B855310F632ED5D10E4113939 +10ED332F2F5D2F1217392FFD1139003FED3FED332F3FED332F3FED111217392F5D33FD32 +31305D015D01211416171E013332363733150E01232226270E01070E0123222635343637 +362437353426272E012322060723353E01333216173E0133321215272E01272E01232206> +<07032E01350E01070E01151416333236073FFCCD3C37348E566FD5420C4ED56DA6ED4C15 +5C323F947396D36C655F0124A22E2928703C4FB35A0D37CE659FD33945CA7DD9FBB60525 +20226D4F85B41991141569C0524F61747663C1022F72A234302D5334CD233B686713501C +242FC2987C992A271C033D41551717112A24BF0F265D5B5268FF00FB3E446625272C968C +FE6B35844B030915145B535F5C560003005DFF6C047104D900170021002B007840560008 +0F140A19292604001800250200180025020914001800253D1D322B4D1D422B0721261825 +04291B3E0609121504030F04293E030A21261825041E221B0009061215040C00902D0F2D +1F2D3F2D6F2D041E1B0C852C10F6ED5D10E411173910ED111739003FED3F121739FD1117 +3931305D5D5D015D011000232226270723132E01351000333216173733071E01252E0123 +22061514161701342627011E013332360471FEE8EB548F3B856EAB4B530117ED578E3674 +6F9B4C54FEBC2563379BAA222302442322FE40275F3B96AE022EFEEFFEC42A27C601004D +E2930111013D2C23ACE74CE0DC1D1DDCD2619436012B619836FD611F1ED900020071FFE2 +03BE05D100030020006D404C0F221F2202131E231E3A053A144B05400D400E400F43165C +05520F6F05650E651A7A057A0910127F1301131007120155030320201C34070A022B0303 +101F70130113130A200401041915040A2F33ED2F5D12392F5DED332FED003FFD322F3FED +331239395D2F31305D015D01233533130E01232226353436373E01373533110E01070E01 +151416333236373302C8CCCCF653BA70D7F9453B3A9D44B33C9E2E3644997967C5390A04 +FED3FA571E28D1AB62963E3E6529E1FECF2161282F7C4E716F4225000002012300000203 +05D1000300070027401707070055030305080F0901045D032B055D0F02200202022F5DE4 +FDE45D003F3FED332F3130012335331323133301F9CCCC0AE01AAA04FED3FA2F04370001 +00D2003905B002FA000500294018000002540F0401044007013007400702012A40000100 +00042F332F5DED5D5D002F5DFD322F313025231121352105B0ABFBCD04DE390221A00001 +0086FF6906C906FC0008004A402C15073307440772070407070806140302030207090829 +08590869080408000100010100040351060607080208002F2F1239392FED012F2F332F31 +308710DD5DC0C08710FD08C0005D09012301233521090106C9FC9066FE80ED0189013902 +DA06FCF86D03E18BFCCB065C0001FFDCFF37050005EF002B0077404D070B001F2E08270C +270F2E212925350D300F400E410F59226607660C0E0C0B0807201D1E21221D220F2D1F2D +020920201D2209041600160B081E462121281200000449280216161A4900120112002F5D +FD322F3FFD322F1112392FED393930012F2F1217392F2F5D8710C0C0C0FDC0C0C0313001 +5D01232E012322060F01211521030E01070E012322262735331E01333236371323353337 +3E01373E013332161705000A1D7229797E232A0141FEA3671D5C4041985C2950340A215E +2C7F812367D9F52A1A5C3E3E99573A4F3405290A1A77A0C28AFE1686B034352A0709B40E +1480A701EA8AC67BA833332C0A08000200F300CA0598045000190033006D40490A010606 +050E08130A1B06200528082D5B0452115B1E522B680B6432790B743210272730541D1A23 +541D1A002A012A0D0D1654030009542A0300101929000033291A0C290D26291A272F33ED +3CED2FED332FED002F333333ED2F2FED332F2F5D3333ED2F2FED332F31305D010E012322 +26272E0123220607233E01333216171E0133323637130E01232226272E0123220607233E +01333216171E0133323637059714B69E4D8C3841682C4B541C9B17B39F488E3B3D6B2D4C +59139E19AEA348903927802E4E56149D13B79E4D8A3A237C364B541B0450C2C64B2D3437 +607CB6C44A2E303B6D7DFDFCB8C34B2D1F4C6E7CC0C84A2E1C4F637A000200320000059E +05D100030006004F403148024703025A056A050205041A000003061A010102390236036B +0264037B02750306020305030000080105010203065401002FED3F1239012F11332F1739 +5D31308710FD8710FD04C0005D015D290101210902059EFA94023201080127FE50FE5105 +D1FAD7047BFB8500000200A600A2047A04760006000D005940107305730C0204400C1037 +0B400C103706B8FFC0B30C10370DB8FFC0401B0C103703000300070A0A07040500010100 +000C0B084007010707082F332F5D123939332F332F123939002F332F1239392F2F31302B +2B2B2B015D2501350115090105013501150901047AFDF00210FE9B0165FE52FDDA0226FE +8D0173BF01A35501A2BCFEEFFEEFD901BE5901BDC4FEDAFEDA00000200AE00A204820476 +0006000D005740107C037C0A0204400C10370B400C103702B8FFC0B30C103709B8FFC040 +1A0C10370C080C080505010403014000010000010A0B08070107082F33332F1239392F33 +2F5D123939002F332F39392F2F31302B2B2B2B015D090135090135010501350901350104 +82FDDA0173FE8D0226FE3CFDF00165FE9B02100260FE42C401260126C4FE4357FE5DBC01 +110111BCFE5E000300B2000005DA00DF00030007000B0025401405010206040A55090800 +2B0101042B0505082B092FED332FED332FED003FED173931302123353305233533052335 +3305DACCCCFDD2CCCCFDD2CCCCDFDFDFDFDFFFFF001A0000055E08010236002400000117 +004300640175000BB602000C0E050025012B3500FFFF001A0000055E07C8023600240000 +011700D700330175000BB60200180B050025012B3500FFFF0073FFE105DA07C802360032 +0000011700D7008B0175000BB6020031240F0325012B3500000200780000081C05D10016 +002500554039001C0022301C3022401C40227204720A721C741D72230B14351111011834 +10350D0317341535010811141417170E1203070073271F1507682610F6ED10E61117392F +FD32003FEDED3FEDED12392FED3130015D29012224272602353412373E01332115211121 +152111210511232206070E01151416171E0133081CFBCEC4FEFD6791B3AE984FF9E8042E +FD0502FBFD0502FBFC407A92B55F7481716D5BD09236415B0146CFD7013C603344B0FE68 +B0FDD7040479203642F8ABABEE4439280003006AFFE10776047C0024002B00370094406C +2604200D3204300D32293B2E323032343B364004400D40294D2E403040344D36530D5314 +5C165C1A531C5322620D621C6222700D72221B013C2B121E2B030F283D21042F3F1B040B +0B073F0F0A353F150A1E122B011A7F2C012C0C0C251A002C18008F393F3901321B188538 +10F6ED5D10E4113910ED332F2F5DFD323939003FED3FED332F3FED3FED1217392FED3130 +015D01211416171E013332363733150E01232226270E01232200111000333216173E0133 +321215272E012322060F0134262322061514163332360776FCDC3C34348D526DCD460C62 +BF69A8E84A45D183E9FEEF0117E38CC84447D78FE1ECB703918D8BAF10B8A49399A0A792 +92A5021B689831312F4F38CD2A347A686F78013C01110115013979726A81FEF4EF2A9B9B +A4927DD7D5E0CCD4D7D500010099023C047D02DC00030018400C0154020000050F051F05 +02022F5D11332F002FED313001213521047DFC1C03E4023CA00000010099023C076702DC +00030011B6015402000005022F11332F002FED3130012135210767F93206CE023CA00002 +FFED03E503160614000300070052B502180D103701B8FFE8B3090C3700B8FFE840090910 +3706180D103705B8FFE8B3090C3704B8FFE8401309103701000501050502060100B10202 +04B1062FED332FED003F3C332F5D3C3130012B2B2B2B2B2B0123013303230133031686FE +F1F0EF86FEF1F003E5022FFDD1022F000002009603E503BF0614000300070050B90004FF +E8400E0D10370518090C37061809103700B8FFE840200D10370118090C37021809103701 +000501050503070100B1020204B1000601062F5DED332FED003F3C332F5D3C3130012B2B +2B2B2B2B090123132301231303BFFEF186A5A4FEF186A50614FDD1022FFDD1022F000001 +FFED03E5018606140003002EB502180D103701B8FFE8B3090C3700B8FFE8400D09103701 +00010101020100B1022FED003F335D2F3130012B2B2B0123013301868AFEF1F403E5022F +000100A003E5023906140003002FB90000FFE8401A0D10370118090C3702180910370100 +010101030100B1000201022F5DED003F335D2F3130012B2B2B090123130239FEF18AA506 +14FDD1022F00000300D2000705BA051100030007000B00414029000B010B5608AC045407 +0F0101015602AC0F070107400D01300D400D0204AB000B2D05AB01400A010A2F5D3CE4FD +3CE45D5D002F5DF4ED5D10FDF4ED5D313001231133012135210123113303BDEEEE01FDFB +1804E8FE03EEEE03FE0113FD2BA0FD2B0113000200ACFFC805E00554000300070057403B +4804470658045706680467067F047006087F057007020705000301000330036003900304 +03B200023002600290020402B220010406020002000201192F3333182F2F123939002F1A +19FE5DEE5D11173931305D015D090705E0FD66FD66029A01BDFE43FE4301BD028EFD3A02 +C602C6FD3A01DDFE23FE2300FFFF003DFE64047F05DB0236005C00000116008EDD000016 +400F02100E600E700E0301000E0B040025012B355D35FFFF0006000004E607500236003C +00000117008EFFED01750019401302000E400E500E600E700E0501000E090500252B355D +35000001FF9A0000034B05D10003001D401138034803680065016903050100030000022F +332F003F2F3130015D09012301034BFCF4A5030C05D1FA2F05D100010000FFE504CA05EC +003300CC408758040102B52F0103B81D010237184718571867187718E718F71807013A00 +4A005A006A007A00FA0006032C06502998090109230F5020F71201081218122812581204 +00121203151827190119191D341502002833010133332F34030A272001022320292C0400 +0F12090604260C082A182A282A03002A21210C18007135103407073426150C683410F4ED +12392F103C10F63C11392FC45F5D111217391117395F5D003FED332F5F5D333FED332F5D +331112392F5F5D5D3CFD3CDD5D3CFD3C5F5D5F5D5F5D5F5D31305F5D250E012322000323 +37332E013534363723373312003332161715232E01232204072107210E01151416172107 +211604333236373304CA6CB97EF3FE8331862C4B02020202772C5D3A0174F38DBF541050 +C67C9DFF003001DB2CFE3C02030202017C2CFEC4310108969DB2440F3E3326012E010476 +152F161A34187601010128292DD1413DCFB17618341A172E1576B6D13F3D000100BA00AC +02E0046C0006002C400972050104400C103706B8FFC0400C0C1037030300040501000001 +2F332F123939002F332F31302B2B015D2501350115090102E0FDDA0226FE8D0173AC01B4 +5901B3C7FEE7FEE7000100C200AC02E8046C0006002C40097D030104400C103702B8FFC0 +400C0C10370505010403010000012F332F123939002F332F31302B2B015D090135090135 +0102E8FDDA0173FE8D02260260FE4CC701190119C7FE4D000002004400000453061E0003 +001E005B40370B103A10601A741A04014402031515193F1100070A3E1D0D050509080B14 +0160051A006004140A0492201D071A0B0D0A400D10370A891F10F62B3232FD3210E61139 +10E4FDE42F2F003F3C3F33FD323FFD322F3FED3130015D01233533032311211123112335 +333534363332161715232E012322061D01210453D0D011BCFDF9BC7F7FC8B73E65290A1C +6A22796A02C90518C3FA2503C2FC3E03BF9E31C1CF0D07AA08146B8C2800000100440000 +0447061E001A004E402D6C077A0702191A191A053E16000C0F3E091205010E08100A011A +000A0F00921C090C1A10120F400D10370F891B10F62B3232FD3210E6113910ED2F2F003F +3C3F33FD323FED33332F2F31305D2123112E012322061D01211521112311233533353436 +33321617370447BC2B8B35A2850149FEBDBC7F7FE9DE45902CBC056D080C6C8C2C9EFC41 +03BF9E31BFD10E040800000100BB007C045B06140013005740390B0E0F1011080609AA0A +0712130001040605AA060A060C030C010F151F150210630063020407080B0C0D0E111201 +0A022803090563700301032F5DF63C10ED173910E6E65D003F2F1239392FED17392FED17 +3931300125132313053505110535050333032515251125045BFE6D058405FE6D0193FE6D +01930584050193FE6D019301FB05FE7C018405810501A20581050184FE7C058105FE5E05 +000100FD01FF01EC031A00030016400C02560108002D2F013F0102012F5DED003FED3130 +0123113301ECEFEF01FF011B0001FFF6FEEC018F011B0003002EB90000FFE840190D1037 +0118090C370218091037010F0301011F03010300B1022FED002F5D335D2F3130012B2B2B +09012313018FFEF18AA5011BFDD1022F0002FFF6FEEC031F011B000300070051B90004FF +E8400E0D10370518090C37061809103700B8FFE840210D10370118090C37021809103701 +0005010505030F071F07020700B1020204B1062FED332FED002F5D3C332F5D3C3130012B +2B2B2B2B2B0901231323012313031FFEF186A5A4FEF186A5011BFDD1022FFDD1022F0007 +0095FFE30B9305ED000B000F001B00270033003F004B00C640900908060A0918061A083C +073E1808170A1818171A193C163E2908260A2918261A283C253E460D480F560D580F680E +17791F7625792B7631794376490625512F034F030203031F5109020F030E08432B513D20 +19401902191949315137130A4F0C400E020C0E462A003A013A402A3A003401342E2A0016 +01163416282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D12 +3939ED33332F5DED2F5D33ED2F5DED2F2F5D003F3CFD3C332F5D3CFD3C3F3F3FED332F5D +ED5D3130015D011406232226353436333216250123090114062322263534363332160134 +262322061514163332360134262322061514163332362514062322263534363332160734 +262322061514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6 +BAFABB596466585866645904935964665858666459043EBEB2B5BABDB2B6BAB259646658 +586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADCDDE0DADA01B8AC8888ADAD8787 +FE17AC8888ADAD8787AEE0DADCDDE0DADADFAC8888ADAD878700FFFF001A0000055E0801 +023600240000011700D600280175000BB602000F0B050025012B3500FFFF00C80000049D +0801023600280000011700D600260175000BB60100100C020325012B3500FFFF001A0000 +055E08010236002400000117008DFFF80175000BB602000C0C050025012B3500FFFF00C8 +0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500 +FFFF00C80000049D080102360028000001170043003C0175000BB601000D0D020325012B +3500FFFF0089000002D508010236002C00000117008DFF120175000BB601000D0D040925 +012B3500FFFF005D0000030808010236002C0000011700D6FF270175000BB60100100C04 +0925012B3500FFFF007E000002E207500236002C00000117008EFF240175001940130200 +104010501060107010050100100D0409252B355D3500FFFF0089000002D508010236002C +000001170043FF3E0175000BB601000D0D040925012B3500FFFF0073FFE105DA08010236 +003200000117008D00780175000BB6020025250F0325012B3500FFFF0073FFE105DA0801 +023600320000011700D6008F0175000BB6020028240F0325012B3500FFFF0073FFE105DA +08010236003200000117004300AA0175000BB6020025250F0325012B3500FFFF00B2FFE1 +052908010236003800000117008D006E0175000BB60100201F0D1D25012B3500FFFF00B2 +FFE105290801023600380000011700D6005B0175000BB60100221E0D1D25012B3500FFFF +00B2FFE1052908010236003800000117004300AA0175000BB601001F1F0D1D25012B3500 +000100BB00000177045D0003001E4011020501087F05010592001A7F010101880410F65D +FDE65D003F3F3130212311330177BCBC045D00010136051103E1068C0006003A40275905 +5606690566067A0573060601020350056005700503050560030103500060007000030000 +042F332F5D002F5D332F5D1239393130015D01230B0123133303E19FB9B89BE4E3051101 +00FF00017B00000100ED051D042C06530019003940233902350E4902450E04190D190952 +0F101F1002101652100D600301031928000C28000D2F33ED2FED002F5D3333ED2F5DED33 +2F2F31305D010E01232226272E0123220607233E01333216171E0133323637042C0B846F +365C292F412734340483088E67325D2A2F49213339030653989A27252B2B5A4C979A2724 +29295C4600010118053703FE05D10003001440090253100101010000022F332F002F5DED +31300121352103FEFD1A02E605379A0000010113050E0402068C000D0056403A6508650C +7508750C040D5006600670060306060AAA094003F00302D19003E003029003E003028B00 +03018950030150030159030D2A00072A00062F33ED2FED002F5E71725E5D5E5D715E5D5E +ED332F5D3C31305D010E0123222627331E013332363704020AC5A9A9C509A60C6B5B596B +0E068CA8D6D6A8847878840000010221051802F505DB0003000EB50244010015012FED00 +2FED31300123353302F5D4D40518C3000002012D050903E907B1000B00170045402E0F51 +090009300902313009015009600970090309091551030C29200030000200003000600003 +D0000100001229062FED332F5D7172ED002FED332F5D725E715EED313001140623222635 +343633321607342623220615141633323603E9CC9290CECC9293CB917558587576575875 +065E8FC6C5908FC4C48F567776575776760000010161FE59037000140014002440150B02 +1B012B013901041207070B53030D0E2A0000062F332FED003FFD322F2F31305D05140623 +22262735331E0133323635342627331E010370B79225742D091A58326862060399020659 +A2AC0E0CA00A1A4E581D491913340002015605160477068C000300070042B54500450402 +00B8FFE8B30E103704B8FFE840190E10370750036003700303030305019F000100000204 +0204062F33332F2F332F5D002F33332F5D333130012B2B5D09012313230123130477FEFE +8BA9B0FEFE8BA9068CFE8A0176FE8A0176000001019FFE5F037C000A0014002440150E04 +1E042B043B04040A14141053030D000D2A00062F33ED2F003FFD322F2F31305D010E0123 +222635343637330E011514163332363733037C344B2A8BA90D069B0606535A24511108FE +790E0C9E8F263E1A1B3C1E524E1B080000010132051103DD068C0006003A402754015902 +64016B0274017B020606050250036003700303030360020102500060007000030000032F +332F5D002F5D332F5D1239393130015D01032303331B0103DDE4E3E49FB9B8068CFE8501 +7BFF00010000000100180000048005D1000D0047402A3B0B4B0A5A0A7A0A04020B050804 +090309090106030C3501080A030A00000F0F0F01080B140503026C0E10F63232FD325D11 +332F392F2F003FED3F12392F2F12173931305D29011107353711331101150111210480FC +52BABAC6015DFEA302E8021798A395031AFD78011BA3FEE8FE0700010018000002360614 +000B003D4023490559056905030407010A040B05050B0B030801030800050D92000A011A +050704880C10F43232FD3232E62F2F003F3F12392F332F12173931305D01071123110735 +37113311370236B5BCADADBCB5037A91FD1702608D9F8A0318FD7194FFFF0086FFE50502 +0801023600360000011700DF004D0175000BB6010034311A0025012B3500FFFF006EFFE5 +03D7068C023600560000011600DFAE00000BB601003734180025012B3500FFFF007E0000 +050808010236003D0000011700DF00320175000BB601000D0A020625012B3500FFFF005D +000003E3068C0236005D0000011600DF9400000BB601000D0A050625012B35000002017A +FE780228061400030007002940160F094F090201060106050201050B00041F014F050105 +2F5D3CFD3C003F3F1239392F2F3130015D01231133112311330228AEAEAEAE02F6031EF8 +64031E000002000E000005BC05D100120025005240333816481666026811041B1E083C0B +0B071A340C031F3407087600011D1D0713150074270F274027602703091B1E140B09076C +2610F63232FD322F5D10F6ED12392F5D003FED3FED12392FFD393931305D011402070E01 +23211123353311213204171612073426272E012B011121152111333236373E0105BCB193 +66FBCDFE88C4C40174DA01025898AACF7A7958C68ABC0169FE97BC8FD5596F6F02E7CBFE +B65B3F3802E48F025E3F375FFEC4D6AFF0453227FE4C8FFDC62A3947E8000002006AFFE1 +0471061E001F00310084405B190D290D32013420392B362D45014C0D44204A2B442D5A2B +542D6F05741E7421100C03293F090F121A1D041B10100903161B1B3F164F160216022F3E +030A1C111A1D1C030011120F0C26051F162F160216231316090000092C14062FED11332F +1239ED2F5D17391217392F2F003FED3F5D332F111239392F1217392FED123931305D0110 +00232200353400333216172E01270527372E012735211E01173717071612013E01353426 +272E012322061514163332360471FEE4F1E5FEEB0112CA6C9B56208757FEF842ED54905D +0127236225D242BA99A6FEDE313403024BA55693A9A98F427B027DFEBCFEA8010EF5E201 +08353570D64AA2618E43512F1019431A80616D93FE9BFD8A3BA99620371E2D2BAF98B4AE +2C00FFFF0006000004E608010236003C00000117008DFFE40175000BB601000B0A050025 +012B3500FFFF003DFE64047F068C0236005C00000116008DDD00000BB601000A09040025 +012B3500000200C80000049605D100120021005C403E391F491F551180108011051B3400 +0701071A34200C010C0C07090A0309080F231F23021315200030004000700004006F230F +233F23020C1B071400096C2210F632FD32325D10F65DED5D003F3F1239392F5DED2F5DED +3130015D011406070E012B011123113311333216171E01073426272E012B011133323637 +3E010496463C4EDB97C6C6C6CD85C243535ECE343830805AC4A777982F2C2903135CA939 +4B48FEBE05D1FEF22D2C35AA7D486B231E19FDCD292D2966000200B9FE64049006140013 +0020004D4035320239153220430249154220561267127E087C1C0A0E0906174211040C01 +1E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED +3F3FED12393931305D011406070E012322262711231133113E0133321203342623220607 +111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F51A44B5073499DB0023C +88E14E4A512628FE2C07B0FDD43F55FECFFEECCAC84639FD87241AD4000100DC023C05B0 +02DC0003001E401100540F02010240050130054005020000012F332F5D5D002F5DED3130 +0121352105B0FB2C04D4023CA000000101230069056904AF000B00264017D702D80802A7 +0201D705D80B02A80B0105840294020202192F5D002F3130015D71005D71250709012709 +01370901170105696FFE4CFE4C6F01B8FE486F01B401B46FFE48D86F01B8FE486F01B401 +B46FFE4801B86FFE4C00000101230236039205D5000F002E4018055006060C030E03AA01 +0E0505020F0F0C0E2A02100301032F5D33ED39322F2F332F003FFD323F332FED31300121 +35331123353236373E01373311330392FD99EAF22D6C1E252C0387DD02367A0238700D0C +102C28FCDB00000100CF023603C705EF001D0045402D24152518361535184C105E106D10 +651866197D1075180B0F0F0B521302021C52010E00001C02082A16101610022F33332F2F +ED1239332F003FFD323FED332F3130015D0121353E01373E013534262322060723353E01 +333216151406070E01072103C7FD0864A733834A6B5A59AC300D47AF57B4BB6173379B42 +022002369C3E6E29676754454C3D1FB41A239D7D63975A2B6629000100CF020F03BC05F0 +002E007740162A033903450C4A1F540C5C1F6B0864237D0874230A27B8FFC040390B0E37 +2C2B15520F16010F161F164F165F16CF16FF16061621211D52160625020A0A0E52060F1A +2A281622112A2216282C04091000010000092F332F5D121739ED2F2F2FED003FED332F3F +1239ED332F2F5D71ED393931302B5D011406070E012322262735331E013332363534262B +01353332363534262322060723353E0133321615140607151E0103BC42383994595EA54A +0E29C35D648576708F80706B63684DC32C0E4AAD5AAFC16E595F8303314B712223211E1C +B3243B474B553C8D4D443D473E24B21B23886A59721A08116F00FFFF00AB000007A305D5 +0036023B9200003700BB023700000117023C0404FDC300204015020E08020E400E600E02 +010B2B0B5B0B6B0B7F0B045D11355D1135003F35FFFF00AB0000074105D50036023B9200 +003700BB023700000117023E0384FDC3002640190302100803020E1F0E5F0E7F0E03010B +2B0B5B0B6B0B7F0B045D11355D113535003F3535FFFF008C0000077905ED0026023DA600 +002700BB029100000107023E03BCFDC30036402603023608030236103630367F36030131 +003134314B315F316B317B3106000900093F094F09035D11355D11355D113535003F3535 +0001003C0000047405D10011005840330C0F09512F063F060206060B02344F0501050510 +0B01341003200301080803032F00010000130E01050A140F0E2F0B3F0B020B2F5D3333FD +32322F11332F5D332F392F5D003FED2F12392F5DED12392F5DED39393130012111211521 +1121152111231123353311210474FD3E028AFD76014AFEB6C0B6B603820526FE55ABFEEF +8BFECC01348B0412FFFF0073FFE305A208010236002A0000001700D900CF0175FFFF006C +FE590443068C0236004A0000011600D9FE00000BB6020037311A2325012B3500FFFF0089 +000002D507500236002C0000011700DAFF240175000BB601000D0C040925012B35000001 +0086FE59050205EC004700C240990B0B0A1F0036003A1B0B1B1F13362F0B2A1F292F2436 +24463F0B391F3427392A34363441481F4427482A43364B3E44415F035A05523257365544 +6B026F046A30643264366642604679057A2D703670377541754486292B20400E10371F40 +0E10371A060028313F06341D38383C343402212125341D0A101014530C0D0F0F172A0937 +3F153128150031371D0904200074490F49704902206A4810E65D10E611173910ED2FED2F +2FED332F003FFD322F3FED332F3FED332F1112173931302B2B5D011406070E01071E0115 +14062322262735331E01333236353426270E012322242735331604333236353426272E01 +272E013534243332041715232624232206151416171E01171E01050251492C683E0303B3 +9A25742D091A523868620302142515A1FEFF850E71012882B8CD61634BAF62C6BF013CF3 +9D0106650E55FEEB919FC1607940EC52A6A801A957AA3B233711162C199DB10E0CA20A1C +4E5818291201023C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E +28152CB20001006EFE5903D70478004A00AA40810820090C37090204321902173224202B +3B34203A3B43204B3B5A1C5C2D5237534652496B1C6B2D6237624662497C1C7C28743779 +3F74428B0188248531873F1D170300252F4006351A80390139393D3E35041E1E223E1A09 +0D0D1153090D0C0C142A0638401B2F251B002F381A06041D008E4C0F4C1F4C3F4C5F4C7F +4C051D864B10E65D10E611173910ED2FED2F2FED332F003FFD322F3FED332F3FED332F5D +1112173931305D2B011406071E011514062322262735331E01333236353426270E012322 +262735331E0133323635342726272E01272E01353436373E013332161715232E01232206 +15141716171E011716171603D77F6F0205B79225742D091A5832686203021528177CCF46 +0A59DA647C8C26266C288135937B393A38AD6B64CD440A48CE63678E2B2A5E34812B8347 +4701426BA32A13361AA2AC0E0CA00A1A4E58182D0F02023B23D3434F5056422222180918 +0E27976E457A302F373123C935494F4E452323160C180A1E494AFFFF0073FFE505460801 +0236002600000117008D006E0175000BB601002D2C0C1525012B3500FFFF0069FFE703F3 +068C0236004600000116008DCE00000BB601002423090F25012B3500FFFF0073FFE50546 +0801023600260000011700DF00A80175000BB601002E2B0E1525012B3500FFFF0069FFE7 +03F3068C023600460000011600DFF600000BB601002522090F25012B35000002006CFFE1 +04FB0614001B0028006F404A3B05380C3C2232243E284B054A0C4E2245244F2859086908 +70120D0114511A17171018011304072041100403082642070A160088011617131C041A1A +01922A1F2A3F2A02231B010A852910F632ED5D10F632FD3232323210E42F003FED3F3FED +1239393F12392F3CFD3C31305D01231123350E01232202113436373E0133321617352135 +213533153301112E0123220615141633323604FBB8BC4DAD6EC6ED524444B66059864CFE +95016BBCB8FE8C4F73499CB2879750A404F4FB0C754252012E01118EDB4D4C4F2427CE86 +9A9AFB9902792218D6CCC3CD47000001FFFC0684051A06FC00030011B601500200000502 +2F11332F002FED313001212721051AFAE705051E06847800000100FD01FF01EC031A0003 +0016400C02560108002D2F013F0102012F5DED003FED31300123113301ECEFEF01FF011B +FFFF001A0000055E0801023600240000011700D900310175000BB60200110B050025012B +3500FFFF0068FFE1041D068C023600440000011600D9D600000BB602003A340B2625012B +35000002001AFE5F062B05D1001B001E00C840900F051F052E053E05401D700806381C4A +0E450F590E570F051D1E1D1C0A77098709020914100F101D1E0B770C870C020C140D0D0E +570E580F7D0E730F040B34301E401E701E031E091E1D030D0E031B1B1753030D107A0D01 +0D080000142A060F20010E0F1D06040D0C102410391042105A106A1074100710106E200F +20010A0D2B0D360D4D0D550D650D7C0D070D641F10E65D5D10F42F5D1217395D2FED332F +003F5D3C3FFD322F3F1217392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D +005D010E012322263534363703210323012101230E0115141633323637330902062B344B +2A8BA91E0679FD7C92C9021E0108021E610607535A24511108FD91FEFBFEFAFE790E0C9D +90406A150154FE6105D1FA2F1B351B524E1B08033102DBFD250000020068FE5F052E0478 +003A00470099406A0B11052B1A12162B2A0544225F25544065166C2562407B127B1D7F25 +703F0F0C041B04390559166916053A3A3653030D0A103C3D301940190219192810242420 +3F28044541100A3009080000332A060F25012506193B091A2F25132F91490F491F493F49 +03421B13854810F6ED5D10E4113910FD3232322F5D2FED332F003F3C3FED3FED332F1112 +392F5DED12393FFD322F31305D015D010E0123222635343637350E01070E012322263534 +3637362437353426272E012322060723353E01333216171E011511230E01151416333236 +373301110E01070E01151416333236052E344B2A8BA90D041955282F7A5297D26D656601 +1EA42D2A28703D4AB6610A37D06576AF403F421D0607535A24511108FE3456E944516474 +7763A4FE790E0C9E8F263B1377113D12171FC89B7F9D2D2D20081D40541817102725BF0F +24272F2E926CFD0A1B321E524E1B0801FB013705141317615560614DFFFF00C8000005B2 +0801023600270000011700DF00280175000BB60200211E080F25012B35000003006CFFE1 +062706140003001700240072B90000FFC0404A0E10370118090D3702180910373D073D1E +34203B244D074F1E45204B245A0A6A0A70140B02020316011506091C4112040508224209 +0A0000021618061A02041F263F26021F1B040C852510F632ED5D2F33FD32322F332F003F +ED3F3FED1239393F33332F31305D012B2B2B010323130123350E01232202113436373E01 +33321617113303112E012322061514163332360627FA7F98FEFDBC51B067C8EB514544B5 +6158884BBCBC4C78479EB0889650A40614FE0701F9F9EC75464E013401118EDE4E4C5025 +2701E4FAFF0281221ADCCAC7CF47FFFF000E000005BC05D1021600E70000000100C8FE5F +04CD05D10020005C40390C041C042D043D04041235000F100F020F0F090E350B03133516 +090820201C53030D00192A0006060C10030A1473220F22010F1314140A6C2110F432FD32 +5D10E61117392F33ED2F003FFD322F3F3CED3FED12392F71ED31305D010E012322263534 +3637211121152111211521112115230E01151416333236373304CD344B2A8BA90B06FDC7 +03D5FCF1030FFCF1030FFE0607535A24511108FE790E0C9E8F24331D05D1B0FE68B0FDD7 +B01B351B524E1B080002006AFE5F0460047C002C0033007B40560D1E1A1E2604290D2B1E +34043A0D3C1E3B3244044B0D4B32590D502A6C0D602B790D783212191915531D0D013C33 +3323303D29040F230B0B073F2309122A20201A1A0C0C2D1A008F350F351F353F35033301 +1B26853410F6FD325D10F4ED332F3C11332FED003FED332F12393FED12392FED3FFD322F +31305D01211416171E013332363733150E01070E011514163332363733150E0123222635 +343637260011100033321215272E01232206070460FCC93E36348F5672E7310A4A9B5102 +03535A24511108344B2A8BA90604F8FEEB012BF4E2F5B701939697B30C021B6799313030 +5B2CCD1F3109143012524E1B089F0E0C9E8F18321212012A010401120142FEF8F32A94A2 +B284FFFF00C80000049D0801023600280000011700DF00220175000BB601000F0C020325 +012B3500FFFF006AFFE60460068C023600480000011600DFFD00000BB602002320120025 +012B3500FFFF00C80000047608010236002F00000117008DFEC00175000BB60100080702 +0325012B3500FFFF00AB0000025108010236004F00000117008DFE8E0175002FB5700270 +030203B8FFC0B3090C3702B8FFC04011090C3701044F049F040201000605020325012B35 +005D11352B2B5D00000200C80000047606140005000900464016070C0B0D370808090102 +030435010800000B0F0B0106B8FFEA40110E1037080C0B1037060608041408016C0A10F6 +32ED2F332F2B2B5D11332F003FED3F3F332F3130012B2901113311210B0123130476FC52 +C602E8C3FA7F9805D1FADF0564FE0701F900000200BB000003540614000300070042400D +010C0B0D370202030601050800B8FFEA40190E1037020C0B103700000F021F0202020204 +1A7F050105880810F65DFD322F5D332F2B2B003F3F33332F3130012B0103231303231133 +0354FA7F98FCBCBC0614FE0701F9F9EC0614000200C80000047605D1000500090036401E +07562F0801080801020304350108062D07070100000B0F0B010414016C0A10F6ED5D1133 +2F12392FED003FED3F12392F5DED3130290111331121032311330476FC52C602E89CE9E9 +05D1FADF0157010B000200BB00000362061400030007002D401A05560606010201010807 +2D6F067006020606001A7F010101880810F65DED332F5DED003F3F12392FED3130212311 +33012311330177BCBC01EBE7E70614FBF4010900FFFF00C8000005380801023600310000 +0117008D00780175000BB601000C0B050925012B3500FFFF00B90000045F068C02360051 +00000116008D0000000BB6010019180E1625012B3500FFFF00C800000538080102360031 +0000011700DF00A20175000BB601000D0A050925012B3500FFFF00B90000045F068C0236 +00510000011600DF1C00000BB601001A170E0225012B3500FFFF0073FFE105DA08010236 +00320000011700DD008C0175000DB703020029260F0325012B353500FFFF006AFFE10471 +068C023600520000011600DDD800000DB70302001D1A060025012B353500FFFF00C80000 +059808010236003500000117008DFFF60175000BB602002221060B25012B3500FFFF00B9 +00000372068C0236005500000117008DFF380000000BB6010015130A1225012B3500FFFF +00C8000005980801023600350000011700DF000A0175000BB602002320060B25012B3500 +FFFF009200000372068C023600550000011700DFFF600000000BB6010016130A0325012B +3500FFFF0086FFE5050208010236003600000117008D00140175000BB6010033321A1F25 +012B3500FFFF006EFFE503D7068C0236005600000116008D9400000BB601003635063225 +012B350000010000FE5904EE05D1001B0048402E0C071C072C073C07040C0C1053080D01 +18351A030216080B0B132A050F1D1F1D4F1D03005B050114185B4F1901192F5DF4FD32E4 +5D2FED332F003F333FFD323FFD322F31305D0121111E011514062322262735331E013332 +3635342627231121352104EEFDEC0309B79225742D091A58326862050332FDEC04EE0521 +FB04144822A2AC0E0CA00A1A4E581E36170521B00001003EFE5902FD059E0030006F4046 +0C080D1A19081E1A2B082F1A3C08070D0D1153090D20251C3E22201F0503171830302C3F +18094F327F32020C0C142A06182306031C008C321D22251A1F1D4F1C7F1C021C883110F6 +5D3232FD322F10E61117392FED332F5D003FFD322F1239393F3333FD322F3FFD322F3130 +5D250E01071E011514062322262735331E01333236353426272322263511233533113311 +211521111416171E01333236373302FD0C1C100204B79225742D091A58326862030214AB +B27F7FBC0184FE7C0818164D4F2E64160A0A030703122C18A2AC0E0CA00A1A4E58172F10 +B7CB02529E0141FEBF9EFE0358632B28251B0900FFFF0000000004EE0801023600370000 +011700DFFFEE0175000BB601000B08060725012B35000002003EFFEA037A0705001B001F +0073404C0B041C042A042A1D2A1E3A1D3A1E4A1D4A1E551C641C691E741C791E0E1F1F1E +0B10073E1E0D0B0A051B1B173F03094F217F21021C1C1E1E100E008C21080D101A0A0800 +4F077F070207882010F65D323232FD322F10F63211392F332F5D003FFD322F3F333333FD +322F2F332F3130015D250E012322263511233533113311211521111416171E0133323637 +331303231302FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A7DFA7F980A0E12B8 +CB02529E0141FEBF9EFE0358632B28251B090652FE1101EFFFFF00B2FFE1052908010236 +00380000011600DB63500079405B02010900210140215021A02103EF102101902101BD00 +210150218021028B10214021702103B021C021F021039021C02102599021C021E0210310 +21602190210331002101E021010F211F214021502180210521020100241E0D1D25012B35 +3500115D71725E71725E5D71725E5D725E5D725E5D715E353500FFFF00B1FFE1045707B1 +023600580000011600DB0000000DB70201001D17091625012B353500FFFF00B2FFE10529 +0801023600380000011700DD00780175000DB7020100241F0D1D25012B353500FFFF00B1 +FFE10481068C023600580000011600DD0A00000DB70201001D18091625012B353500FFFF +007E0000050808010236003D00000117008D00070175000BB601000B0D050625012B3500 +FFFF005D000003E3068C0236005D00000117008DFF680000000BB601000B0D050625012B +3500FFFF007E0000050807500236003D0000011700DA00390175000BB601000B0A050625 +012B3500FFFF005D000003E305DB0236005D0000011600DA9200000BB601000B0A050625 +012B3500000100C80000048A05D10005001F401003013504030000070F07010214036C06 +10F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D100030073 +FFE105DA05F0001700230027006D404F040004060B0C0B1217001706190C191257015705 +53075F0B580D58115F13531710253560260126260976097915021B3415022134090A2726 +27260F18150373290F29010F291F293F29031E150F682810F6ED5D5D10F6ED1239392F2F +003FED3FED5D12392F5DED3130015D011612151402070E01232224272602353412373624 +33321613100023220011100033320003213521051E5B6163595CFBA19DFEFF5A5A61605C +5801059AA0FF47FEFCE1E3FEFD0108DEDE0107ACFD8D0273052664FEDEB8B8FEDD616566 +6863630120B9B6012167626869FD610122013BFEC5FEDEFEDBFEC901370106B300030069 +FFF0062405E1001D002A00370058403624182C321525062B32091509081603082A1E2532 +65006A0F041E150032150F00072B1518250407140F080839381F393F396F399039045D11 +12392FC4ED173910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01 +071523352E01272E01353436373E01373533151E01171E01073426272E0127113E01373E +0101110E01070E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F +4B57CE403B3A8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A +524AD88C88CC4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01 +363737AA6170B63A2D3C0002006CFFE10443047C00130020005740162A032A203C1A301C +38204F1A421C4820580668060A10B8FFC040230B1037120502110518410E0401081E4205 +0A1114021A0092221F223F22021B1B08852110F6ED5D10F6FD3232003FED3F3FED123939 +3F31302B5D2123350E01232202113436373E0133321617353303112E0123220615141633 +32360443BC51B067C8EB514544B56158884BBCBC4C78479EB0889650A475464E01340111 +8EDE4E4C502C2734FCB6027C221FDCCAC7CF47000002006AFFE104730614001900280086 +4029031C0520171526153B0A3A0E3A1C3E214C0A490E4A1C4F2153176B0E7B0E7A207B21 +1136264626021DB8FFE04034121C371D180A11371D171D0C050F133E1001263F030A1111 +001D0C0F1A1B00140F00902A0F2A1F2A3F2A6F2A040F0F231B06852910F6ED332F5D10E4 +113910ED11393911332F003FED3FFD323F33332F2B2B5D31305D01100023220011343637 +3E01372E012735211521151E01171E01073426270E01070E011514163332360473FEEBEE +F1FEEB564045B45C4CB466032AFDCF44DE5D9676C26E6E4291423F55AA9C99A60227FEF0 +FECA012F01068DC5404852113F8748B39E0A2E9C5488FBA487E45608303532AE7FC9D0D3 +0001006DFFE603EE0478003D007C40432612263B363B49014418590154186A016F0B6418 +79017A0B7418792274350F0C2C3F2B2B03161A1A1E3E16043D3D393F0309192B40090C37 +2B241B10100C2B19040900B8FFC0401009143700003F7F3F803F02331B09863E10F6ED5D +11332F2B1217392FED2F2B2F003FED332F3FED332F1112392FED3931305D250E01232226 +272E0135343637352E01353436373E013332161715232E01232206070E01151416171E01 +3B0115232206070E01151416171E01333236373303EE6BCE734FA446455771795B6C5F41 +40A24F62A45A0D42C3642D4E2A233338302D68356F9E3E642A2931342925653866E8470D +40302A2028277F5E6090260718845C5975222120211CCF33380B140F432C3D440F0E03A6 +0911114A3B354A151314483E0002006AFFE1050F047C0011001D004D40163A15351B4A15 +451B040E3F0D05153E09041B3F030A0FB8FFC040190B0D370E0E090C0F0306121B00901F +1F1F6F1F02181B06851E10F6ED5D10F4ED121739332F2B003FED3FED3FED5D3130011000 +232200111000333216172115211E010734262322061514163332360471FEE7E9F1FEEC01 +1AED376A1D01E0FEE03E44C2A49AA1A4A79C98A8022EFEE7FECC013C01110113013B1609 +A549C27FD7D6E0CDD1DAD7000001000A000003EE045D0007003840230301043F06054000 +4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32 +2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A50002 +0068FE6405EA047A001D0024007840163515740F022110090C37213E1A040F0522037717 +0117B8FFF0400F090C37173E0609050C75147A1E0211B8FFC040250D103711112217041A +05050C1E1B3A0001008F260F261F264F266026040F2601141B0C852510F6ED5D5D10F45D +ED12392FED3939332F2B5D003F3FED2B5D39393F3FED2B31305D011000051123112E0127 +2E01353412373315060215141617113E0133200003342623113E0105EAFEA9FEF3BB82DD +51555E7685E58894E1BD214B270130015DC3E0C1CED30240FEFDFEC40FFE72018E065145 +4AC4869F01128A1163FEF6A7BDE60603E80201FED5FEFBB8DBFCB20AE8000002FFFCFE59 +051AFFAE000300070020400F02500101080650050D0400000905022F3311332F33003FED +12392FED31300521352111213521051AFAE2051EFAE2051ECA78FEAB7800FFFF01230000 +03DC05D10036000400000117000401D90000001E40140302200D5F0D6F0D030D01000005 +10057F0503052F5D35352F5D35350001009A022A03C605F00016004DB90014FFE0B3090C +3715B8FFE0B3090C3713B8FFF84017171B370110130D0D085313020E03012A000018100B +2A0DB8FFC0B3090A370D2F2BFD3211332FED003F3FED332F1239332B31302B012B012311 +3426272E012322060711231133153E013332161503C6AC0E15164D40418D41ABAB4BA254 +9AA6022A0215466A2424234332FD4503AB683E45B9AB000200C8FFE508CA05D1004E005D +00E240210B18044D19012E18204D55316A186631654D791375487952735A0D05200E1037 +3DB8FFE040310E103711001A46043B033F400B0D373F3F433E3B4F3501353B351E37213E +34243134032C573450290129292B56342C0307B8FFC0403C0B0D3707070E3E0309202B3A +4F4A4F0237341F1A20201A330606461A381D3E1A3E1A3E111A00005F0F5F014F13225F33 +7F33023333572A13702B012B2F5DFD32332F5D39ED5D11332FED33332F2F123939ED332F +1112392FED39395D002F2F3FED332F2B3FED12392F5DED1217392FED393933332F5D2FED +332F2B1112173931302B2B5D0114062322262735331E01171E01333236353426272E0127 +2E013534363723112311230E01070E012B01112311333216171E011733353315213E0133 +32161715232E01232206151416171E01171E01013426272E012B0111333236373E0108CA +E2BE6ABA3D0917472D356145667943552A62377E6E0F12DDB57C0C3B2F4DCCA030BCF486 +B44847580A78B5017F24733155B53E0940B15B59723B562E642E7284FA5E36372F83572E +1178962F2F2701429BC23C22D31331161A1E4C5A4844160B131026956E254426FC4E03B2 +45792F4D4DFDD505D12D302F9364DCDC12183024C935494E4F4648170C180C1E8E024F4D +75241F1DFDA32D2F306DFFFF0089FFEB063E05D10036002C00000117002D035400000005 +B20F23015D00FFFF00AFFE59043D05DB0036004C00000117004D02280000001840115023 +60237F23030302500C600C7F0C030C2F5D35355D000200000000052706140016001A0065 +B90017FFE8403F0D10371818090C3719180910370315161575150318181701100D084213 +040E05010D08171740190119100B1A19300D500D700DAF0DCF0D050D0D021A00911C10F6 +ED332F5D33FD322F5D332F003F3C3F3FED12393F332F31305D012B2B2B2123113426272E +012322060711231133153E0133321615090123130527BC1218195E4B4DA84DBCBC58BC63 +B5BEFC72FEF18AA5027C4D87262A294C3BFCBE045D7C4952DACD033FFDD1022F000100D5 +0366028705D100030027B90000FFE840140D10370118090C3702180910370101030300B1 +022FED003F332F3130012B2B2B090123130287FED688C205D1FD95026B00000200D50366 +041805D1000300070050B90004FFE8400E0D10370518090C37061809103700B8FFE84020 +0D10370118090C37021809103746000101050503070304B13F0601060600B1022FED332F +5DED003F3C332F3C3130015D2B2B2B2B2B2B09012313210123130287FED688C20281FED6 +88C205D1FD95026BFD95026B00040095FFE3080705ED001B001F002B003700CA400C471D +481F561D591F681E050BB8FFE040160E103701200E10371F1D1C071D171D021D291E1E1F +29B8FFF44012090B37230C090B374F0D401B7A2F75350417B8FFE8404A0E103711180E10 +371F031B1B17512F034F0302030D030D115109022F51202940290229293551230A1E0840 +1E011C1E322A00260126262C2A1C1E062020390F39010D2000010000142A062FED332F5D +335D11332F123939ED332F5DED2F2F5D003F3FED332F5DED3FED33332F2F5DED332F3F2B +2B5D2B2B3130018710ED5D87C0002B2B015D010E012322263534363332161715232E0123 +220615141633323637330901230901140623222635343633321607342623220615141633 +3236032D1E934EC0D9DDBC417F3F0E3C73396D7F7B71497A250E02F5FCF4A5030C028ABE +B2B5BABDB2B6BAB2596466585866645902BE1232E6D2C9F22121AD3233959C9698422302 +68FA2F05D1FBCCE0DADCDDE0DADADFAC8888ADAD87870002000FFFE8028605D3001B002B +006E400D531D621D701C0316180B113705B8FFF040310B0F37001A010B1C051B1B051612 +120F5216092550050347080112121F2908401114372F0801081C1B001A0008030B2A01B8 +FFC0B3101437012F2BED17332F33322F5D2BED332F5D003FED3FED332F1112392F17392B +2B31305D13371134363332161514020711141633323637150E012322263D0107133E0135 +3426272E01232206070E01150FB17B6F607C78A51D1B1A44693771395C6B4FF8622F0D0D +0A190F0F19060B0C01A6EB01C7E299826D5CFEF7E6FE61592B214AA22C2B727FE162022B +A980371E30110C0D0C0E156E5800000200920000044203B0000300070025401507CB0101 +05CB0307CB010105CB00031003300303032F5DED332FED002FED332FED31301321112113 +1121119203B0FC504C031803B0FC500364FCE80318000001008301BD0252038C00030017 +400B02020300000002300202022F5D332F002F332F3130011121110252FE31038CFE3101 +CF000002008301BD0252038C000300070023401306CB020205CB0304CB000006CB000230 +0202022F5DED332FED002FED332FED313001112111052111210252FE310183FEC9013703 +8CFE3101CF4CFEC9000100B10088042203F9000B0021401409090F032F034F0303030606 +00009000A00003002F5D332F002F5D332F3130133400333200151400232200B10102B7B6 +0102FEFEB6B7FEFE0240B70102FEFEB7B6FEFE0102000002007001AA026603A0000B0017 +0065400B06102326370610171A3700B8FFF0B323263700B8FFF04015171A3712CB06060C +CB000910171A3709100B0E3703B8FFF0B3171A3703B8FFF040130B0E3715CB03030FCB00 +0920093009600904092F5DED332FED2B2B2B2B002FED332FED2B2B2B2B31300132161514 +06232226353436172206151416333236353426016B689393686893926949666748486766 +03A093686893936868934C674849666649486700FFFF001A0000055E073C023600240000 +011700D80031016B000AB602000C0B0607252B35FFFF0068FFE1041D05D1023600440000 +011600D8D900000AB6020036371D26252B35FFFF0073FFE5054608010236002600000117 +00D600A90175000AB601002F2B0F15252B35FFFF0069FFE703F3068C0236004600000116 +00D6F4000011400C014026502602002622060F252B5D3500FFFF0073FFE5054607500236 +00260000011700DA00A80175000AB601002C2B0F15252B35FFFF0069FFE703F305DB0236 +00460000011600DAF5000011400C012024302402002425060F252B5D3500FFFF00C80000 +049D073C023600280000011700D80033016B000AB601000E0F0203252B35FFFF006AFFE6 +046005D1023600480000011600D8F700000AB6020022231200252B35FFFF00C80000049D +0801023600280000011700D900400175000AB60100120C0203252B35FFFF006AFFE60460 +068C023600480000011600D9FE00000F400A027026010026201515252B5D3500FFFF00C8 +0000049D0750023600280000011700DA004F0175000AB601000E0F0203252B35FFFF006A +FFE6046005DB023600480000011600DA0000000AB6020022231218252B35FFFF0073FFE3 +05A208010236002A0000011700D600D00175000AB601002925070F252B35FFFF006CFE59 +0443068C0236004A0000011600D6FB000011400C0230354035020035311A23252B5D3500 +FFFF0073FFE305A207500236002A0000011700DA00CE0175000AB601002728070F252B35 +FFFF006CFE59044305DB0236004A0000011600DAF5000011400C0250336033020033341A +23252B5D350000010073FE5905A205EC0038009540200906060E07261D06130E210E350E +4901410E510E6506650B630E740E741C0F2CB8FFE04043090C37323236532E0D28032235 +40230123230C03101017340C021D34030A3131002A0F2B1F2B022B760901221022042B27 +040910216C25753A0F3A403A021A1509683910F4ED5D10F4ED331217392F2F5D2F5DED33 +2F003FED3FED332F1112392F5DED12393FFD322F3130012B5D0534262722242726023510 +002132041715232E01272E012322001110002132363711213521110E01071E0115140623 +22262735331E0133323603820302ADFEE066677001A1016C7F010999121F763945AF6FFA +FEDD0130010660BF48FE7102535AD45E0103B79225742D091A583268626B152B0F5F6061 +0123C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAEFD8129460F0E2516 +A2AC0E0CA00A1A4E0003006CFE590443068C002300300034009F406F243234320233200D +10373D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C057020 +112F343F344F3403343433331E220512211528401E0407070B40030D2E41150731315033 +603302333300180F0601062124121A0006180092361F363F36022B1B18853510F6ED5D10 +E4113910FD32322F5D1112392F5D332F003FED3FED332F3FED1239393F11332F332F5D31 +305D012B5D2510002122262735331E01333236373E013D010E01232202113436373E0133 +321617373303112E01232206151416333236130323010443FEFEFEF459A9520A2EC86460 +7E23231E559B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A534B3F301117FFE +E4FEF61917C012352E29276E446644430121010790D14C474F272830FCD60261221DD0C6 +BCC23F058EFE8A017600FFFF00C80000053B08010236002B0000011700D600760175000A +B60100100C060B252B35FFFF00B90000045F08010236004B0000011700D600220175001A +4012014F1B6F1B9F1B031B112601001B170808252B35002B5D3500020020000005E305D1 +001300170060403D0E1201160408520B400C0F370B0B0C05350017101702170B10170304 +070C03070000120F150303140278190F19401950190309090B0E16030614076C1810F6ED +1739332F5D10F6ED1739332F002F3F1217392F71ED12392F2BED17393130012311231121 +11231123353335331521353315330135211505E3A8C6FD19C6A8A8C602E7C6A8FE92FD19 +0455FBAB02D9FD2704558CF0F0F0F0FEA8CCCC00000100130000045F0614001E00504030 +031D161D751D0317140E51111112180D08421B041201010D08150F021A0091201F206020 +02141517030B1A110F0D881F10F63232FD17325D10F6ED2F2F003F3C3F3FED123912392F +ED393931305D2123113426272E0123220607112311233533353315211521113E01333216 +15045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC63B5BE027C4D87262A294C3BFCBE +04F4869A9A86FEED4952DACD0002002C0000033307C8000B0025006DB9001BFFD040400B +10370E300B10370C0C15520F1C1F1C021C191C192252700F010F0F09043206030A033201 +0825280F0C1F0C020C1828190C276D080B5A0A1405025A19036D2610F432ED32FDED32E4 +332FED2F5DED003FED323FED32332F5DED33332F2F5DED332F31302B2B29013533112335 +2115231133130E01232226272E0123220607233E01333216171E013332363702D5FDB4C3 +C3024CC3C35E077D663453262D3C20302D0288037E683351282A431D2E31019804A19898 +FB5F0730989724262B2A5B4B88A6242528295B470002FFF200000241063C0003001D0054 +40347C0673130204040DAA1440090C37141114111AAA0707020501081DAD0440090F3704 +10AD117F1F011F9204001A117F010101881E10F65D32FD32ED5D2FED2F2BED003F3F332F +ED33332F2F2BED332F31305D21231133131406232226272E012322061523343633321617 +1E01333236350177BCBCCA6750283A1E202D17232170684E2F3220212C162421045D01DF +81821A202322454181821B1F2322483E0002005F000002FF073C000B000F004D40150E32 +0D0D09043206030A033201082F0F3F0F020F0EB8FFC040150B0D370E0F116D0A080B5A0A +140305025A0E036D1010F632F43210FDF43210E6332F2B2F5D003FFD323FFD32332FED31 +302901353311233521152311331321352102D5FDB4C3C3024CC3C32AFD6002A09804A198 +98FB5F060A9A0002FFFC0000023605D1000300070032401D025301010605057F00700202 +00027F0901099200041A027F050105880810F65D32FD32E65D2F2F5D002F3F332FED3130 +01213521032311330236FDC6023ABFBCBC05379AFA2F045D00020080000002DF07D3000B +00190059401F0C701201121216AA0F0F09043206030A0332010819290C400B0E370C1329 +12B8FFC040130B0F37120C1B6D080B5A0A1405025A12036D1A10F432ED32FDED32E4332F +2BED2F2BED003FED323FED32332FED332F5D333130290135331123352115231133131406 +232226353314163332363502D5FDB4C3C3024CC3C30A939C99979E454D49489804A19898 +FB5F073BA8CFCFA886726E8A00020001000002300668000D0011004840150006060A5003 +0310050F0D2900400B103700072906B8FFC040130B1037067F13011392000E1A067F0F01 +0F881210F65D32FD32E65D2F2BED2F2BED002F3F332FED332F3331300114062322263533 +1416333236350323113302308B8C8A8E924145414427BCBC06689AC0BE9C7A6B6283F998 +045D00010089FE5F031C05D10020004F402D1C20090C3709043206030A03320C01081717 +13531B0D1818102A1E1E0B02226D0A080B5A0A140305025A036D2110F4F43210FDF43210 +E61112392FED332F003FFD322F3F33FD323FFD3231302B21233533112335211523113315 +230E011514163332363733150E012322263534360174EBC3C3024CC3C3C2060942582141 +1309245122879A099804A19898FB5F981C29265150130B9E0A0BA08C22350002008EFE5F +024605DB0003001B0056401C0820090C371B1753070D014402400B0D3702030E050D1104 +04142A0AB8FFC040170B17370A0A0E7F1D011D9200600F1A01607F0E010E881C10F65DE4 +FDE4E65D11332F2BED332F002F333F3F2BED3FFD3231302B01233533130E012322263534 +3637113311230E0115141633323637330183D4D4C3245122859C2508BC3C060742582141 +13090518C3F8990A0B9E8E3F6F19040BFBA31A361B5150130B00FFFF002CFFEB034D0801 +0236002D0000011700D6FF6C01750014B1011AB8FFC040090B0E37001A160415252B2B35 +0002FFC2FE5902AF068C0015001C005540340A011C0102551B651B751B0318161A1B1B1A +1A123E150507070B40030D1A1A4F1301137F06010616121A1306160370150115921E10F4 +5D1732ED2F2F5D2F5D332F003FFD322F3FED332F332F1239395D31305D05140623222627 +35331E01333236373E01351123352137230B012313330209C8A828832C0A1C5F2D485816 +160DE901A5A69FB9B89BE4E31BC4C8100CB30B1C282828715103849EB40100FF00017B00 +FFFF00CDFE59057505D10236002E0000011600DCFB00000AB601001A0C0500252B35FFFF +00C1FE5904AF06140236004E0000011700DCFF7C00000011400C01301A401A02001A0C05 +0A252B5D3500000100C1000004AF045D000B007D40512802D801DB090309010F0D1F011D +021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A0802 +050A0507050105080B02600A700A020A0A00000D200D400D0208031A05890C10F4FD325D +11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0015D +7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B045DFDD102 +2FFDFC00000100C8FE59047605D1001A003F40240C20090C37111115530D0D0203043507 +01081010182A0A0A0105051C0F1C010414016C1B10F4ED5D11332F12392FED332F003F3C +ED3F3FFD322F31302B29011133112115211E011514062322262735331E01333236353426 +02BFFE09C602E8FEE30204B79225742D091A583268620605D1FADFB0122F18A2AC0E0CA0 +0A1A4E581E3E00010005FE5901E906140018003D40240A20090C370F0F13530B0D020104 +01080E0E082A1616017F1A011A92041A7F010101881910F45DFDE45D12392FFD322F003F +2F3F3FFD322F31302B2123113311331E011514062322262735331E013332363534260149 +8EBC6C0105AE8525642809184E285E52010614FA00123724A2AC0C0CA00B174F57153300 +FFFF00C8FE59053805D1023600310000011600DCFE000013400E01201630164016030016 +0A0400252B5D3500FFFF00B9FE59045F047C023600510000011600DC8B000013400E0100 +2310232023030023170D00252B5D3500000100C8FE59053805D10016009D401F00076107 +7107A107040C070B0C1B0736074607540765077507B001B0070A07B8FFC040510B113776 +06010F0102061F01150626013601340646014406560153066006790170060E0406015A01 +550602111115530D0D0207040806030A0104080110100A06010207130A78180F18401802 +0213046C1710F4ED5D10F4FD11393911332F2F003F33333F3C1239393FFD322F31300172 +715D5D002B5D71043501112311210111331114062322262735331E0133320480FD01B901 +330284B9CEB42751250B163A1E7F948A053EFACC05D1FBA00460FA18BFD10806A8050A00 +000100B9FE59045F047C00260045402B03150C191615751504100D084213040E050D081E +1E22531A0D1D1D021A1791281F28602802100B1A0D882710F4FD325D10F6ED332F003FFD +322F3F3F3FED123931305D0435113426272E012322060711231133153E01333216151114 +062322262735331E01333236373603A31218195E4B4DA84DBCBC58BC63B5BECCB4274E26 +0B163C1A4C6117162556024B4D87262A294C3BFCBE045D7C4952DACDFD0FBFCC0706A805 +0A262626FFFF0073FFE105DA0746023600320000011700D8009B0175000AB6020026270F +03252B35FFFF006AFFE1047105D1023600520000011600D8E300000AB602001A1B060025 +2B35FFFF0073FFE105DA0801023600320000011700D9009C0175000AB602002A240F0325 +2B35FFFF006AFFE10471068C023600520000011600D9E400000AB602001E180600252B35 +FFFF00C8FE59059805D1023600350000011600DCF600000AB602002420050D252B350001 +001BFE590372045D002700574034000D100D200D032120090C370C090F131317430A0F05 +1C090826260253220D25251F2A05050913132940297029020C1B1A09882810F4FD325D11 +332F11392FFD322F003FFD322F3F2F3F3CFD322F11123931302B5D1E0133323635342627 +231133153E013332161715232E012322060711331E011514062322262735333C4E285E52 +0102A6BC70AB59312C2C0A2A4F3657A24B840105AE8525642809FA174F57153323045DA5 +5A4B0507C10A094D3DFCFB123724A2AC0C0CA000FFFF0086FFE505020801023600360000 +011700D6004A0175000AB6010035311A00252B35FFFF006EFFE503D7068C023600560000 +011600D6AF00000F400A017F38010038341A00252B5D350000010000000004EE05D1000F +004140250D0A003203030F09043506030F0F111F114F11030B020B085B090D0009140204 +5B4F0501052F5DF432ED393910E4332F2F5D002F3FFD3212392FED393931300121352111 +21352115211121152111230214FEB4014CFDEC04EEFDEC014CFEB4C602E48F01AEB0B0FE +528FFD1C0001003EFFEA02FD059E0023006E40210420090D37181507510A0A0E030F140B +3E110F0E0523231F3F03094F257F250216B8FFC0401E090B3716160713008C250909070C +0A0E111504181A0C07400D103707882410F62B32ED17392F12392F10F63211392F2B5D00 +3FFD322F3F3333FD322F1112392FED393931302B250E012322263D012335331123353311 +331121152111211521151416171E01333236373302FD357D31ABB27F7F7F7FBC0184FE7C +012DFED30818164D4F2E64160A0A0E12B8CBA88601249E0141FEBF9EFEDC865358632B28 +251B0900FFFF00B2FFE1052907C8023600380000011700D700610175000AB601002B1E0D +1D252B35FFFF00B1FFE104570653023600580000011600D70600000AB601002417091625 +2B35FFFF00B2FFE105290746023600380000011700D800630175000AB6010020210D1D25 +2B35FFFF00B1FFE1045705D1023600580000011600D80100000AB60100191A0916252B35 +FFFF00B2FFE105290801023600380000011700D900630175000AB60100241E0D1D252B35 +FFFF00B1FFE10457068C023600580000011600D90100000AB601001D170916252B350001 +00B2FE5F052905D1003400634044231223183D093D2139224C094C214B22771377170A33 +20090C372E2E2A53320D1C24060D031534060A2F2F272A00060023030C1B141E76360F36 +1F364036030F140C6B3510F4ED5D10F6ED1217392FED332F003FED3F1239393FFD322F31 +302B5D053436372206232226272E01351133111416171E01333236373E01351133111406 +070E01070E011514163332363733150E012322260314050509190F8CD0475147C621272C +976A6B962D2721C647512D683D0405535A24511108344B2A8CA8741A271601494852E8A9 +037BFC7B798C394142414239936D038AFC85A2F1502C3B10143C17524E1B089F0E0C9F00 +000100B1FE5F0567045D002A005C40220B0619077A07032720090C370205150905114205 +0A010822221E53260D23231B2A29B8FFC04015091037292914021A17922C1F2C602C020B +1A08872B10F4ED5D10F4FD32322F2BED332F003FFD322F3F3FED3F3C123931302B5D0437 +350E01232226351133111416171E0133323637113311230E011514163332363733150E01 +23222635340395065FAE69B0C4BC101A1B565249AD4BBC1E0607535A24511108344B2A8C +A81D1D7C4B50D7D002D5FD8455792B2C284C3B0342FBA31B351B524E1B089F0E0CA08D24 +FFFF005C0000078D08010236003A0000011700D601690175000AB60100110D0600252B35 +FFFF005600000636068C0236005A0000011700D600BB0000000AB60100110D0600252B35 +FFFF0006000004E608010236003C0000011700D6FFEE0175000AB601000D090500252B35 +FFFF003DFE64047F068C0236005C0000011600D6DD00000AB601000C080400252B350001 +00B900000308061E0010002440140000043F0D0009080000081A6F097F090209891110F6 +5DED332F003F3FFD322F313001232E012322061511231134363332161703080A1F642679 +67BCC2BF3F652A055E09136B8CFB7D0482C2DA0C08000004001A0000055E08000012001E +00210025013F40862B20372040205A18551A501E55206918651A651E0A180B170D4A0646 +125906561278027703082020211F02370187010201140012002021033704870402041405 +05060606091226062912370638124606491258127A0675120B24240C702501251651A00C +F00C02060C160C3F0CF00C040C03340F2170210221212006120405201C401C020C1CB8FF +C0406C393937501C701C021C01050824400E10370F242F240222222440090D372413290F +0F2F0F4F0F8F0F9F0F050F19290009200940098009900905090F270106090F122405050C +0024003A0042005A006A0074000700006E270F27010A052B0535054D05550565057B0507 +05642610E65D5D10E62F5D1217395D2F5DED2F5DED2F2B332F5D2B003F3C2F5D2B335D12 +17392F5DED2F5D72ED2F5D12392F3130015D8710FD5DC0C0C08710FD5DC0C008C0015D00 +5D212303210323012E013534363332161514060727342623220615141633323613090207 +2337055ED394FD8094C901F83139A17373A039302A47393948493838487DFEFEFEFD021D +F39595019FFE6105571F65406D90906D40651FC4364B4A37394B4CFC6602CBFD3505B7CD +CD0000040068FFE1041D07330032003F004B004F00D6B50C0A190A0230B8FFC040880B0E +37590E51215C38690E63216F397B0A7A1474207B380A0208343D3011401102111149084F +4F4E4E43AA062916299F290329400B0D37292F0123494F1F011F291F184149043D41080A +01084E400D10374C4C4E40090C374E4E2640292F2C3F2C022C2C26297F468F4602464600 +0F1F011F1134021A001F0B0091510F511F513F51033A1B0B855010F6ED5D10E6113910FD +32322F5D12392F5DED332F5DED12392F2B332F2B003F3FED3FED33332F5D123911392F2B +5DED332F332F1112392F5DED123931305D012B5D2123350E01070E012322263534363736 +2437353426272E01232206070E010723353E01372E01353436333216151406071E011503 +110E01070E0115141633323603342623220615141633323613032313041DBB1955282F7A +5297D26D6566011EA42E29296D3F3A692A3150130A2369311C259F73739E2E237D87BB56 +E9445164747763A443473939484938384895F3959577113D12171FC89B7F9D2D2D20081D +4156171811140B0D1D07BF0914081E532E6D90906D335B1F22AA9AFE1D01370514131761 +5560614D042C364B4A37394C4D0262FEEE011200FFFF000E0000076D0801023600900000 +0117008D01DE01750011400C020F164F16020016140607252B5D3500FFFF0068FFE3073F +068C023600A000000117008D01690000000AB6030055541B00252B35FFFF0073FF6E05DA +08010236009100000117008D007801750013400E03303A403A603A03003A3B0F00252B5D +3500FFFF005DFF6C0471068C023600A100000116008DE2000011400C03302E402E02002E +2F0C00252B5D35000001015A03400249045D00030014400A01560205032D000201022F5D +ED003FED3130012311330249EFEF0340011DFFFF005C0000078D08010236003A00000117 +004301730175000AB60100100D0600252B35FFFF005600000636068C0236005A00000117 +004300C30000000AB60100100D0600252B35FFFF005C0000078D08010236003A00000117 +008D01690175000AB601000F100600252B35FFFF005600000636068C0236005A00000117 +008D00BF0000000AB601000F100600252B35FFFF005C0000078D07500236003A00000117 +008E016C01750020B10213B8FFC040120D10370F13010100135F13020013100600252B5D +355D2B35FFFF00560000063605DB0236005A00000117008E00BF0000001EB10213B8FFC0 +40100D10370F1301010013010013100600252B5D355D2B35FFFF0006000004E608010236 +003C000001170043000A01750014B1010AB8FFC040090D1037000A0A0500252B2B35FFFF +003DFE64047F068C0236005C000001160043FF000015401001200B300B600B700B04000B +090400252B5D35000001FFED03E40186061300030032B90003FFE4B70D10370101030100 +B8FFAEB30D103700B8FFE840090A0C3700007F0201022F5D332F2B2B003F332F3130012B +010323010186A5F4010F0613FDD1022F0001FFD00685051606FD00030011B60150020000 +05022F11332F002FED3130012135210516FABA0546068578000100890000048B05EE0028 +00934063411253125B1A6312730273129024B603B6240923200551000810082008030808 +1F1C09510F0C1F0C3F0C4F0C040C141418490C01100202284A01080F2A1F2A022327021C +1F20050C08215F1D6F1D7F1D031D0A061306081D13040220004000020000022F332F5D12 +17392F2F332F5D332F3333FD321139395D003FFD323F1239ED332F2F5DED3939332F5DED +393931305D2901353E0137233533352335333534123332161715232E012322061D012115 +21152115210E01071521048BFBFE67620E9DA4A4A3FDCD6998400A3E98568C8B016CFE93 +016DFE8F0F705A0345CF1B817B868C86A7C801012211CE2A30A59094868C86659F2C0B00 +000200B1FFE60511053200180022005F4013380D391C491C580D6A217A21060C100B0D37 +07B8FFF0402A090A37191F290F2615690F790F05013222220F1F32150B0B07330F090C0C +1913260001000024220114122FFD3211332F5DED332F003FED332F2FED12392FED5D2B2B +31305D01211416171E013332363733150E0123200011100021320011272E01272E012322 +06070511FC66423C3AA3607AEA590D82C07FFEC9FEAD01420113FF010CBE02262928875A +9FD50D027884B53E3C3B5648D53637015B0141013A0176FECDFEE92A549133333AD4B100 +FFFF00ABFFE1078305D50036023B9200003700BB023700000117024103F2FDC60016400C +040302100A010B400B7F0B025D1135003F353535FFFF008CFFE107A405ED0036023DA600 +003700BB02910000011702410413FDC600384026040302360A0403023900392039403980 +39FF3905013100315B317B3103000900093F094F09035D11355D11355D11353535003F35 +3535FFFF008AFFE107A405DA0036023FA400003700BB02910000011702410413FDC60038 +4026040302320A040302350035203540358035FF3505012D002D5B2D7B2D03000900093F +094F09035D11355D11355D11353535003F353535FFFF0099FFE1076F05DA00360240A600 +003700BB023100000117024103DEFDC6003640240403020E0A040302116F118011FF1103 +01092B093B0944095B097F0905000400043F04025D11355D11355D11353535003F353535 +00010061FE5901FA00880003002CB90002FFE840170D10370318090C3700180910370F01 +010101000D0202002F332F003F332F5D3130012B2B2B1B01330161A5F4FEF1FE59022FFD +D10000010161FE59037000140014002440150B021B012B013901041207070B53030D0E2A +0000062F332FED003FFD322F2F31305D0514062322262735331E0133323635342627331E +010370B79225742D091A58326862060399020659A2AC0E0CA00A1A4E581D491913340001 +0212050C0305068C000300144009030302002D100301032F5DED002F332F313001032303 +0305319131068CFE8001800000030100050C0418068C00030007000B003F401506050AAF +090902000002072B0640090A37060A2B0BB8FFC0400C090B370B06002D0B100301032F5D +33FD322F2BED2F2BED002F332F12392FED3939313001032303012335330523353302FD31 +803101FDBFBFFDA7BFBF068CFE800180FE8CC3C3C300FFFF00070000055E05D102360024 +00000117019DFDF5FF450012400A020E03020E1F0E4F0E025D1135003F35FFFF00000000 +059005D10037002800F300000117019DFDEEFF4500204014010F030F111011401103011F +0C010C00400101012F5D352F5D355D003F35FFFF00000000062E05D10037002B00F30000 +0117019DFDEEFF4500204014010F030F112011401103011F0C010C00400501052F5D352F +5D355D003F35FFFF0000000003C805D10037002C00F300000117019DFDEEFF4500244018 +010F03011F0C010C00400201020F111F11401150116011055D2F5D352F5D35003F35FFFF +0000FFE1069905F00037003200BF00000117019DFDEEFF45002240150227030F29010227 +1F270101000F000F100F700F035D1135355D11355D003F35FFFF00000000060105D10037 +003C011B00000117019DFDEEFF45002440180109030F0E1F0E2F0E03011F090109001F04 +4004700403042F5D352F5D355D003F35FFFF0000000006D705F0003701BB00B700000117 +019DFDEEFF45002A401E012B03011F2B012B00001C101C201C031C0F2D202D502D602D70 +2D8F2D065D2F5D35115D35003F350004FFCB00000267068C00030007000B000F005C401D +0A090FAF0C0C06070706060205010B2A0A40090F370A0A0404000E2A0FB8FFC04015090F +370F0F0707017F11011192001A7F010101881010F65DFDED5D11332F332F2BED11332F33 +2F2BED002F3F332F332F12392FED39393130212311331303230301233533052335330177 +BCBC0438543801B0ABABFE0FABAB045D022FFE800180FE8CC3C3C300FFFF001A0000055E +05D1021600240000FFFF00C80000052B05D10216002500000002001A0000058605D10003 +00060058403C49056A050205041A000003061A01010215001A0125002A0145004A014B02 +4403590256036B0264037B0275030E020305030000080105010203065401002FED3F1239 +012F11332F17395D31308710FD8710FD04C0005D2901012109020586FA94023201080127 +FE50FE5105D1FAD7047BFB85FFFF00C80000049D05D1021600280000FFFF007E00000508 +05D10216003D0000FFFF00C80000053B05D10216002B0000FFFF0089000002D505D10216 +002C0000FFFF00CD0000057505D10216002E00000001001A0000056205D10006006C404E +0902390258020378017703020203020114000600020314040405490546067C0573060405 +030405002400390042005A006A007400070000080F08010F08010A042B0436044D045504 +65047B0407042F5D5D5D11332F5D002F3F3130015D8710FDC08710FD08C0015D005D2123 +09012301330562D5FE2CFE2CCB022CF00505FAFB05D1FFFF00C8000005F605D102160030 +0000FFFF00C80000053805D102160031000000030072000004BF05D100030007000B0047 +40130535060609013502030A350908054009133704B8FFC0401609133704050504030204 +0908720D0F0D1F0D0209680C10E65D10E41117392F2F2B2B003FED3FED12392FED313001 +213521032135211321352104BFFBB3044D34FC1B03E534FBB3044D0521B0FD08B0FC77B0 +FFFF0073FFE105DA05F0021600320000000100C80000053B05D100070027401703350603 +010501140078090F0940095009030414056C0810F6ED5D10F6ED002F333FED3130212311 +2111231121053BC6FD19C604730521FADF05D100FFFF00C80000049605D1021600330000 +000100760000050005D1000C00EB404709040908450B540B6409640A660B9309930A960B +A409A30AA70B0D0608060B1608160B28032708340A340B430A430B5903550B670B760B8B +0399049908B804B808EB04EB08150BB8FFC0B32529370AB8FFC0B325293709B8FFC0B325 +293708B8FFC04030262937030203080908B3040304030B0A0BB302030264048D02020403 +0203080B3501083505030403A009B009D0090309B8FFC04023191E371009200960097209 +D009E00906090703040B0908070602000010000200000E022F11332F5D1217392F2F5D2B +71332F003FED2FED11173931305D011087ED87C01087ED8708C0012B2B2B2B5D71290135 +090135211521011501210500FB76026CFDA80448FCC0024AFD8A039AB80258020EB3B0FE +061AFDA3FFFF0000000004EE05D1021600370000FFFF0006000004E605D10216003C0000 +FFFF00440000053805D10216003B0000000100B30000064405D10023006240402515251E +021B067518011834380948096F090309192209030810030822142311141023071B180714 +108008A008B0080320255025702503080825240F253F25025D1112392F5D5DC4ED393910 +C42FED2FED002F3F1217392F5DED5D393931305D011406070E01071123112E01272E0135 +1133111416171E01171133113E01373E013511330644514D50E197C59AE24B4E51C63B34 +359A62C5619C353836C6038E9DD74345460AFEBE01420B484245D69C0243FDA66D8E2C2D +2F0703E4FC1C082D2E318571025A0001006C0000062005F00027007D40125B195B256C1A +641D64216C24791A79240821B8FFC0B3090B371DB8FFC0403B090B373002301440024014 +041925140204160B341F02261835011608251202191214081502141C272222290F29010F +291F299029A029040E15171C2FC4ED5D5D11332FC4123939ED2FED2FED003F3CFD3C3FED +1217395D31302B2B5D2901113E01373E01353426232206151416171E0117112135213526 +023510002120001114020715210620FDC03C772C2D34FEDCDCFE342D2D763CFDC0019A9D +CB0177013101310177CB9D019A01832658393B9F6ACEF9F9CE6A9F3B395826FE7DAE7C5A +0138C20114015EFEA2FEECC2FEC85A7CFFFF007E000002E207500236002C00000117008E +FF240175001940130200104010501060107010050100100D0409252B355D3500FFFF0006 +000004E607500236003C00000117008EFFED01750019401302000E400E500E600E700E05 +01000E090500252B355D3500FFFF006CFFE10443068C0236012E00000116019DE200000A +B6020024210800252B35FFFF006DFFE603EE068C0236013000000116019DCC000013400E +014041504170410300413E1219252B5D3500FFFF00B9FE64045F068C023601C600000116 +019D1D00000AB601001A170E16252B35FFFF00A000000193068C023600D500000117019D +FE8E0000000BB601000704020325012B3500FFFF00B1FFE2045C068C023601D100000116 +019EFB00000F400903020100221F0717252B35353500000200B9FE64048D061400180037 +0077404F16200D1037070F4A1B4326433756267929062E200D0F3733200D103705200D10 +371615203E5F21012121032B3E0C0135400309080C15120F200120281B12122008191B00 +90391F390132071A08883810F6FD325D10F6ED1239392FED2F5D1239003F3FED3FED1239 +2F5DED393931302B2B2B5D012B011400232226271123113436333216171E011514060715 +1E01073426272E012B0135333236373E01353426232206070E0115111E01333236048DFE +F3CD4FB03FBCFDDF5A953B39448B7F9FBCC2453A3B924924244282272E2D8A6D49682120 +1E42964895A101BCCAFEF82C2AFE2405D2E0FE2B2E2B8A5B7FBD25111AC797596F1F2016 +A01D1E2262557074352C2C753EFCA2261F9D0001003DFE64047F045D0008006940497507 +01070607081A00010007061A04050505030C0A001A002A004A0059006900750007000505 +15052505450556056605730507050001011A059004A0040204040A091F0A4F0A5F0A035D +1112392F5DC4ED10C42F5D2F5D003F3F31300187FDC08710FD08C0005D09011123110133 +0901047FFE37BCFE43CC0157015A045DFBDBFE2C01D40425FCC4033C0001006CFE6403D6 +0614002F0058401D4600570065287F1178207D21061D1A3E1B012D3F0F070C1A1A19121C +07B8FFE04018090C37000701071C070BB40303310F313F3102231B12853010F6ED5D1133 +2FED33332F5D2B2F1239392F003F2FED3FED3931305D251E011514060723353E01353426 +2B012226353412373E013735213521150E01070602151416171E01171E013B013216039A +201C5A43B35A4C3D2F91E5DE5C4E4BC56CFE3402E875E55A5972060C0A31272479385647 +664B285B2854A93F0E4F7745394CE8E58C01007770CD5E099E874ECE7875FEE88F224828 +264B18160534000100B9FE64045F047C00160038402303151615731503100D084213040E +05010C0D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3F3F3FED12 +3931305D0123113426272E012322060711231133153E0133321615045FBC1218195E4B4D +A84DBCBC58BC63B5BEFE6404184D87262A294C3BFCBE045D7C4952DACD0000030089FFE1 +04750614001700240031006CB9002FFFD6B30A0D3729B8FFD640400A0D37212A0B0D371B +2A0B0D37662C01263E0F241F24022424061E3E3A124A120212012C3E3506450602060A25 +181A0000331F333F330224261A800C900C020C2F5DFD325D11332FFD32003F5DED3F5DED +12392F5DED5D31302B2B2B2B011406070E01232226272E01353412373E01333216171612 +072E01272E01232206070E010705211416171E01333236373E0104752E243AD29898D23A +252D2D2639D39797D339252EBD043120296C4F4F6C29222F040272FD8E2E2428704F4F70 +28242E0300BEFD548789898754FDBEAE010753828A8A8254FEFA548FD6364639394637D5 +8FA18EE93E453E3E453EE900FFFF00BB00000177045D021600D50000000100C1000004A8 +045F001800D3403B0601060216182618451856186618071C023A0169027A029701A602A6 +18C70208020203C60101860101011A001800090801F90801080B0A03090109B8FFEE4040 +10183709B402181703177F0301091808020305010C1010143F0C05060505011A172A1736 +178017A417051517251777179417E917F917060917180201050F0F00B8FFF04013090E37 +00001A0F1A1F1A3F1A0308031A05891910F6FD3C5D11332F2B332F17395D71002F2F3F3F +FD322F111217395D3130018710C0C07AF52B7118C0C004C07172018710FD5D7108C0015D +71212301071123113311013E013332163315232E01232206070304A8F8FE3D70BCBC0180 +487F3F1C3C070B102F0D2F4D1DFB01E96DFE84045DFDDA01A14F3802A602022F21FEF100 +0001003D0000047F061400070085401305040502020306011A07000002031A04040505B8 +FFF0401C0C10372B002604200703050402030601000806680701070506030400B8FFC040 +260910370C001C004B005A006A00790006008D090F090103041304440455046504760406 +04820810E65D5D10F65D2B1117395D2F003F3F17393130015D2B8710FDC01087FDC008C0 +08C0012123090123010333047FCDFEB8FE97C401D1D7D3033DFCC3042001F400000100B9 +FE640465045D00150046402C12200B0D3703200B0D37080205140B051042050900080A0C +0102131A0092171F1760179017030D091A0A881610F6FD3C5D10F6FD3939003F3F3FED3F +3C12393931302B2B2123350E012322262711231133111E013332363711330465BA4A874E +4B7854BCBC209E5B5D8836BC764E3D3650FDF305F9FCBA2752433C034000FFFF003D0000 +047F045D02160059000000010068FE64041106140046008A403C0F020F06090E1B0E241E +24283415361E36284428473C562D563C691779170F1918333F32320C24213D22013F3F0C +030C191C3232232121122B1B1C04B8FFD6400E090C37040408B4231C1280000100B8FFC0 +400B090C370000483A1B12854710F4ED11332F2B5D123939ED332F2B2FED12392F2F332F +1239003F2FED3FFD3212392FED393931305D0514060723353E013534262B012226272E01 +353436373E0137352E01353436373523352115212206070E01151416171E013B01152122 +06070E01151416171E013B013216171E0104115B42B45C4B3A2E8C8CB93F424532302C89 +4C7D96575AE40338FF00446D302D3641332D7650AAFED942692F2B334B403F995A1C4467 +211F226055A83F0E4F7844374E36393C97584E84353145130B1CA56853873A069A9E1D22 +2066434F621A1716A52827256A3B66721919072F25235F00FFFF006AFFE10471047C0216 +00520000000200B9FE640494047C0011001E0042402C3A17351E4A17431E560D05060315 +3E0F041C400309080C121B3A004A00020090201F206F200219071A08881F10F4FD325D10 +F65DED003F3FED3FED123931305D011000232226271123113436373E0133320003342623 +220615111E013332360494FEEBDE41A348BC47423EBB66F30100C2A0929E8D49774BA2B0 +0241FEFEFEAB242BFE2B04227BB9423E42FEDAFEDFDACCC0B6FE6D221DDE00010069FE64 +03FA04770029005C40120C020C06201325233614362340237A1F0817B8FFE040140E1037 +3F194F190219191D3F1504030C263F0B04B8FFD64011090C370418180408B400002B201B +12852A10F4ED11332FED33332F2F2B002FED3F3FED332F5D31302B5D0514060723353E01 +3534262B012226272E013510002132161715232E01232206151416171E013B01321603FA +5E3EB1564D3C2D5C75C64B49530137010354A0430C5E9D44A6BD393232814B64738E6057 +AA3B0E4B7947364F3C4342D092010E0144251BD33E32EEC1708E2D2C2799000100B1FFE2 +045C045D00170030401F1607050F3E0903560366037903880305030A151A0091191F1901 +091A06871810F6ED5D10F6ED003F5DED3F333130011406232226351133111416171E0133 +3236373E01351133045CF4E2DFF6BC14201F6B5C56731E1D15BC0197DADBD7DE02C6FD7F +5D782E2B2B2C2C2C7B5A028100010030FE640488045D000B00A240492A02250839023408 +4B02440879020710091A0A0B0A071A060506011A000B00031A04050402050B080A000606 +0A0405064A0445066A0465067A04770608040C0605080B050204040A00B8FFE040100A10 +3700000D2F0D010604200A1037042F2BC45D11332F2BC4121739003F3F5D111739313001 +8710ED8710ED8710ED8710ED4B535840140B030A070002030A0601080409070005040906 +010F0F0F0F59005D0123090123090133090133010488D5FEA6FEA2CB01BCFE4FD5014F01 +53CBFE4FFE64026BFD95030202F7FDA80258FD11000100B0FE6405E3045D0023006B4047 +1B062618751802183D39094909020919220903081005080C221A3F237F230223111A3010 +7010021023071B18071A109008C008025025602502080825240F25010F251F253F25035D +5D1112392F5D5DC4ED393910C42F5DED2F5DED003F3F1217392F5DED5D39393130011406 +070E01071123112E01272E01351133111416171E01171133113E01373E0135113305E360 +4F52C873BB73C753505FBC4B34388643BB4386383B44BC01BE72A835373705FE68019806 +343936A772029FFD9C718723261E0403C7FC39051C27287B7802640000010071FFE20611 +045D003D0079402D361F3632441F4432551F55326804680F691A69377D1A7D370C283B28 +0903061605210D303E060A3A400C0E3718B8FFC040240C0E37361B001B1B13003A29090A +291A18139028A028C0280328283F3E1F3F3F3F6F3F035D1112392F5DC4C4ED393910C4C4 +2FED2FED2B2B003FED39393F1217392F31305D011406070E0123222627230E0123222627 +2E013534123733150602151416171E01333236373E01371133111E01171E01333236373E +01353402273533161206112F33379D7360A2250627946671A333332F7290E4879F101E1A +5D47334714161D06BA091C1518393A465E1B19169D89E4907201F760C14B505963434462 +5D4C4CBF61AA0115A7116CFECCB742713F37491911122C0F0248FDB8112C111316473937 +7A41B601346D11A7FEEBFFFF00050000022D05DB021600770000FFFF00B1FFE2045C05DB +023601D100000116008EFB000015400F02301D501D601D0301001D180717252B355D3500 +FFFF006AFFE10471068C0236005200000116019DE200000AB602001B180600252B35FFFF +00B1FFE2045C068C023601D100000116019DFB00000AB601001B180717252B35FFFF0071 +FFE20611068C023601D400000117019D00B60000000AB60100413E1300252B35FFFF00C8 +0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500 +0001FFFF0000060705D1002500614025652476240216341F1F061E1A351B03093506182F +073F074F077F0704070717590F010F1500B8FFC04014090D370000270F27011A1F1D011D +1D1F17141A182F33FD32322F5D2F5D11332F2BED5D12392F5D002F2FED3FFD3212392FED +31305D011406070E012B0135333236373E01353426272E01232111231121352115211121 +3216171E010607534957AF8A6E5D5B782F38343135329583FEEBC6FE520468FE0C015398 +BF554C4901CC6CB13A4530B11022286F4E4B73232213FD220521B0B0FE6824423BAEFFFF +00C80000048A07ED023601EB00000117008D003501610015401001300840086008700804 +0008070405252B5D350000010073FFE5053905EC002A006A400C3A1C491C58057606790C +0511B8FFE040370A103701200A103720341D1D0F032A2A26340309131317340F021E1E13 +000010000200002C0F2C010F2C1F2C2F2C3F2C041D206C09682B10F6FD325D5D11332F5D +33332F003FED332F3FED332F1112392FED31302B2B5D250E012322242726023534123736 +243332161715232E01232206070E01072115211416171E013332363733053963EC91A9FE +EE61616969625F0112A98CF65F104EF98D6DAE4846580F0334FCC258474AC4708AF75010 +4127356863630120B7AF011F66626C3427DF40523A3B3BAD72AD8BD94648494A4300FFFF +0086FFE5050205EC021600360000FFFF0089000002D505D10216002C0000FFFF007E0000 +02E207500236002C00000117008EFF240175001940130200104010501060107010050100 +100D0409252B355D3500FFFF002CFFEB02EA05D10216002D000000020012FFFD08A205D1 +000E003D0066B3460C0130B8FFACB30A10371EB8FFC0401D0B0E37073437371618353503 +28282C352408341637081416163500150FB8FFF440110E11370F713F2F3F011813003501 +3535282F332F5DED5D10F62BFD11392FFD32002FED2FFD322F3FED12392FED31302B2B5D +013426272E01232111213236373E01371406070E01232111210E01070602070E01070E01 +2322262335331E01333236373612133612372111213216171E0107D33235379083FEEC01 +0F858F363834CF554754C098FDEEFDF0030B0308251D1D492F306544153C0C0E0A1E0F24 +401647430E050B040391015298C0554C4901C94B72232510FDCB1A252769556CB0374238 +052171D955D6FEEC595A6B2B2C2603C001021617470146012D62014487FDB823423BAE00 +000200C80000088305D1000E002700554020171E07342121161F1B030834161A560F0120 +1F081400166F160216161900150FB8FFF4400F0E11370F71294029011D19141A6C2810F6 +FD325D10F62BFD11392F5DED39395D002F2FED3F3312392FED39393130013426272E0123 +2111213236373E01371406070E0123211121112311331121113311213216171E0107B432 +35379083FEEC010F858F363834CF554754C098FDEEFD65C6C6029BC6015298C0554C4901 +C94B72232510FDCB1A252769556CB037423802DEFD2205D1FDB80248FDB823423BAE0001 +FFFF000005FD05D1001D00504032000E48175817600E620F700E700F0708011A350B0B01 +07033504031301131412121F5F067F0602060306070014037F0101012F5D33FD32322F2F +5D11332FED002F333FFD3212392FED123931305D2123112135211521113E01333216171E +01151123113426272E01232206070273C6FE520468FE0C5FF66765AA3D3D45C6161E2079 +646AC3660521B0B0FE2D1F33323534A373FE11018C4A8C2B2E312622FFFF00CD00000575 +07ED023601F200000117008D003C01610010400A01702301002321050025012B5D350002 +0006FFF904E6078F001A002800AF405A29033801461955140419191A1814171617161716 +191A130001001617181A010500070B0B0F35071B0F21702102212175250125AA0F1E011E +1E0003281A1B221A702101211B2100700A010A360156016501760104160A01031700B8FF +E0401409103700002A502A012A400910371720091037172F2B2B5D11332F2B1217395D2F +5D1139392F5DED2FED003F332F5DED5D332F5D332FED322F11121739018710FDC008C001 +8710FD08C03130005D09010E01070E012322262735331E01333236373E013F0101330901 +030E0123222627331E013332363704E6FDCA225D3634612D2872100E0F462D14481C203F +1624FDD6DB01B301862105C9A8A8C905B602605E5F5F0205D1FB1B4C621B19110801B902 +09060B0C34324F044FFC92036E01BEA6A8A8A67063627100000100C8FEAF053B05D1000B +0032401C060203043409000B0913000002061407780D400D700D020314026C0C10F6ED5D +10F6ED12392FED002F2F33ED3F33313029011133112111331121112302A4FE24C602E7C6 +FE24BB05D1FADB0525FA2FFEAF00FFFF001A0000055E05D1021600240000000200C80000 +052C05D100120021003E40256311011A340C0C070B3508031B3407080A0A131556000100 +71230F234023020C1B14076C2210F6FD325D10F45DED332F003FED3FED12392FED31305D +011406070E0123211121152111213216171E01073426272E01232111213236373E01052C +554754C098FDE403E5FCE1015C98C0554C49CF3235379083FEE20119858F36383401CD6C +B037423805D1B0FE6823423BAE724B72232510FDCB1A25276900FFFF00C80000052B05D1 +021600250000000100C80000048A05D10005001F401003013504030000070F0701021403 +6C0610F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D10002 +000AFEAF059E05D1000D00130049402A09121A124A110310340A030C1307340301051013 +0A0A070E140C0C0113200001000015131307070413052FED392FED11332F5DED392FED12 +392FED002F332FFD32323FED31305D01231121112311333612112111332111210A010705 +9EBCFBE4BC78829B03728DFEADFE0E0E9476FEAF0155FEAB0201D602B1019AFADF0475FE +9BFDAFBFFFFF00C80000049D05D102160028000000010020000007A805D1003700C7402E +093318332933401D40244135541D54247518711D73240B27133333351A130E0C0E020116 +09103701130037000708B8FFEA405A091037081309090A271F1A032C223237070A0C0E33 +35072C02142D350409021521052C03002F0A20375F0A50376F0A6037062C2C0137022733 +350600C5220414051515080A070C0E1A0609C51F0505393810393F395F397F39045D1112 +392F33F41739322F10FD32F41739322F5D002F3F1739FD322F121739FD111739018710FD +2BC08710FD2BC08710FD8710FD3130005D21230123112311230123012E01272E01272E01 +2B0135333216171E01171E01171133113E01373E01373E013B0115232206070E01070E01 +0707A8F2FDF469C46BFDF4E6025158682013251C1B533C3C47A7B23D0B1E0F2C8F56C45C +912E121D093CB5A5473C424B1E1D25132A7D3E02A9FD5702A9FD5702FE3A9C693D571C1B +18B17FAD1E5824696608029DFD610663702C5519AC80B1171C1B5B3A8587270000010051 +FFE5048505EC0040007F40145401583B6701693B7F0B7F0C7031703274380932B8FFE040 +3F0B10370B200B10373E3D1D3420200934703001303029343402100D7F0D020D0D113409 +0A3D1E0B0D37171E0B0D37236C3A1E1E3D3A030C171503734231310C2F332F10F6ED1217 +392F2FED2B2B003FED332F5D3FED332F5D1112392FED393931302B2B5D011E0115140607 +0E012322262735331E01333236373E01353426272E012B0135333236353426272E012322 +06070E010723353E01333216171E0115140607151E010416303F5B4650E68593FB4A0F63 +F97148A83436313C33339159C9B3ADD2352E2D6F4C4E843B3064170D4BF87E7BB14B4E52 +A37D347602CD2A816669AA3C4444371EDE3B4B2A292D6F454F651F1E1BA97F7836521818 +151E1411340DDB2036272C30885A7FB01B0F092F000100C80000053905D1000900644023 +0B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D07B8 +FFE840240B0F3702100C0F3707060102040308030308030807021400780B0F0B400B0207 +14046C0A10F6ED5D10F6FD113939003F3F1217392B2B31305D7121231101231133110133 +0539C5FD1CC8C502DBD104A9FB5705D1FB690497000200C800000539078F000900170093 +40320B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D +0A0F10701002101014AA0F0D010D0D07B8FFE840330B0F3702100C0F3707060102040308 +030308171A500A600A020A111A100A10000403080702140078190F194019020714046C18 +10F6ED5D10F6ED113939111239392FED2F5DED003F3F1217392B2B332F5DED332F5D3331 +305D7121231101231133110133030E0123222627331E01333236370539C5FD1CC8C502DB +D1B505C9A8A8C905B602605E5F5F0204A9FB5705D1FB69049701BEA6A8A8A67063627100 +000100CD0000057505D1002000AF407909011F01290127203A0137204B0147205C016500 +6720760074200D1F200A0D370C200A0D370202038801C8010201B30020001E661B861B02 +1B13120D120D121B1E04152002322F08010808000716351503070305000D121B1E200504 +4F150115150F2220003000400004500001006E22402201080414056C2110F6FD325D10F6 +5D5D322F5D121739002F2F3F3FED1112392F5DFD39121739018710FD5DC031300187107A +FD5D1808C0012B2B5D2123012311231133113E01373E01373E01373E013B011523220607 +0E01070E01070575FEFDA387C6C6335A28284E1E0D231245B9B44F53454E1F1D2B17346B +5A02A7FD5905D1FD6401121917553E1B522DA686B1191D1A583B847C2E0000010012FFFD +051805D10021003DB9001BFFACB309103709B8FFC0401A0B0E370335200301131317350F +01140078238F230103132020122F332FED5D10F6ED002FFD322F2F3FED31302B2B212311 +210E01070602070E01070E012322262335331E0133323637361213361237210518C6FDE6 +030B0308251D1D492F306544153C0C0E0A1E0F24401647430E050B04039B052171D955D6 +FEEC595A6B2B2C2603C001021617470146012D6201448700FFFF00C8000005F605D10216 +00300000FFFF00C80000053B05D10216002B0000FFFF0073FFE105DA05F0021600320000 +000100C80000053B05D100070027401703350603010501140078090F0940095009030414 +056C0810F6ED5D10F6ED002F333FED31302123112111231121053BC6FD19C604730521FA +DF05D100FFFF00C80000049605D1021600330000FFFF0073FFE5054605EC021600260000 +FFFF0000000004EE05D102160037000000010006FFF904E605D1001A0080403C29033801 +461955140419191A1814171617161716191A130001001617181A010500070B0B0F350700 +03700A010A360156016501760104160A01031700B8FFE0401409103700001C501C011C40 +0910371720091037172F2B2B5D11332F2B1217395D2F5D003F2FFD322F11121739018710 +FDC008C0018710FD08C03130005D09010E01070E012322262735331E01333236373E013F +010133090104E6FDCA225D3634612D2872100E0F462D14481C203F1624FDD6DB01B30186 +05D1FB1B4C621B19110801B90209060B0C34324F044FFC92036E00030069FFF0062405E1 +001D002A00370058403624182C321525062B32091509081603082A1E253265006A0F041E +150032150F00072B1518250407140F080839381F393F396F399039045D1112392FC4ED17 +3910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01071523352E01 +272E01353436373E01373533151E01171E01073426272E0127113E01373E0101110E0107 +0E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F4B57CE403B3A +8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A524AD88C88CC +4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01363737AA6170 +B63A2D3CFFFF00440000053805D10216003B0000000100C8FEAF05BE05D1000B0032401C +0602030B08043501080514080800130D40090B370A0A0D0414016C0C10F6ED11332F2BED +392FED003FFD322F3F3331302901113311211133113311230502FBC6C602DDC68DBC05D1 +FADD0523FADDFE010001008E000004EA05D10019003B40243511451154116C0974160502 +0C1435050500180C030017011400781B0F1B010D140C6A1A10F6ED5D10F6FD32002F3F33 +12392FED123931305D2123110E01232226272E01351133111416171E0133323637113304 +EAC681DD6463AC3F3F47C6142323726B71D652C60276282A313535A47201FCFE67577930 +2F2F281E02B1000100C80000077605D1000B003640200A06020308043401091400C60814 +05041401C605050D0C1F0D3F0D500D700D045D1112392FF4ED10FDF4ED002FFD323F3333 +31302901113311211133112111330776F952C6022EC6022EC605D1FADB0525FADB052500 +000100C8FEAF080305D1000F004140260A0602030C080434010F0D13000009140CC60814 +05041401C6050511101F113F1150117011045D1112392FF4ED10FDF4ED332FED002F2FFD +32323F33333130290111331121113311211133113311230747F981C6022EC6022EC68DBC +05D1FADB0525FADB0525FADBFE0300020000000005F405D1000E00210046401D07341B1B +1618351903083416560F011B08144F167F160216161900150FB8FFF4400A0E11370F7123 +0F2301192F5D10F62BFD11392F5DFD325D002FED3FED12392FED3130013426272E012321 +11213236373E01371406070E0123211121352111213216171E0105253235379083FEEC01 +0F858F363834CF554754C098FDEEFE660260015298C0554C4901C94B72232510FDCB1A25 +2769556CB03742380521B0FDB823423BAE00000300C80000069505D1000E001F00230055 +4016440D0107341919161703083416220321560F0100150FB8FFF4B30E11370FB8FFC040 +150C10370F0F21142078250F25702502190814166C2410F6FD325D10F6FD322F2B2BED5D +002F3F2FED3F12392FED31305D013426272E01232111213236373E01371406070E012321 +113311213216171E010123113304533235379083FEEC010F858F363834CF554754C098FD +EEC6015298C0554C490173C6C601C94B72232510FDCB1A252769556CB037423805D1FDB8 +23423BAEFDC505D1000200C80000052205D1000E001F003C401007341919161703083416 +560F0100150FB8FFF440110E11370F71210F21402102190814166C2010F6FD325D10F62B +ED5D002FED3F12392FED3130013426272E01232111213236373E01371406070E01232111 +3311213216171E0104533235379083FEEC010F858F363834CF554754C098FDEEC6015298 +C0554C4901C94B72232510FDCB1A252769556CB037423805D1FDB823423BAE0000010061 +FFE5052905EC002A0070400A3A1C491C640676060426B8FFE0403E0A10370B200A103718 +34191928092424203428020D0D11340909060316035603031A24171403732C0F2C010F2C +1F2C2F2C3F2C04241824180F0C1F0C020C2F5D33332F2F5D5D10F6ED11395D003FED332F +3FED332F1112392FED31302B2B5D0116121514020706042322262735331E01333236373E +01352135212E01272E012322060723353E0133320404616068696366FEEFA38DFE571051 +F78D7BCC444849FCD303230E5C4747B46689F057115DFE85AC010F052C60FEE4C2ACFEDF +676A6B3625DB414D574B50C980AD77AF3939374D43DC27356000000200C8FFE107D305F0 +000B001E006240427814010903060915161A1C5616591C7916761C080C34131E1314031C +03341602100309341C090F13190615180C3F0C580C6F0C040C0C0F0015197320120E140F +6C1F10F6FD3210F6ED12392F5DED1239002F3FED3F3FED1217392FED5D31305D01100023 +2200111000333200012311231133113312002120001110002120000705FEFFDBDDFEFE01 +03DCDB0101FB79F0C6C6F924016A0113013F016CFE90FEC5FECCFE9102E801280135FECC +FED7FEDBFEC90136010EFD3005D1FDAC012D0146FE63FE95FE93FE6601890002002C0000 +04DE05D10010001F0066400C28033506471C5A0759170504B8FFE8403209103703041305 +0506060F113440030103030012340F03000519150904060309045F050105120114007821 +0F2140216021035D10F6FD322F5D17392FED002F2F3FED12392F5DED12393130018710FD +C02B005D212311210123012E01353436373E0133210311212206070E01151416171E0133 +04DEC6FEBFFE43EE01DE96A55F4E47BE7301EAC6FED256682B2E3425292D82560250FDB0 +026E33D5B372A5373228FD240232161D1F7043506A292C1EFFFF0068FFE1041D04780216 +0044000000020074FFE1047C061D00270039006440160C1F35043D29303940044B294039 +6512751273330A33B8FFC0402B0B0D3722062B41002510250225250619411800373F060A +223118180C281B03903B1F3B3F3B02311B0C863A10F6ED5D10F6ED12392F1239003FED3F +ED12392F5DED123931302B5D011E01151400232226272602353436373E01373E01373E01 +37150E01070E01070E01073E01333216133426232206070E01151416171E0133323603EE +4648FED4DB6CB640504F0E19144D3548EBC24F883642814080CF303535084BB3655EAE0F +B29257A04802033A352E6C3E97AA03B846C786FAFEB6494C5F0121D04B9B6C5DAC354959 +11070904AD0408060B3E3135AB4D36493EFE22B9B7372E19431CAED840362DDA000300B9 +00000453045D0015002400330061400C0A0305141A0315147623050CB8FFD6402F090C37 +12112C3C4F1E011E1E071D3D08052D3D0708161B122C0F0F07251B00100D10370090350F +35011E2C1A07883410F6FD325D10F42BED12392F1239ED003FED3FED12392F71ED393931 +302B5D011406070E01232111213216171E0115140607151E01033426272E012B01113332 +36373E01133426272E012B0111333236373E010453413940977BFE3201B07D7F383F3B5E +4A6381FD1F202A694DC4EB4A4724261D3B243D26584EF1B270792C2C2B0152517E2A2F2A +045D111D216A48537A220A1889017D243A101505FECE0B161841FE4237451D1207FE930F +19194800000100B9000003BB045D0005001F4010013F040503700001000007021A038806 +10F6ED11332F5D002F3FED313001211123112103BBFDBABC030203B8FC48045D00020009 +FEF404AF045D000D00130053401C3B124A12020105103E0A050C13073E0310C90A0A070E +1A0C0C01C900B8FFC040120B0E370000152F153F1502131A070704C9052FED392FED5D11 +332F2BED392FED12392FED002FFD32323FED2F3331305D01231121112311333612112111 +3321112106020704AFAFFCB8AF79757302BE87FEBDFEAF0D8053FEF4010FFEF101ACC101 +F90103FC43031FFBFE628600FFFF006AFFE60460047C0216004800000001003400000632 +045D003100D840123A0E3A2D4A0E4A2D5F0C5F2F6F0C6F2F0826B8FFE0B3090B3715B8FF +E0401A090B3724B42D2D2F17B40E0C0E020116091037011A0031000708B8FFEA405E0910 +37081A09090A241C1703291F3C31070A0C0E2F2D072902112A3F040902121D052905002E +0A21315E0A51316F0A60317F0A7031082929013102242D2F0600C71F041A051212080A07 +0C0E170609C71C0505333210333F334F336F33045D1112392F33F41739322F10FD32F417 +39322F5D002F3F1739FD322F121739FD111739018710FD2BC08710FD2BC08710FD8710FD +3130002B2B5D21230123112311230123012E01272E012B0135333216171E01171E011711 +33113E01373E01373E013B0115232206070E01070632E3FE9A5BBA51FE8AD901AF314B1F +1B4A5435457C962D091B0A216740BA4069210B1B082C947D4535554B191C4D2D01FEFE02 +01FEFE0202491A60615542A2647D1A43174C3F0401E4FE1C04404B1942197B66A2465159 +631900010041FFE603C20478003D007FB7263475127D3C032FB8FFE0404C0D103708200D +10373B1B3FAF1CBF1C021C1C06313F2D902DA02D032D2D293E3104200A300A020A0A0E3F +06091C2E231B372E1C373B0409141B00903F7F3F803F02800990090209400B0F37092F2B +5D5D10F6ED1217392FED2F2F003FED332F5D3FED332F5D1112392F5DED3931302B2B5D01 +1406070E012322262735331E01333236373E01353426272E012B0135333236373E013534 +26272E012322060723353E01333216171E0115140607151E0103C2574444A45274D2660D +49E26A326A272A32312A297430A371288128343D3024255B2366C5430D53BE5F4E9B4342 +546D5C677A01395E822827242C2ECE4046131518433A3C48121208A2060D113E442F3D11 +110C3734CF1B221C2222755658851D071989000100B900000466045D00090044402D0B02 +0407020D030103380B103702380E10370706010204030805030808021A00920B1F0B600B +0203071A04880A10F6ED395D10F4FD39003F3F12173931302B2B5D712123110123113311 +01330466BAFDB7AABA0243B00347FCB9045DFCC5033B000200B900000466061500090017 +0073404C0B020407020D030103380B103702380E10370A0F1001101014500D0D07060102 +04030805030817C91F0A2F0A020A11C900101010201003100A100408021A0092191F1960 +190203071A04881810F6ED395D10F6FD391239392F5DED2F5DED003F3F121739332FED33 +2F5D3331302B2B5D7121231101231133110133030E0123222627331E01333236370466BA +FDB7AABA0243B06B05B1A9A9B105AB015B58595A010347FCB9045DFCC5033B01B894A6A6 +94695E5C6B00000100C1000004A9045D001A0093404D0120090E371B02271A360E321635 +1A0502011A001A000A1B0F2B0F020FB41618160A0F181604121A023C2F08010808000713 +3F12050705010508561A9600961AB600B61A05021A181604121200B8FFC04011090E3700 +001C0F1C1F1C0208031A05891B10F6FD325D11332F2B332F17395D003F3C3F3FED111239 +2F5DFD39121739018710FD71C03130018710FDC0015D2B2123012311231133113236373E +01373E013B0115232206070E010704A9F6FE3066BCBC5D72280E1B0D349C9256534F5924 +2859320200FE00045DFE1E434A1B3D1C7170A243545E5D180001001DFFFE043E045D0021 +003FB9001BFFACB30D103709B8FFC0401C0D1037023E2105001313173F0F011A00922303 +1A20203020022020122F332F5DED10F6ED002FFD322F2F3FED31302B2B212311210E0107 +0E01070E01070E012322262335333216333236373E01373E013721043EBCFE5F03060307 +201A183B2222533111410A0A081E0A183312333E0A040703030103BF539A3EA7C7423E4D +1F1E1E02A4020E1332EEE152E166000100B9000004D9045D000C0078401335093A0B4503 +4A0470037F04060B400D103709B8FFC0403D0D10377B027B05790A030A2A090B37050A02 +030904400E103704200D0F373F04010404070B09050107090A0B0305021A00920E0F0E20 +0E02051A07880D10F6ED5D10F6ED111739002F333F3312392F5D2B2B1217393130002B5D +012B2B5D2123110123011123113309013304D9BAFEEA8CFEECB0E301300126E70372FDC2 +023EFC8E045DFD8F0271000100B900000460045D000B0032401C033F0808050A07050105 +0809021A00920D1F0D600D0208031A05880C10F6FD325D10F6FD32003F333F3312392FED +31302123112111231133112111330460BCFDD1BCBC022FBC01F7FE09045DFE3C01C4FFFF +006AFFE10471047C021600520000000100B900000460045D000700254015033F06050005 +011A0092091F09600902041A05880810F6ED5D10F6ED002F333FED313021231121112311 +210460BCFDD1BC03A703BBFC45045D00FFFF00B9FE640490047C0216005300000001006A +FFE703FD04770021005A40430F234F235F23032B01220E2A1624183A01350E3A16351849 +014F0A440E4F1641185901550E6901650E7A01730E131010143F0C0421211A3F03090F00 +0023171B09852210F6ED11332F3C003FED332F3FED332F31305D015D250E01232226272E +013510002132161715232E01232206151416333236373E01373303FD73A5527ACC494951 +0128010161BB4E0B5DB555A7B7B6A83B75302651100B463629474848DC93010B013F3627 +D14744E0C7C7DC1E1813350D0001000A000003EE045D0007003840230301043F06054000 +4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32 +2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A5FFFF +003DFE64047F045D0216005C00000003006FFE64064B061400230030003D007A40105622 +011D011B1E0C09040627353F2118B8FFF040400E0F3718043B2E3F0F06100E0F3706090B +0C392436384924463804241B00C809311B1E2B04091A0C381B12C8800C900C020C0C3F3E +0F3F1F3F3F3F503F803F055D1112392F5DFDED10ED173910FDED5D003F3F2B33FD323F2B +33FD321217393F31305D011406070E01232226271123110E01232202113436373E013332 +16171133113E0133321203342623220607111E0133323605112E01232206151416333236 +064B4C3F3EA259436327BA3D4F54C1F04E3F3DA5523C6331BA2E7C3FC6E2C18888374A3F +2F3F3A8D9BFD7627503187A18F87355B024C95E54A4A4E2E13FE3301CD1E23012E010D8D +DD4B494D251E01E1FE1F1B28FED5FEECBFDE1219FD171619D9AA02E91219CED2C3E01D00 +FFFF003C00000480045D0216005B0000000100B9FEF404DE045D000B0041400F0602050B +08043F01051A080800C90AB8FFC04015090D370A0A0D0D40090E378F0DAF0D02041A0188 +0C10F6ED5D2B11332F2BED392FED002FFD322F3F33313029011133112111331133112304 +2FFC8ABC0226BC87AF045DFC4503BBFC45FE52000001008E0000041F045D0016003C4025 +0C061C062C06750E040209113F0505001509050014011A0092183F18010A1A0009100902 +092F5DED5D10F6FD32002F3F3312392FED123931305D2123110E01232226351133111416 +171E01333236371133041FBC5BA662B4BEBC101A1A5E5445A23CBC01AD1C22B1A70196FE +CA40652524261B12021D000100B900000649045D000B003D40260A06020508043F010809 +1A00CA081A05041A01CA8005A0050205050D0C0F0D200D500D700D045D1112392F5DF4ED +10FDF4ED003FFD323F333331302901113311211133112111330649FA70BC01AEBC01AEBC +045DFC4503BBFC4503BB000100B9FEF406D0045D000F004A402E0A0602050C08043F0108 +0E0DC90000091A0CCA081A05041A01CA80059005A00503050511100F111F113F116F1104 +5D1112392F5DF4ED10FDF4ED392FED002F3FFD32323F3333313029011133112111331121 +1133113311230621FA98BC01AEBC01AEBC87AF045DFC4503BBFC4503BBFC45FE52000002 +000A000004C4045D000E0021004A4015750D01073D4F1B9F1B021B1B16183F1905083D16 +0FB8FFF04016090B371B081A161619001B0F8F230F231F232F2303192F5D10F6FD11392F +FD322B002FED3FED12392F5DED31305D013426272E012B0111333236373E01371406070E +0123211121352111333216171E01040223282A6B64B0AC646E282925C24138429676FE55 +FEB80204F47E8B453A3A0157334D18190AFE8411181A473A518429322A03B8A5FE4D1A33 +2B86000300B9000005A2045D000E001F0023005A4016200523073D4F199F190219191617 +05083D167900010FB8FFF04022090B37001B500F600F700F030F0F231A2292250F253025 +402570250419081A16882410F6FD325D10F6FD322F5DED2B5D002FED3F12392F5DED2F3F +3130013426272E012B0111333236373E01371406070E012321113311333216171E011333 +1123036923282A6B64B0AC646E282925C24138429676FE55BCF47E8B453A3ABBBCBC0157 +334D18190AFE8411181A473A518429322A045DFE4D1A332B8602B1FBA300000200B90000 +0435045D000E001F00424013073D4F199F19021919161705083D167900010FB8FFF04013 +090B37001B0F8F210F212F210219081A16882010F6FD325D10F6ED2B5D002FED3F12392F +5DED3130013426272E012B0111333236373E01371406070E012321113311333216171E01 +037323282A6B64BAB6646E282925C24138429676FE4BBCFE7E8B453A3A0157334D18190A +FE8411181A473A518429322A045DFE4D1A332B8600010053FFE703F604770021007DB532 +0442040210B8FFD640090B0D37152A0B0D371DB8FFD6403F0B1037082A0B1037123D1313 +061F1B1B173E1F049F0A010A0A0E3E0609141C111A0390232340090D371C2F133F134F13 +03131C1380099009020940090C37092F2B5D33332F5D2F2B10F6ED1139003FED332F5D3F +ED332F1112392FED31302B2B2B2B5D011E011510002122262735331E0133323637213521 +2E012322060723353E01333216035D4950FEC9FEFC66BF430D3CC66D9DC40CFDCC023314 +BE8E5BB4570D3FC2677CC803ED46D290FEEAFEB8301BCE2F49C0BA979E9F3D43CE193A44 +000200B9FFE1064C047C000B001E005640363A0335094A034509040C3E131E1314031C03 +3F16041005093F1C0A0F1319061A2F0C010C0C0F001B1990202F203F2002120E1A0F881F +10F6FD325D10F6ED12392F5DED1239002F3FED3F3FED1217392FED5D3130013426232206 +15141633323625231123113311333624333200111000232200058AA69399A1A89292A7FC +D3E8BCBCED190111C7E70112FEF2EBDEFEF5022ED7D5DFCDD4D7D5A2FE06045DFE3BE7FD +FEC4FEEEFEF1FEC201200002004300000413045D0010001F0069B3721C0104B8FFE8403D +0910370304B4050506060F113C030300123D0F0500050909190902191B70090109040603 +09040A051A054A055A0580059005060512011A0092210F21015D10F6FD322F5D17392F5D +ED5D002F2F3FED12392FED12393130018710FDC02B015D212311230123012E0135343637 +3E0133210311232206070E01151416171E01330413BCDDFEA6DD01789186503D3C9C5C01 +AEBCED4D442827251724256A4101BBFE4501CD28A586597C27261BFDF201780A16164B2C +37441E1D1500FFFF006AFFE6046005DB0236004800000116008EF9000014400D03302560 +250202002520120025012B355D3500010013FE6D046206140035006A4044051C1E261E28 +59056905721D0617140E51111112180D08421B0412012F3E2A2A012A0D150F5F2E6F2E7F +2E032E2E0D001A2191371F37603702141517030B1A110F0D883610F63232FD17325D10F6 +ED12392F5D2F2F002F2F5DED3F3FED123912392FED393931305D0026272E01272E012322 +0607112311233533353315211521113E01333216171416151406070602070E01232A0127 +35333236133E013503A501010113191A594650AC4CBCA6A6BC0141FEBF58C162B1BB0303 +020103544746B96A17182A44BB9C09010102064B2B5080292B294D3AFCBE04F4869A9A86 +FEED4952DEC92F6B4B3A703AB0FEFF50504E029EF60150224B2EFFFF00B9000003BB0682 +0236020B00000116008D9AF6000AB6010009070405252B350001006AFFE7040A04770021 +006EB53B0A4B0A021BB8FFD640090B0D37162A0B0D370EB8FFD640340B1037012A0B1037 +193D1818030C1010143E0C0421211D3E03092018301840180318171810031A008E232340 +090D371A1A09852210F6ED2B10E61117392F5D003FED332F3FED332F1112392FED31302B +2B2B2B5D250E01232226272E013510002132161715232E01232206072115211E01333236 +3733040A4E9F7B7DD14C4C52012B010D68BB450C40C2658FC719023CFDC10AC4A46CBD3E +0C302029474849DC92010501453620CB324E9CA197B2C8443200FFFF006EFFE503D70478 +021600560000FFFF00AF0000018305DB0216004C0000FFFF00050000022D05DB02160077 +0000FFFFFFC2FE59021505DB0216004D00000002001DFFFE06F4045D000E003D0072B900 +30FFACB30D10371EB8FFC0401D0D1037073D4F379F3702373716183E350528282C3F2409 +3D167900010FB8FFF0401E090B3737081A161635001B890F010F8F3F0F3F0118C9203530 +35023535282F332F5DED5D10F45DFD11392FFD322B5D002FED2FFD322F3FED12392F5DED +31302B2B00353426272E012B01113332363736371406070E01232111210E01070E01070E +01070E012322262335333216333236373E01373E01372111333216171E01063223282A6B +64B0AC646E2829E74138429676FE55FE5F03060307201A183B2222533111410A0A081E0A +183312333E0A0407030301F47E8B453A3A012037334D18190AFE8411181A81518429322A +03BF539A3EA7C7423E4D1F1E1E02A4020E1332EEE152E166FE4D1A332B86000200B90000 +06F4045D000E0027005D4017171E073D4F219F21022121161C20051A083D167900010FB8 +FFF0401F090B37211E081A16161A001B890F010F8F290F292F294F29031D191A1A882810 +F6FD325D10F65DED11392FED39392B5D002FED2F3F3312392F5DED39393130013426272E +012B0111333236373E01371406070E0123211121112311331121113311333216171E0106 +3223282A6B64B0AC646E282925C24138429676FE55FDF3BCBC020DBCF47E8B453A3A0157 +334D18190AFE8411181A473A518429322A0210FDF0045DFE4D01B3FE4D1A332B86000001 +00130000045F0614001E00504030031D161D751D0317140E51111112180D08421B041201 +010D08150F021A0091201F20602002141517030B1A110F0D881F10F63232FD17325D10F6 +ED2F2F003F3C3F3FED123912392FED393931305D2123113426272E012322060711231123 +3533353315211521113E0133321615045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC +63B5BE027C4D87262A294C3BFCBE04F4869A9A86FEED4952DACDFFFF00C1000004A90682 +0236021200000116008DF9F60011400C01001D401D02001D1C0611252B5D35000002003D +FE64047F06150007001500BD404C04063406440650066006700606090307051903170546 +0149035800570179030902071A000100051A0403044900460402080F0E010E0E12500B0B +0003020405020C15C908400B0E37080FC90EB8FFC040110B0E370E080E04026801010102 +03030400B8FFC040220910370C001C004A006A007A0005008D170F170103041304450465 +0475040504821610E65D5D10F65D2B1117395D2F1139392F2BED2F2BED003F3F12393933 +2FED332F5D333130015D8710FD8710FDC0015D005D0901231301330901130E0123222627 +331E0133323637047FFD74C9D0FE43CC0157015A0805B1A9A9B105AB015B58595A01045D +FA0701D20427FCC4033C01B894A6A694695E5C6B000100B9FEF40460045D000B003F4027 +0A060520030103083E00050802C93F034F037F0303030305091A00920D1F0D600D02081A +05880C10F6ED5D10F6ED12392F5DED003F33ED2F5D3F3331302901112311211133112111 +330460FE84AEFE83BC022FBCFEF4010C045DFC4403BC000100C80000048A076B0007002B +B90006FFC040140D10370606003503030205130606090114026C0810F6ED11332FED002F +3FED332F2B31300111231121113311018EC60308BA0521FADF05D1019AFDB600000100B9 +000003BB05CE00070033B90006FFC0401A0E10370606003F03050205C97006010606090F +0901011A02870810F6ED5D11332F5DED002F3FED332F2B313001112311211133110175BC +0254AE03B8FC48045D0171FDEA00000100CB023C073502DC00030011B601540200000501 +2F11332F002FED3130012135210735F996066A023CA0000400C8000008B905ED00090015 +0021002500A7403E080718073A014901440646075801540656076F0160067F0170060D09 +0D0613190D16137A19751F0625533F224F220222221F401214371F51300D010D0D19B8FF +C040321214371951130202030807040106030100220F2302232223220A1CC910100A0006 +0102071300000416C90A0A270213046C2610F6ED11332FED12392FFD1139391112392FED +1239392F2F5D002F3F1217393FED2B332F5DED2B332F5DED5D3130015D21230111231121 +0111330114062322263534363332160734262322061514163332360121152104FFF5FD72 +B401330250B403BABDB2B6BABEB2B5BAB25865675757676558FE6201B8FE480534FACC05 +D1FB4004C0FE63E0DADADFE0DADCDDAC8888ADAD8787FDE89E00000100B900000460045D +000700254015033F06050005011A0092091F09600902041A05880810F6ED5D10F6ED002F +333FED313021231121112311210460BCFDD1BC03A703BBFC45045D00000101190235028F +05D5000800214011035004040703010E0307002A03000101012F5D33ED392F003F3F332F +ED3130012311233532363733028FA5D1667E0989023502A9752C5600000100EF023D039F +05ED001D0043B90011FFE040250D10370F0F0B521302021C51010E00001C01082A261636 +166616761604160F160F000101012F5D33332F2F5DED1239332F003FFD323FED332F3130 +2B0121353E01373E013534262322060723353E01333216151406070E010721039FFD505B +86276D40584C468F290F41974D9DA9526A318D3701F2023D94456825676D52464A3C20B3 +1B229E7A5D945E2B6A29000100E6021C037305ED002E0074400F6C096C227E097E220455 +0C5A1F0226B8FFE0403B0B0E3703200B0D372C2B15510F16010F161F164F165F16CF16FF +16061621211D51160625020A0A0E51060F1A2A281622112A2216282C04090000092F332F +121739ED2F2F2FED003FED332F3F1239ED332F2F5D71ED393931302B2B5D015D01140607 +0E012322262735331E013332363534262B01353332363534262322060723353E01333216 +15140607151E0103733C30357B4F528F4111259A4F546E645B8C7D575F52574299251140 +964F98AA614D5075033A47702225201E1CAF233B4948533B8B4C423C473E23AF1B228C62 +57711A08106D000200B3023D03BD05ED000A000D003A401E6D067E06020609010D51050C +05030702030E00070B042A09000D060101062F332F12393333FD39392F003F3F1239392F +ED3939323130015D012315233521350133113321110103BDA396FE2F01D295A3FECBFE9F +0319DCDCB9021BFDB10190FE7000000100E6021C037505DA002A004840176F087F08021D +1D1A5125250621511E030A0A0E51060F00B8FFEA400F090C371F21291E1F1E09142A0000 +092F332FED1239392FED2F2B003FED332F3FED12392FFD322F31305D011406070E012322 +262735331E01333236373E01353426272E012322060711211521153E01333216171E0103 +75322F3088574E953C1025924E2C521C1D171F1D1E59353B6C260255FE4814310E547634 +373C0363457A2A2B331C1A9F1436171C1D43272A391415110E0601F08BCF02021722246F +000100F3023503A505DA000600414025560101030100012A020203630073000200000351 +0503020E030002100910370202040000042F332F12392F2B1239003F3FFD322F3130015D +8710ED87C0015D0901230121352103A5FE2AB901F0FDED02B2054EFCE7031A8B000300C5 +021B039105EE001900280037005D40420F0B0F151F0B1F152A022A0439023904492B582B +0A0F251F2526103610042F09261604031D5110023551030F1A2A13202A0D292A090D1316 +04067000010000322A062FED332F5D121739ED2FED2FED003FED3FED1217395D31305D01 +140623222635343637352E0135343633321615140607151E01033426232206151416171E +01173E01133426272E01270E011514163332360391CB9BA7BF5E595246B99095B5505261 +5BBE574F465D302D17482E392618374217582A3A387650516D033579A19F784F78260429 +64476A8D87683F7D2304276B016433483F36263D140A1F0B254FFE79323B1E0A1C0F205D +304A5F4E00020073FFE1068B05F0002800340075400978180176097915021BB8FFC04045 +0910371B694F0001002302031A090A0905151A0915155A095515062C3415023234090A22 +1E2926151B00030F291503360F361F3680369036BF36CF36060F36012F150F683510F6ED +5D5D10D6ED121739D4FDC4003FED3FED5D1239393FDD5DED2B5D31305D011E0115140207 +0E01232224272602353412373624333216171E01173E013534262735331E011514060110 +0023220011100033320005A11F1A63595CFBA19DFEFF5A5A61605C5801059AA0FF591819 +144F43160CA00D0B78FEF9FEFCE1E3FEFD0108DEDE0107044958A663B8FEDD6165666863 +630120B9B6012167626869611B2121044044245B17092F46326C82FE8D0122013BFEC5FE +DEFEDBFEC90137000002006AFFE104C30584001D0029005640391A20090C373A2135274A +21452704151B690D050003213F0904273F030A14102918090C1B03061E1B00902B0F2B1F +2B3F2B6F2B04241B06852A10F6ED5D10F6ED121739DCFDC4003FED3FED12393FFDCD5D31 +302B011000232200111000333216173332363534262735331E01151406071E0107342623 +22061514163332360471FEE8EBEDFEE90117ED33602B5D5A4A160CA00D0B736C4548C2AA +9799A9AA9896AB022EFEEFFEC4013C01110111013D0F104147245B17092F46326A80144D +D98BD9D3D3D9D2D9D700000100B2FFE1067506F8002B004C40342A20090F37252B6A1C03 +0D032615390649067615041534060A2420290F2801281B14002D0F2D402D6F2D7F2D902D +050F140C6B2C10F6ED5D10DEEDD45DFDC4003FED5D3F3FFDC431302B011406070E012322 +26272E01351133111416171E01333236373E0135113332363534262735331E0115140623 +052947514DCE898CD0475147C621272C976A6B962D2721D85A4A160CA00D0BACA00256A2 +F1504C464A4852E8A9037BFC7B798C394142414239936D038A4147245B17092F46328384 +000100B1FFE105A505840025005C403E0B0619077A070323200910371E246A1505020509 +051142050A011D19290F21012114021A40000100270F276F27025F279027A027C027EF27 +050B1A08872610F6ED5D7110D671ED32D45DFDC4002F3FED3F12393FFDC431302B5D2123 +350E01232226351133111416171E0133323637113332363534262735331E011514062B01 +0457BC5FAE69B0C4BC101A1B565249AD4BD05A4A160CA00D0BACA0027C4B50D7D002D5FD +8455792B2C284C3B03424147245B17092F46328384000001020905110342068C00160042 +4029BF0301030606050C50146005010504ADC005D005020540090D370505110940111437 +09290F000100112FDD5DED2B12392F2B5DED002F5DD4ED12392FC55D3130011406071523 +353E013534262322060723353E01333216034242426E2F3026211F251803134926516605 +F8404E1544790C27271827090969060C560000010221FE8202F5FF450003001340090144 +8F0201020015012FED002F5DED31300123353302F5D4D4FE82C3FFFF0154051602FA068C +001600430000FFFF021D051603C3068C0016008D00000002013605110514068C0006000A +004DB90006FFF040100E103705100E10370802010708040305B8FFC040110E1037050560 +0301036007700702070900B8FFC0B50E10370000042F332F2BD6CD5D002F5D332F2B1217 +392F3130012B2B01230B012313332103231303E19FB9B89BE4E30217DA817C05110100FF +00017BFEF6010A0000020003051103E1068C0006000A004AB90006FFF040100E10370510 +0E10370802010809040305B8FFC040180E1037050560030103006F097F0902090704400E +103700042F332BD6CD5D2F002F5D332F2B1217392F3130012B2B01230B01231333012303 +3303E19FB9B89BE4E3FE6181DADF05110100FF00017BFEF6010A00020136051104C00752 +0006001D008EB90006FFF040120E103705100E1037BF0A010A0D0D0C13501BB8FFC0400B +0E10371B0C02010C030305B8FFC0402A0E10370505600301030BADC00CD00C020C400910 +370C0C18104011143710290F07010718400C10371800B8FFC040090E1037000060040104 +2F5D332F2BD42BDD5DED2B12392F2B5DED002F5D332F2B1217392FD42BED12392FC55D31 +30012B2B01230B01231333251406071523353E013534262322060723353E0133321603E1 +9FB9B89BE4E301C342426E2F3026211F251803134926516605110100FF00017B32404E15 +44790C27271827090969060C560000020125051103F307DE000600200064B90006FFF040 +200E103705100E10370710520F171F17A0170317141D520A400D11370A01020305B8FFC0 +40110E10370505600301032029070013291400B8FFC0B40E103700042F332BD6ED2FD6ED +002F5D332F2B123939D62BED3CDD5DED3C3130012B2B01230B01231333130E0123222627 +2E0123220607233E01333216171E013332363703E19FB9B89BE4E3F606865F35491C183A +192B22058C05875F36491C163B192A240405110100FF00017B015289902919162D3E4788 +912A19142E3E47000002014204E703D506FB000D0011003C40251110400F1A3710001006 +0AAA3F030103600E700E020E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D +002F5DEDCD39392F2BCD313001140623222635331416333236353703231303D5B29897B2 +A2555253555EDA817C0646A3BCBCA37C64647CB5FEF6010A0002014204E703D506FB000D +0011003C4025100F400F1A370F000F060AAA3F0301036F107F1002100E0D2A0E0F001F00 +8F000300072A062FEDD45D39ED2FCD5D002F5DEDCD39392F2BCD31300114062322263533 +1416333236350723033303D5B29897B2A2555253555281DADF0646A3BCBCA37C64647C55 +010A0002014204E703D5071E000D002400634040111414131A0F2201221340091A371300 +13060AAA3F0301031213400910371313001F101F201F031F1728500E600E700E030E0D2A +0E0F001F008F000300072A062FEDD45D39ED2F5DEDCD5D392F2BCD002F5DEDCD39392F2B +D45DCD12392FC531300114062322263533141633323635271406071523353E0135342623 +22060723353E0133321603D5B29897B2A2555253551237375C272822191C1E1402103C21 +42570646A3BCBCA37C64647C5B34431238650A2120191D080757060A45000002012504E7 +03F307DE000D0027005840100E17520F1E1F1E021E1B245220110111B8FFC04025090C37 +11006006700602060AAA3F0301031A291B0627290E0D2A0F001F008F000300072A062FED +D45DEDD4ED10D6ED002F5DEDDD5D39D62B71ED3CDD5DED3C313001140623222635331416 +33323635130E01232226272E0123220607233E01333216171E013332363703D5B29897B2 +A255525355C006865F35491C183A192B22058C05875F36491C163B192A24040646A3BCBC +A37C64647C019889902919162D3E4788912A19142E3E47000001020905110342068C0016 +00524035BF0301030606050C50501460147014031409900501C76005010504ADC005D005 +020540091037050511094011143709290F000100112FDD5DED2B12392F2B5DED002F5D5E +5D5ED45DED12392FC55D3130011406071523353E013534262322060723353E0133321603 +4242426E2F3026211F251803134926516605F8404E1544790C27271827090969060C5600 +00020136065403E1080100060020007D404A0702170202141D50200A010A1050076F1701 +0F1770170217010205400D1137050920039003A003B003045910032003C00303C003D003 +0231D003E003025003010F037003020320280700B8FFC040090E10370013281400042F33 +D6ED2F2BD6ED002F5D71725E71725E715ECD2B39392F5D713CEDDD71ED3C31305D012327 +07233733130E01232226272E0123220607233E01333216171E013332363703E1A9AFAEA5 +F8BBEC0B705025491C1B3E141D2806860A6F5227432122301A1B2B0506545959AD010052 +6B190D0D1A202D4E6F17101016232A0000020142064803D50801000D0011005A403E5010 +6010020A50FF03015F030103007F0601060F109F10026F10FF1002106F11010F11701102 +11590E690E720E030E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D002F5D +71DD5D71D45D3CDD7172ED5D313001140623222635331416333236353707233703D5AB9E +9EACA24B5D5A4D4FC681680738589899573058592FC9D8D800020142064803D50801000D +001100644033500E600E020A50FF03015F030103007F0601060F0E9F0E026F0EFF0E020E +6F11010F1170110211561066107D1003100E0D2A0EB8FFC0400F090D370E0F001F008F00 +0300072A062FEDD45D392BED2FCD5D002F5D71DD5D71D45D3CDD7172ED5D313001140623 +222635331416333236350723273303D5AB9E9EACA24B5D5A4D5681C6DF07385898995730 +58592F0FD80000020142064803D50801000D0024008E4062111414131A6F22010F227022 +02223F134F13021340111537130013060A5009900301B0030159700301310F033F037003 +CF0304031213400915371313501F601F701F03001F101F201F301F401F051F17C00E010E +0D2A0E0F001F008F000300072A062FEDD45D39ED2F5DCDCD5D71392F2BCD002F5D5E715E +5D715EEDCD39392F2B712F5D71CD12392FC5313001140623222635331416333236352714 +06071523353E013534262322060723353E0133321603D5AB9E9EACA24B5D5A4D2E2E2E4D +231F1C15191A0E020E321B364A0738589899573058592F612B380F2F54091E1817160805 +4905083900020142064803D50801000D0027009240111B2450DF1101110E17506F1E010F +1E011EB8FFC040520D10371E00060A50099003B00302F0030159200330034003C003D003 +E003066003700302C003D0030231A003B003025003E003020F033F03CF0303031A281B1B +0627280E0E0D2A0F001F008F000300072A062FEDD45DED3C10ED103C10ED002F5D71725E +5D71725E5D715EEDCD322F2B5D71ED3CDD71ED3C31300114062322263533141633323635 +370E01232226272E0123220607233E01333216171E013332363703D5AE9B9BAFA26C3C3C +6BA20B705025491C1B3E141D2806860A6F5227432122301A1B2B050706546A67572E2828 +2EFB526B190D0D1A202D4E6F17101016232A000201360668051008010006001D0088B900 +06FFF0401A0E103705100E1037BF0A010A0D0D0C400E10370C13500F1B011BB8FFC0403A +0D10371B0102030F0570050205050F0301030BADC00CD00C020C400910370C0C18104011 +143710290F07010750006000700003180000600401042F5D332FD45DDD5DED2B12392F2B +5DED002F5D332F5D1239392F2B5DEDC42B392FC55D3130012B2B01232707231333051406 +071523353E013534262322060723353E0133321603E19FB9B89BE4E3021342426E2F3026 +211F25180313492651660668CECE014944404E1544790C27271827090969060C5600FFFF +001AFE82055E05D10236002400000116024B2F00000AB602000D0E0500252B35FFFF0068 +FE82041D04780236004400000116024BBA00000F400A027F36010036370B00252B5D3500 +FFFF001A0000055E080102360024000001170256002F0175001A401202501C0102101C40 +1C701C03001C0B0500252B5D35005D35FFFF0068FFE1041D068C0236004400000116024A +BA000011400C025F457F45021D45340B00252B5D3500FFFF001A0000055E07ED02360024 +00000117024E002F01610011400B0302400F01000F0B0500252B5D353500FFFF0068FFE1 +04F4068C0236004400000116024EE0000013400D030240385038022938340B00252B5D35 +3500FFFF001A0000055E07ED0236002400000117024F002F01610011400B03020F0F0100 +0F0B0500252B5D353500FFFFFFE3FFE1041D068C0236004400000116024FE0000013400D +030240385038022938340B00252B5D353500FFFF001A0000055E08010236002400000116 +025C2F00001740110302400FA00FB00FC00F04000F0B0500252B5D353500FFFF0068FFE1 +04A0075202360044000001160250E0000013400D030240385038022938340B00252B5D35 +3500FFFF001A0000055E0801023600240000011602572F00000CB70302000F0B0500252B +3535FFFF0068FFE1041D07DE02360044000001160251E0000013400D0302403850380229 +38340B00252B5D353500FFFF001AFE82055E07ED023600240000003700D6002F01610116 +024B2F00001840110300141505002502400F01000F0B0500252B5D352B35FFFF0068FE82 +041D068C023600440000003600D6E0000116024BBA00001E4016037F3D01003D3E0B0025 +0240385038022938340B00252B5D352B5D35FFFF001A0000055E08010236002400000116 +02582F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236004400000116 +0252E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000055E08010236 +00240000011602592F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236 +0044000001160253E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000 +055E08010236002400000116025A2F00000CB7030200110B0500252B3535FFFF0068FFE1 +041D071E02360044000001160254E0000011400B0302403A01293A340B00252B5D353500 +FFFF001A0000055E08010236002400000116025B2F00000CB7030200110B0500252B3535 +FFFF0068FFE1041D07DE02360044000001160255E0000011400B0302403A01293A340B00 +252B5D353500FFFF001AFE82055E0801023600240000003700D9002F01750116024B2F00 +001D4013025011011103001B1C0500250200110B0500252B352B3500115D3500FFFF0068 +FE82041D068C023600440000003600D9DD000116024BBA0000184011037F44010044450B +002502293A340B00252B352B5D35FFFF00C8FE82049D05D10236002800000116024B2600 +000AB601000E0F0100252B35FFFF006AFE820460047C0236004800000116024BF900000A +B6021F22231218252B35FFFF00C80000049D08010236002800000117025600260175001C +401401501D0101001D201D501D601D04001D0C0203252B5D35005D35FFFF006AFFE60460 +068C0236004800000116024AF9000018B4026F310131B8FFC040090A1137323120120025 +2B2B5D35FFFF00C80000049D07C8023600280000011700D7002601750012400B01501901 +0100190C0203252B35005D35FFFF006AFFE604600653023600480000011600D7F900000A +B602002D201200252B35FFFF00C80000053A08010236002800000117024E002601750016 +400D0201501001020100100C0203252B3535005D3535FFFF006AFFE6050D068C02360048 +00000116024EF900000CB703021E24201200252B3535FFFF00290000049D080102360028 +00000117024F002601750016400D0201501001020100100C0203252B3535005D3535FFFF +FFFCFFE60460068C0236004800000116024FF900000CB703021E24201200252B3535FFFF +00C80000053608010236002800000116025C26000013400D0201101020100200100C0203 +252B5D353500FFFF006AFFE604B9075202360048000001160250F9000013400D03020024 +2024021E24201200252B5D353500FFFF00C80000049D0801023600280000011602572600 +000CB7020100100C0203252B3535FFFF006AFFE6046007DE02360048000001160251F900 +000CB703021E24201200252B3535FFFF00C8FE82049D0801023600280000003700D60026 +01750116024B2600001D40130110501001020015160203250100100C0203252B352B3500 +5D113500FFFF006AFE820460068C023600480000003600D6F9000116024BF9000014400E +031E292A120025021E24201200252B352B35FFFF0089000002D508010236002C00000117 +0256FF2401750016400E01501101015011010011100409252B5D35005D35FFFF00960000 +01CF068C023600D500000117024AFE8D0000000AB6010009080203252B35FFFF0089FE82 +02D505D10236002C00000117024BFF240000000AB601000E0F0409252B35FFFF00AFFE82 +018305DB0236004C00000117024BFE8E0000000AB602000A0B0203252B35FFFF0073FE82 +05DA05F00236003200000117024B009B0000000AB6020026270F03252B35FFFF006AFE82 +0471047C0236005200000116024BE200000AB602001A1B0600252B35FFFF0073FFE105DA +080102360032000001170256009601750022400B0250340102503470340234B8FFC04009 +090B370034240F03252B2B5D35005D35FFFF006AFFE10471068C0236005200000116024A +E200000F400A02701D01001D1C0600252B5D3500FFFF0073FFE105DA0801023600320000 +0117024E00960175001E401403025028010302202850288028030028240F03252B5D3535 +005D3535FFFF006AFFE104F6068C0236005200000116024EE200001940130302001C201C +501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA08010236003200000117 +024F009601750016400D030250280103020028240F03252B3535005D3535FFFFFFE5FFE1 +0471068C0236005200000116024FE200000CB70302001C180600252B3535FFFF0073FFE1 +05DA08010236003200000117025C009600000015400F0302202850288028030028240F03 +252B5D353500FFFF006AFFE104A2075202360052000001160250E200001940130302001C +201C501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA0801023600320000 +01170257009600000015400F0302202850288028030028240F03252B5D353500FFFF006A +FFE1047107DE02360052000001160251E200001940130302001C201C501C801CB01C0500 +1C180600252B5D353500FFFF0073FE8205DA0801023600320000003700D6009601750117 +024B00960000001D4013025028012803002D2E0F0325020028240F03252B352B3500115D +3500FFFF006AFE820471068C023600520000003600D6E2000116024BE2000014400E0300 +212206002502001C180600252B352B35FFFF0073FFE1068B08010236024600000117008D +007801750014400D025036603602020036360F03252B35005D35FFFF006AFFE104C3068C +0236024700000116008DE200000AB602002B2B0600252B35FFFF0073FFE1068B08010236 +024600000117004300AA0175001A40120250366036020250367036020036360F03252B5D +35005D35FFFF006AFFE104C3068C02360247000001160043E2000011400C02502B602B02 +002B2B0600252B5D3500FFFF0073FFE1068B080102360246000001170256008F01750012 +400B02503A0102003A390F03252B35005D35FFFF006AFFE104C3068C0236024700000116 +024AE200000AB602002F2E0600252B35FFFF0073FFE1068B07C8023602460000011700D7 +008B01750012400B02504201020042350F03252B35005D35FFFF006AFFE104C306530236 +02470000011600D7C400001540100210372037403750370400372A0600252B5D3500FFFF +0073FE82068B05F00236024600000117024B009A0000000AB6020037380F03252B35FFFF +006AFE8204C305840236024700000116024BE200000AB602002C2D0600252B35FFFF00B2 +FE82052905D10236003800000116024B6200000AB6010020210C00252B35FFFF00B1FE82 +0457045D0236005800000116024BFD00000AB60100191A0916252B35FFFF00B2FFE10529 +080102360038000001170256006201750012400B01502301010023220C00252B35005D35 +FFFF00B1FFE10457068C0236005800000116024AFD00000AB601001C1B0916252B35FFFF +00B2FFE1067508010236024800000117008D007C01750014400D01502E602E0201002E2D +0C00252B35005D35FFFF00B1FFE105A5068C0236024900000116008DEE00001840100160 +28010130284028020028290900252B5D35005D35FFFF00B2FFE106750801023602480000 +0117004300AA0175001C401401502D602D0201402D602D802D03002D2D0C00252B5D3500 +5D35FFFF00B1FFE105A5068C023602490000011600430200001840100160270101502760 +27020027270800252B5D35005D35FFFF00B2FFE106750801023602480000011702560062 +01750012400B01503101010031300C00252B35005D35FFFF00B1FFE105A5068C02360249 +00000116024AFD00000AB601002B2A0800252B35FFFF00B2FFE1067507BE023602480000 +011700D70062016B000AB60100392C0C00252B35FFFF00B1FFE105A50653023602490000 +011600D7FD00000AB6010033260800252B35FFFF00B2FE82067506F80236024800000116 +024B6200000AB601002E2F0D00252B35FFFF00B1FE8205A505840236024900000116024B +FD00000AB6010028290800252B35FFFF0006000004E608010236003C000001170043FFE4 +0175001B400A01500A600A0201500A01B8FFD3B40A0A0401252B5D35005D3500FFFF003D +FE64047F068C0236005C000001160043DD000013B5016009700902B8FFDDB40909040025 +2B5D3500FFFF0006FE8204E605D10236003C00000116024BEC00000AB601000A09040125 +2B35FFFF003DFE64047F045D0236005C00000117024B010400000012400D010A0F0A2F0A +4F0A6F0A7F0A055D1135FFFF0006000004E608010236003C000001170256FFEC01750018 +401001500E0101C00ED00E02000E0D0302252B5D35005D35FFFF003DFE64047F068C0236 +005C00000116024AC900000F400A01500D01000D0C0400252B5D3500FFFF0006000004E6 +07C80236003C0000011700D7FFEC01750012400B01501601010016090500252B35005D35 +FFFF003DFE64047F06530236005C0000011600D7DD00000AB6010015080400252B350003 +006CFEBD04FB0614001B0028002C007E40523B05380C3C2232243E284B054A0C4E224524 +4F285908690870120D2AB52B0114511A17171018011304072041100403082642070A2C2B +2C2B010A1600881617131C041A1A01922E1F2E3F2E02231B010A852D10F632ED5D10F632 +ED32323232ED2F111239392F2F003FED3F3FED1239393F12392F3CFD3C2FED31305D0123 +1123350E01232202113436373E0133321617352135213533153301112E01232206151416 +3332361321352104FBB8BC4DAD6EC6ED524444B66059864CFE95016BBCB8FE8C4F73499C +B2879750A4EAFCB4034C04F4FB0C754252012E01118EDB4D4C4F2427CE869A9AFB990279 +2218D6CCC3CD47FDE286FFFF00ED051D042C0653001600D700000002008A009104900498 +0023002F004D40332D290B0802231D1A141108172F0501052729050F1701170F311F3102 +24290B0802231D1A1411080E202001202A29200F0E010E2F5D33ED2F5D121739ED5D002F +5D33ED2F5D121739ED31300107270E01232226270727372E01353436372737173E013332 +16173717071E011514060727342623220615141633323604906EEC2C4A342E5724EC6DE9 +1718161AEA6FEB24572D2C5825EA71EB1818191765694B496B694B496B01016EEA1A1619 +17EC71EA25592B34492BED6EEB17191817EA6DED2653302D5824A949706E4B4A6F6D0000 +0002000000000000FF4C00780000000000000000000000000000000000000000037D0000 +01020103010401050106010701080109010A010B010C010D010E010F0110011101120113 +011401150116011701180119011A011B011C011D011E011F012001210122012301240125 +0126012701280129012A012B012C012D012E012F01300131013201330134013501360137 +01380139013A013B013C013D013E013F0140014101420143014401450146014701480149 +014A014B014C014D014E014F0150015101520153015401550156015701580159015A015B +015C015D015E015F0160016101620163016401650166016701680169016A016B016C016D +016E016F0170017101720173017401750176017701780179017A017B017C017D017E017F +0180018101820183018401850186018701880189018A018B018C018D018E018F01900191 +01920193019401950196019701980199019A019B019C019D019E019F01A001A101A201A3 +01A401A501A601A701A801A901AA01AB01AC01AD01AE01AF01B001B101B201B301B401B5 +01B601B701B801B901BA01BB01BC01BD01BE01BF01C001C101C201C301C401C501C601C7 +01C801C901CA01CB01CC01CD01CE01CF01D001D101D201D301D401D501D601D701D801D9 +01DA01DB01DC01DD01DE01DF01E001E101E201E301E401E501E601E701E801E901EA01EB +01EC01ED01EE01EF01F001F101F201F301F401F501F601F701F801F901FA01FB01FC01FD +01FE01FF0200020102020203020402050206020702080209020A020B020C020D020E020F +0210021102120213021402150216021702180219021A021B021C021D021E021F02200221 +02220223022402250226022702280229022A022B022C022D022E022F0230023102320233 +023402350236023702380239023A023B023C023D023E023F024002410242024302440245 +0246024702480249024A024B024C024D024E024F02500251025202530254025502560257 +02580259025A025B025C025D025E025F0260026102620263026402650266026702680269 +026A026B026C026D026E026F0270027102720273027402750276027702780279027A027B +027C027D027E027F0280028102820283028402850286028702880289028A028B028C028D +028E028F0290029102920293029402950296029702980299029A029B029C029D029E029F +02A002A102A202A302A402A502A602A702A802A902AA02AB02AC02AD02AE02AF02B002B1 +02B202B302B402B502B602B702B802B902BA02BB02BC02BD02BE02BF02C002C102C202C3 +02C402C502C602C702C802C902CA02CB02CC02CD02CE02CF02D002D102D202D302D402D5 +02D602D702D802D902DA02DB02DC02DD02DE02DF02E002E102E202E302E402E502E602E7 +02E802E902EA02EB02EC02ED02EE02EF02F002F102F202F302F402F502F602F702F802F9 +02FA02FB02FC02FD02FE02FF0300030103020303030403050306030703080309030A030B +030C030D030E030F0310031103120313031403150316031703180319031A031B031C031D +031E031F0320032103220323032403250326032703280329032A032B032C032D032E032F +0330033103320333033403350336033703380339033A033B033C033D033E033F03400341 +03420343034403450346034703480349034A034B034C034D034E034F0350035103520353 +035403550356035703580359035A035B035C035D035E035F036003610362036303640365 +0366036703680369036A036B036C036D036E036F03700371037203730374037503760377 +03780379037A037B037C037D037E037F0380038103820383038403850386038703880389 +038A038B038C038D038E038F0390039103920393039403950396039703980399039A039B +039C039D039E039F03A003A103A203A303A403A503A603A703A803A903AA03AB03AC03AD +03AE03AF03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE03CF03D003D1 +03D203D303D403D503D603D703D803D903DA03DB03DC03DD03DE03DF03E003E103E203E3 +03E403E503E603E703E803E903EA03EB03EC03ED03EE03EF03F003F103F203F303F403F5 +03F603F703F803F903FA03FB03FC03FD03FE03FF04000401040204030404040504060407 +04080409040A040B040C040D040E040F0410041104120413041404150416041704180419 +041A041B041C041D041E041F0420042104220423042404250426042704280429042A042B +042C042D042E042F0430043104320433043404350436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D044E044F +0450045104520453045404550456045704580459045A045B045C045D045E045F04600461 +04620463046404650466046704680469046A046B046C046D046E046F0470047104720473 +047404750476047704780479047A047B047C047D052E6E756C6C106E6F6E6D61726B696E +6772657475726E057370616365066578636C616D0871756F746564626C0A6E756D626572 +7369676E06646F6C6C61720770657263656E7409616D70657273616E640B71756F746573 +696E676C6509706172656E6C6566740A706172656E726967687408617374657269736B04 +706C757305636F6D6D610668797068656E06706572696F6405736C617368047A65726F03 +6F6E650374776F05746872656504666F757204666976650373697805736576656E056569 +676874046E696E6505636F6C6F6E0973656D69636F6C6F6E046C65737305657175616C07 +67726561746572087175657374696F6E0261740141014201430144014501460147014801 +49014A014B014C014D014E014F0150015101520153015401550156015701580159015A0B +627261636B65746C656674096261636B736C6173680C627261636B657472696768740B61 +7363696963697263756D0A756E64657273636F7265056772617665016101620163016401 +650166016701680169016A016B016C016D016E016F017001710172017301740175017601 +7701780179017A0962726163656C656674036261720A627261636572696768740A617363 +696974696C646509416469657265736973054172696E670843636564696C6C6106456163 +757465064E74696C6465094F646965726573697309556469657265736973066161637574 +65066167726176650B6163697263756D666C657809616469657265736973066174696C64 +65056172696E670863636564696C6C6106656163757465066567726176650B6563697263 +756D666C65780965646965726573697306696163757465066967726176650B6963697263 +756D666C657809696469657265736973066E74696C6465066F6163757465066F67726176 +650B6F63697263756D666C6578096F6469657265736973066F74696C6465067561637574 +65067567726176650B7563697263756D666C657809756469657265736973066461676765 +72066465677265650463656E7408737465726C696E670773656374696F6E0662756C6C65 +74097061726167726170680A6765726D616E64626C730A7265676973746572656409636F +707972696768740974726164656D61726B056163757465086469657265736973086E6F74 +657175616C024145064F736C61736808696E66696E69747909706C75736D696E7573096C +657373657175616C0C67726561746572657175616C0379656E036D75310B706172746961 +6C646966660973756D6D6174696F6E0770726F647563740370693108696E74656772616C +0B6F726466656D696E696E650C6F72646D617363756C696E65034F686D026165066F736C +6173680C7175657374696F6E646F776E0A6578636C616D646F776E0A6C6F676963616C6E +6F74077261646963616C06666C6F72696E0B617070726F78657175616C09696E6372656D +656E740D6775696C6C656D6F746C6566740E6775696C6C656D6F74726967687408656C6C +697073697306416772617665064174696C6465064F74696C6465024F45026F6506656E64 +61736806656D646173680C71756F746564626C6C6566740D71756F746564626C72696768 +740971756F74656C6566740A71756F7465726967687406646976696465076C6F7A656E67 +650979646965726573697309596469657265736973086672616374696F6E044575726F0D +6775696C73696E676C6C6566740E6775696C73696E676C726967687402666902666C0964 +616767657264626C0E706572696F6463656E74657265640E71756F746573696E676C6261 +73650C71756F746564626C626173650B70657274686F7573616E640B4163697263756D66 +6C65780B4563697263756D666C6578064161637574650945646965726573697306456772 +617665064961637574650B4963697263756D666C65780949646965726573697306496772 +617665064F61637574650B4F63697263756D666C6578064F677261766506556163757465 +0B5563697263756D666C65780655677261766508646F746C657373690A63697263756D66 +6C65780574696C6465066D6163726F6E05627265766509646F74616363656E740472696E +6707636564696C6C610C68756E676172756D6C617574066F676F6E656B056361726F6E06 +4C736C617368066C736C61736806536361726F6E06736361726F6E065A6361726F6E067A +6361726F6E0962726F6B656E626172034574680365746806596163757465067961637574 +650554686F726E0574686F726E056D696E7573086D756C7469706C790B6F6E6573757065 +72696F720B74776F7375706572696F720D74687265657375706572696F72076F6E656861 +6C660A6F6E65717561727465720D74687265657175617274657273056672616E63064762 +72657665066762726576650449646F740853636564696C6C610873636564696C6C610643 +61637574650663616375746506436361726F6E06636361726F6E07646D6163726F6E096F +76657273636F7265066D6964646F74064162726576650661627265766507416F676F6E65 +6B07616F676F6E656B06446361726F6E06646361726F6E0644736C61736807456F676F6E +656B07656F676F6E656B06456361726F6E06656361726F6E064C6163757465066C616375 +7465064C6361726F6E066C6361726F6E044C646F74046C646F74064E6163757465066E61 +63757465064E6361726F6E066E6361726F6E094F64626C6163757465096F64626C616375 +7465065261637574650672616375746506526361726F6E06726361726F6E065361637574 +65067361637574650854636564696C6C610874636564696C6C6106546361726F6E067463 +61726F6E055572696E67057572696E67095564626C6163757465097564626C6163757465 +065A6163757465067A6163757465045A646F74047A646F740547616D6D61055468657461 +0350686905616C7068610564656C746107657073696C6F6E057369676D61037461750370 +68690D756E64657273636F726564626C096578636C616D64626C096E7375706572696F72 +0670657365746102494A02696A0B6E61706F7374726F706865066D696E75746506736563 +6F6E64096166696936313234380961666969363132383906483232303733064831383534 +3306483138353531064831383533330A6F70656E62756C6C657407416D6163726F6E0761 +6D6163726F6E0B4363697263756D666C65780B6363697263756D666C65780443646F7404 +63646F7407456D6163726F6E07656D6163726F6E06456272657665066562726576650445 +646F740465646F740B4763697263756D666C65780B6763697263756D666C65780447646F +740467646F740847636564696C6C610867636564696C6C610B4863697263756D666C6578 +0B6863697263756D666C657804486261720468626172064974696C6465066974696C6465 +07496D6163726F6E07696D6163726F6E064962726576650669627265766507496F676F6E +656B07696F676F6E656B0B4A63697263756D666C65780B6A63697263756D666C6578084B +636564696C6C61086B636564696C6C610C6B677265656E6C616E646963084C636564696C +6C61086C636564696C6C61084E636564696C6C61086E636564696C6C6103456E6703656E +67074F6D6163726F6E076F6D6163726F6E064F6272657665066F62726576650852636564 +696C6C610872636564696C6C610B5363697263756D666C65780B7363697263756D666C65 +7804546261720474626172065574696C6465067574696C646507556D6163726F6E07756D +6163726F6E065562726576650675627265766507556F676F6E656B07756F676F6E656B0B +5763697263756D666C65780B7763697263756D666C65780B5963697263756D666C65780B +7963697263756D666C6578056C6F6E67730A4172696E6761637574650A6172696E676163 +757465074145616375746507616561637574650B4F736C61736861637574650B6F736C61 +7368616375746509616E6F74656C65696106576772617665067767726176650657616375 +746506776163757465095764696572657369730977646965726573697306596772617665 +067967726176650D71756F74657265766572736564097261646963616C65780961666969 +303839343109657374696D61746564096F6E656569676874680C74687265656569676874 +68730B66697665656967687468730C736576656E656967687468730B636F6D6D61616363 +656E7410756E646572636F6D6D61616363656E7405746F6E6F730D646965726573697374 +6F6E6F730A416C706861746F6E6F730C457073696C6F6E746F6E6F7308457461746F6E6F +7309496F7461746F6E6F730C4F6D6963726F6E746F6E6F730C557073696C6F6E746F6E6F +730A4F6D656761746F6E6F7311696F74616469657265736973746F6E6F7305416C706861 +04426574610544656C746107457073696C6F6E045A6574610345746104496F7461054B61 +707061064C616D626461024D75024E75025869074F6D6963726F6E0250690352686F0553 +69676D610354617507557073696C6F6E0343686903507369054F6D6567610C496F746164 +696572657369730F557073696C6F6E64696572657369730A616C706861746F6E6F730C65 +7073696C6F6E746F6E6F7308657461746F6E6F7309696F7461746F6E6F7314757073696C +6F6E6469657265736973746F6E6F7304626574610567616D6D61047A6574610365746105 +746865746104696F7461056B61707061066C616D626461026D75026E75027869076F6D69 +63726F6E0372686F067369676D613107757073696C6F6E0363686903707369056F6D6567 +610C696F746164696572657369730F757073696C6F6E64696572657369730C6F6D696372 +6F6E746F6E6F730C757073696C6F6E746F6E6F730A6F6D656761746F6E6F730961666969 +313030323309616669693130303531096166696931303035320961666969313030353309 +616669693130303534096166696931303035350961666969313030353609616669693130 +303537096166696931303035380961666969313030353909616669693130303630096166 +696931303036310961666969313030363209616669693130313435096166696931303031 +370961666969313030313809616669693130303139096166696931303032300961666969 +313030323109616669693130303232096166696931303032340961666969313030323509 +616669693130303236096166696931303032370961666969313030323809616669693130 +303239096166696931303033300961666969313030333109616669693130303332096166 +696931303033330961666969313030333409616669693130303335096166696931303033 +360961666969313030333709616669693130303338096166696931303033390961666969 +313030343009616669693130303431096166696931303034320961666969313030343309 +616669693130303434096166696931303034350961666969313030343609616669693130 +303437096166696931303034380961666969313030343909616669693130303635096166 +696931303036360961666969313030363709616669693130303638096166696931303036 +390961666969313030373009616669693130303732096166696931303037330961666969 +313030373409616669693130303735096166696931303037360961666969313030373709 +616669693130303738096166696931303037390961666969313030383009616669693130 +303831096166696931303038320961666969313030383309616669693130303834096166 +696931303038350961666969313030383609616669693130303837096166696931303038 +380961666969313030383909616669693130303930096166696931303039310961666969 +313030393209616669693130303933096166696931303039340961666969313030393509 +616669693130303936096166696931303039370961666969313030373109616669693130 +303939096166696931303130300961666969313031303109616669693130313032096166 +696931303130330961666969313031303409616669693130313035096166696931303130 +360961666969313031303709616669693130313038096166696931303130390961666969 +313031313009616669693130313933096166696931303035300961666969313030393809 +616669693030323038096166696936313335320270690C6F6E656E756D657261746F720C +74776F6E756D657261746F720E74687265656E756D657261746F720D666F75726E756D65 +7261746F720D666976656E756D657261746F720E736576656E6E756D657261746F720E65 +696768746E756D657261746F7210446F6E74436F6D707265737348544D5808676C797068 +35373908676C79706835383008676C797068353831054F686F726E056F686F726E055568 +6F726E0575686F726E0D686F6F6B61626F7665636F6D620C646F7462656C6F77636F6D62 +096772617665636F6D62096163757465636F6D6208676C79706835393008676C79706835 +393108676C79706835393208676C79706835393308676C79706835393408676C79706835 +393508676C79706835393608676C79706835393708676C79706835393808676C79706835 +393908676C79706836303008676C79706836303108676C79706836303208676C79706836 +303308676C7970683630340941646F7462656C6F770961646F7462656C6F770A41686F6F +6B61626F76650A61686F6F6B61626F7665104163697263756D666C657861637574651061 +63697263756D666C65786163757465104163697263756D666C6578677261766510616369 +7263756D666C65786772617665144163697263756D666C6578686F6F6B61626F76651461 +63697263756D666C6578686F6F6B61626F7665104163697263756D666C657874696C6465 +106163697263756D666C657874696C6465134163697263756D666C6578646F7462656C6F +77136163697263756D666C6578646F7462656C6F770B41627265766561637574650B6162 +7265766561637574650B41627265766567726176650B61627265766567726176650F4162 +72657665686F6F6B61626F76650F616272657665686F6F6B61626F76650B416272657665 +74696C64650B61627265766574696C64650E416272657665646F7462656C6F770E616272 +657665646F7462656C6F770945646F7462656C6F770965646F7462656C6F770A45686F6F +6B61626F76650A65686F6F6B61626F7665064574696C6465066574696C64651045636972 +63756D666C65786163757465106563697263756D666C6578616375746510456369726375 +6D666C65786772617665106563697263756D666C65786772617665144563697263756D66 +6C6578686F6F6B61626F7665146563697263756D666C6578686F6F6B61626F7665104563 +697263756D666C657874696C6465106563697263756D666C657874696C64651345636972 +63756D666C6578646F7462656C6F77136563697263756D666C6578646F7462656C6F770A +49686F6F6B61626F76650A69686F6F6B61626F76650949646F7462656C6F770969646F74 +62656C6F7708676C79706836343908676C79706836353008676C79706836353108676C79 +70683635320573686576610A68617461667365676F6C0A686174616670617461680B6861 +74616671616D617473056869726971057473657265057365676F6C057061746168067161 +6D61747305686F6C616D0671756275747306646167657368056D65746567056D61716166 +0472616665057061736571077368696E646F740673696E646F7408736F66706173757104 +616C6566036265740567696D656C0564616C657402686503766176057A6179696E036865 +740374657403796F640866696E616C6B6166036B6166056C616D65640866696E616C6D65 +6D036D656D0866696E616C6E756E036E756E0673616D656B68046179696E0766696E616C +70650270650A66696E616C747361646905747361646903716F660472657368047368696E +0374617609646F75626C6576617606766176796F6409646F75626C65796F640667657265 +73680967657273686179696D0D6E657773686571656C7369676E0A7661767368696E646F +740D66696E616C6B616673686576610E66696E616C6B616671616D6174730A6C616D6564 +686F6C616D106C616D6564686F6C616D64616765736807616C746179696E0B7368696E73 +68696E646F740A7368696E73696E646F74117368696E6461676573687368696E646F7410 +7368696E64616765736873696E646F7409616C656670617461680A616C656671616D6174 +7309616C65666D61706971096265746461676573680B67696D656C6461676573680B6461 +6C6574646167657368086865646167657368097661766461676573680B7A6179696E6461 +676573680974657464616765736809796F646461676573680E66696E616C6B6166646167 +657368096B61666461676573680B6C616D6564646167657368096D656D64616765736809 +6E756E6461676573680C73616D656B686461676573680D66696E616C7065646167657368 +0870656461676573680B747361646964616765736809716F666461676573680A72657368 +6461676573680A7368696E64616765736808746176646167657308766176686F6C616D07 +62657472616665076B6166726166650670657261666509616C65666C616D6564127A6572 +6F77696474686E6F6E6A6F696E65720F7A65726F77696474686A6F696E65720F6C656674 +746F72696768746D61726B0F7269676874746F6C6566746D61726B096166696935373338 +380961666969353734303309616669693537343037096166696935373430390961666969 +353734343009616669693537343531096166696935373435320961666969353734353309 +616669693537343534096166696935373435350961666969353734353609616669693537 +343537096166696935373435380961666969353733393209616669693537333933096166 +696935373339340961666969353733393509616669693537333936096166696935373339 +370961666969353733393809616669693537333939096166696935373430300961666969 +353734303109616669693537333831096166696935373436310961666969363331363709 +616669693537343539096166696935373534330961666969353735333409616669693537 +343934096166696936323834330961666969363238343409616669693632383435096166 +696936343234300961666969363432343109616669693633393534096166696935373338 +320961666969363432343209616669693632383831096166696935373530340961666969 +353733363909616669693537333730096166696935373337310961666969353733373209 +616669693537333733096166696935373337340961666969353733373509616669693537 +333931096166696935373437310961666969353734363009616669693532323538096166 +696935373530360961666969363239353809616669693632393536096166696935323935 +370961666969353735303509616669693632383839096166696936323838370961666969 +363238383809616669693537353037096166696936323936310961666969363239353909 +616669693632393630096166696935373530380961666969363239363209616669693537 +353637096166696936323936340961666969353233303509616669693532333036096166 +696935373530390961666969363239363709616669693632393635096166696936323936 +360961666969353735353509616669693532333634096166696936333735330961666969 +363337353409616669693633373539096166696936333736330961666969363337393509 +616669693632383931096166696936333830380961666969363239333809616669693633 +383130096166696936323934320961666969363239343709616669693633383133096166 +696936333832330961666969363338323409616669693633383333096166696936333834 +340961666969363238383209616669693632383833096166696936323838340961666969 +363238383509616669693632383836094F646F7462656C6F77096F646F7462656C6F770A +4F686F6F6B61626F76650A6F686F6F6B61626F7665104F63697263756D666C6578616375 +7465106F63697263756D666C65786163757465104F63697263756D666C65786772617665 +106F63697263756D666C65786772617665144F63697263756D666C6578686F6F6B61626F +7665146F63697263756D666C6578686F6F6B61626F7665104F63697263756D666C657874 +696C6465106F63697263756D666C657874696C6465134F63697263756D666C6578646F74 +62656C6F77136F63697263756D666C6578646F7462656C6F770A4F686F726E6163757465 +0A6F686F726E61637574650A4F686F726E67726176650A6F686F726E67726176650E4F68 +6F726E686F6F6B61626F76650E6F686F726E686F6F6B61626F76650A4F686F726E74696C +64650A6F686F726E74696C64650D4F686F726E646F7462656C6F770D6F686F726E646F74 +62656C6F770955646F7462656C6F770975646F7462656C6F770A55686F6F6B61626F7665> +<0A75686F6F6B61626F76650A55686F726E61637574650A75686F726E61637574650A5568 +6F726E67726176650A75686F726E67726176650E55686F726E686F6F6B61626F76650E75 +686F726E686F6F6B61626F76650A55686F726E74696C64650A75686F726E74696C64650D +55686F726E646F7462656C6F770D75686F726E646F7462656C6F7708676C797068383832 +08676C7970683838330959646F7462656C6F770979646F7462656C6F770A59686F6F6B61 +626F76650A79686F6F6B61626F7665065974696C6465067974696C646504646F6E670974 +696C6465636F6D620863757272656E63790000000000000100000C92000102160C000009 +0084000400B4FF9C000400B6FF9C000A0024FF9C000A0090FF9C000F00B4FF2E000F00B6 +FF2E00100024FFCE0010002CFFE20010002DFF9C00100036FFEC00100037FF6A00100039 +FFCE0010003AFFCE0010003BFFB00010003CFF740010003DFFE200100044FFEC00100059 +FFD80010005AFFEC0010005BFFCE0010005CFFD80010005DFFD800100090FFCE001000A0 +FFEC0011000FFF7E00110010FF60001100B1FF88001100B2FF88001100B4FF2E001100B6 +FF2E001D00B2FF7400240010FFCE00240036FFF600240037FF8800240038FFF600240039 +FFC40024003AFFCE0024003CFFB000240057FFEC00240058FFF600240059FFCE0024005A +FFE20024005CFFCE002400B1FFCE002400B2FFCE002400B3FFCE002400B4FF88002400B5 +FFCE002400B6FF880025000FFFEC00250010000A00250011FFEC00250037FFC4002500AB +FFEC002500B1000A002500B2000A00260010FFCE002600AFFFE7002600B1FFCE002600B2 +FFCE0027000FFFCE00270011FFCE00270037FFCE0027003AFFEC0027003BFFF60027003C +FFEC0027003DFFEC002700ABFFCE0029000FFED400290011FED40029001DFFC40029001E +FFC400290022003C00290024FF9C00290037001E00290044FF9C00290048FFCE00290052 +FFCE00290090FF92002900A0FF9C002900A1FFCE002900ABFED4002900B0FFCE002C0010 +FFE2002C00B1FFE2002C00B2FFE2002D000FFFEC002D0011FFEC002D0024FFF6002D0090 +FFF6002D00ABFFEC002E0010FF92002E0032FFEC002E0044FFC4002E0048FFBA002E0052 +FFBA002E0058FFCE002E0059FFB0002E005AFFBA002E005CFFB0002E0091FFEC002E00A0 +FFC4002E00A1FFBA002E00AFFFEC002E00B0FFBA002E00B1FF92002E00B2FF92002F000A +FF88002F0010FF60002F0026FFEC002F002AFFEC002F002D0064002F0032FFEC002F0037 +FF56002F0039FF92002F003AFF9C002F003CFF60002F0059FF92002F005CFF92002F0064 +FFEC002F0091FFEC002F00AFFFEC002F00B1FF60002F00B2FF60002F00B4FF60002F00B6 +FF600032000FFFE200320011FFE200320037FFCE0032003BFFF60032003CFFEC0032003D +FFEC003200ABFFE20033000FFED400330011FED400330024FFCE0033003C001400330044 +FFCE00330048FFCE00330052FFCE00330090FFBA003300A0FFCE003300A1FFCE003300AB +FED4003300B0FFCE0034000FFFE200340011FFE2003400ABFFE200350010FF9C00350037 +FFC40035003CFFEC00350044FFD800350048FFCE00350052FFCE00350058FFEC0035005C +FFC9003500A0FFCE003500A1FFCE003500B0FFC4003500B1FF9C003500B2FF9C003500B4 +FFBA003500B6FFBA0036000FFFEC00360011FFEC00360024FFEC00360036FFEA00360059 +FFE20036005AFFEC0036005CFFE200360090FFEC003600ABFFEC0037000FFEDE00370010 +FF6A00370011FEDE0037001DFF380037001EFF3800370022003C00370024FF8800370026 +FFD80037002AFFD800370032FFCE00370036FFF400370037FFBA00370044FF1000370046 +FF2400370048FF240037004AFF2E00370052FF2400370055FF3800370056FF4C00370058 +FF3800370059FF380037005AFF380037005CFF380037005DFF5600370064FFD800370090 +FF7E00370091FFCE003700A0FF10003700A1FF24003700ABFEDE003700AFFFCE003700B0 +FF24003700B1FF6A003700B2FF6A0038000FFFEC00380011FFEC00380024FFF600380090 +FFEC003800ABFFEC0039000FFEDE00390010FFCE00390011FEDE0039001DFFB00039001E +FFB000390024FFC400390044FF9C00390048FF9C00390052FF9C00390058FFC40039005C +FFBF00390090FFBA003900A0FF9C003900A1FF9C003900ABFEDE003900B0FF9C003900B1 +FFCE003900B2FFCE003A000FFEDE003A0010FFCE003A0011FF24003A001DFFB0003A001E +FFB0003A0024FFCE003A0044FF9C003A0048FF9C003A0052FF9C003A0055FFC4003A0058 +FFC4003A005CFFBF003A0090FFC4003A00A0FF9C003A00A1FF9C003A00ABFF24003A00B0 +FF9C003A00B1FFCE003A00B2FFCE003B0010FFB0003B0026FFF6003B002AFFF6003B0032 +FFF6003B0044FFCE003B0048FFC4003B0052FFC4003B0058FFE2003B005CFFB0003B0064 +FFF6003B0091FFF6003B00A0FFCE003B00A1FFC4003B00AFFFF6003B00B0FFC4003B00B1 +FFB0003B00B2FFB0003C000FFEDE003C0010FF74003C0011FEDE003C001DFF38003C001E +FF38003C0024FFB0003C0032FFEC003C0044FF74003C0047FF88003C0048FF7E003C004A +FF7E003C0050FF9C003C0051FF9C003C0052FF7E003C0053FF9C003C0054FF7E003C0055 +FF9C003C0056FF92003C0058FF92003C0059FF9C003C0090FFB0003C0091FFEC003C00A0 +FF74003C00A1FF7E003C00ABFEDE003C00AFFFEC003C00B0FF7E003C00B1FF74003C00B2 +FF74003D0010FFC4003D0026FFEC003D002AFFEC003D0032FFEC003D003DFFF6003D0044 +FFCE003D0048FFC4003D0052FFC4003D005AFFD8003D005CFFBF003D0064FFEC003D0091 +FFEC003D00A0FFCE003D00A1FFC4003D00AFFFEC003D00B0FFC4003D00B1FFCE003D00B2 +FFCE00440059FFF00044005AFFF60044005CFFF00045000FFFE200450011FFEC0045005C +FFFB004500ABFFEC00460010FFEC00460037FFC4004600B1FFEC004600B2FFEC00480037 +FF7400490005003C0049000A003C0049000C00640049000D00320049000FFF7E00490010 +FFCE00490011FF8800490022006E0049003F00640049004000640049005CFFF600490060 +0064004900ABFF88004900B1FFCE004900B2FFCE004900B40032004900B60032004B0059 +FFEC004B005AFFF6004B005CFFEC004E0010FF9C004E0048FFEC004E0052FFEC004E00A1 +FFEC004E00B0FFEC004E00B1FF9C004E00B2FF9C00500059FFEC0050005AFFF60050005C +FFEC00510059FFEC0051005AFFF60051005CFFEC0052000FFFE200520011FFEC00520059 +FFF10052005BFFEC0052005CFFF1005200ABFFEC0053000FFFE200530011FFEC0053005C +FFFB005300ABFFEC0055000FFEDE00550010FFEC00550011FEDE00550044FFDC005500A0 +FFD8005500ABFEDE005500B1FFEC005500B2FFEC005500B4001E005500B6001E00570010 +FFD80057005CFFF6005700B1FFD8005700B2FFD8005700B40014005700B600140059000F +FF4C00590010FFD800590011FF4C00590044FFD800590048FFEE00590052FFEE005900A0 +FFD8005900A1FFEE005900ABFF4C005900B0FFF1005900B1FFD8005900B2FFD8005A000F +FFBA005A0010FFEC005A0011FFBA005A0044FFEC005A00A0FFEC005A00ABFFBA005A00B1 +FFEC005A00B2FFEC005B0010FFCE005B0046FFEC005B0047FFF6005B0048FFE8005B004A +FFF6005B0052FFE8005B006FFFEC005B00A1FFE8005B00B0FFEC005B00B1FFCE005B00B2 +FFCE005C000FFF42005C0010FFD8005C0011FF42005C0044FFD8005C0046FFEE005C0047 +FFF6005C0048FFEE005C004AFFF6005C0052FFEE005C0054FFF6005C006FFFEE005C00A0 +FFD8005C00A1FFEE005C00ABFF4C005C00B0FFF1005C00B1FFD8005C00B2FFD8005D0010 +FFEC005D0046FFF6005D0047FFF6005D0048FFF4005D004AFFF6005D0052FFF4005D0054 +FFF6005D006FFFF6005D00A1FFF4005D00B1FFEC005D00B2FFEC00640010FFCE006400AF +FFE7006400B1FFCE006400B2FFCE006F0010FFEC006F00B1FFEC006F00B2FFEC0091000F +FFE200910011FFE200910037FFCE0091003BFFF60091003CFFEC0091003DFFEC009100AB +FFE200A1000FFFE200A10011FFEC00A10059FFF100A1005BFFEC00A1005CFFF100A100AB +FFEC00AB00B4FF2E00AB00B6FF2E00B10024FFCE00B1002CFFE200B1002DFF9C00B10036 +FFEC00B10037FF6A00B10039FFCE00B1003AFFCE00B1003BFFB000B1003CFF7400B1003D +FFF600B10044FFEC00B10059FFD800B1005AFFEC00B1005BFFCE00B1005CFFD800B1005D +FFD800B10090FFCE00B100A0FFEC00B20024FFCE00B2002CFFE200B2002DFF9C00B20036 +FFEC00B20037FF6A00B20039FFCE00B2003AFFCE00B2003BFFB000B2003CFF7400B2003D +FFF600B20044FFEC00B20059FFD800B2005AFFEC00B2005BFFCE00B2005CFFD800B2005D +FFD800B20090FFCE00B200A0FFEC00B30024FF9C00B30090FF9C00B4000FFF2E00B40011 +FF2E00B40024FF9C00B40037006E00B40039006400B4003A003C00B4003C006E00B40056 +FFBA00B40057002800B40090FF9C00B400ABFF2E00B50024FF9C00B50090FF9C00B6000F +FF2E00B60011FF2E00B60024FF9C00B60037006E00B60039006400B6003A003C00B6003C +006E00B60056FFBA00B60057002800B60090FF9C00B600ABFF2E00C30037FF2E00C30039 +FF2E00C3003AFF9C00C3003CFF2E00C40037FF2E00C40039FF2E00C4003AFF9C00C4003C +FF2E0000000000010001000100000001000013FF0000001400000000000013F7308213F3 +06092A864886F70D010702A08213E4308213E0020101310E300C06082A864886F70D0205 +05003060060A2B060104018237020104A0523050302C060A2B06010401823702011CA21E +801C003C003C003C004F00620073006F006C006500740065003E003E003E3020300C0608 +2A864886F70D020505000410503EEC935CE1D8D33511E69A791E4594A0820F3F308202C0 +3082022902141389B4D18AE8A7C4BD35C79B8D88CA1FCA535691300D06092A864886F70D +010104050030819E311F301D060355040A1316566572695369676E205472757374204E65 +74776F726B31173015060355040B130E566572695369676E2C20496E632E312C302A0603 +55040B1323566572695369676E2054696D65205374616D70696E67205365727669636520 +526F6F7431343032060355040B132B4E4F204C494142494C495459204143434550544544 +2C20286329393720566572695369676E2C20496E632E301E170D39373035313230373030 +30305A170D3939313233313037303030305A30819E311F301D060355040A131656657269 +5369676E205472757374204E6574776F726B31173015060355040B130E56657269536967 +6E2C20496E632E312C302A060355040B1323566572695369676E2054696D65205374616D +70696E67205365727669636520526F6F7431343032060355040B132B4E4F204C49414249 +4C4954592041434345505445442C20286329393720566572695369676E2C20496E632E30 +819F300D06092A864886F70D010101050003818D0030818902818100D32E20F0687C2C2D +2E811CB106B2A70BB7110D57DA53D875E3C9332AB2D4F6095B34F3E990FE090CD0DB1B5A +B9CDE7F688B19DC08725EB7D5810736A78CB7115FDC658F629AB585E9604FD2D62115881 +1CCA7194D522582FD5CC14058436BA94AAB44D4AE9EE3B22AD56997E219C6C86C04A4797 +6AB4A636D5FC092DD3B4399B0203010001300D06092A864886F70D010104050003818100 +3A119C85053ED2E980FB7BD5A9F4AC79FC05FC953D7123A92B28DF8C136589FE2C87018F +5A9A62CA11A780F4B7BE14B7D156996B086245C6A2A5DA357F0522DE722D048605A77C09 +16931443F0F7164DD6078E9B106C58FE0A3597CA899FDF04709C2A7D618EC1E80B719AA8 +C76662423D959422329822898AFA640824F5D2FA308202CD30820236021500BD119ADA43 +ED21FB46588489CA46889025EE1460300D06092A864886F70D010104050030819E311F30 +1D060355040A1316566572695369676E205472757374204E6574776F726B311730150603 +55040B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369 +676E2054696D65205374616D70696E67205365727669636520526F6F7431343032060355 +040B132B4E4F204C494142494C4954592041434345505445442C20286329393720566572 +695369676E2C20496E632E301E170D3937303531323037303030305A170D393931323331 +3037303030305A3081AC31273025060355040B131E566572695369676E2054696D652053 +74616D70696E672053657276696365311F301D060355040B1316566572695369676E2054 +72757374204E6574776F726B31343032060355040B132B4E4F204C494142494C49545920 +41434345505445442C20286329393720566572695369676E2C20496E632E311730150603 +55040A130E566572695369676E2C20496E632E3111300F06035504071308496E7465726E +657430819D300D06092A864886F70D010101050003818B0030818702818100AB61EDB4AD +8D904790DCB4115E69DC0A7F62900631CDCEFF889146D7493A94E9D4063F9DADA2785AEC +F9FC63454FB80B6E30EFA236AB2D09DFF16F27AB0D516005354F7FCE544FD0B72C42D80B +D08DB85EFFB680D0E396B47F224942106CD398B00156A3C3CF2E9F3AF47FA858A6D72265 +E58CAB789CBCD94742685B2D7DFDB5020103300D06092A864886F70D0101040500038181 +006D60FB995FA469B3D37B702B62231E442051AF2315C77402F949F2271A5CAC86713508 +2BF68FDEE0B596E88BA74BE373C848099DB0DA8BDA1592CA03E509255606E74EA447A5D1 +5746D43856F521CDC3263B2D2532CE9BE2BF4047EAD86D4776E5C030A30F80CE7FD83B7E +A0F9952A312B15FAC814EDDDB0E9554170462D2C7E308209A63082090FA0030201020210 +7966966E83B0D0B601126E9DC0B46571300D06092A864886F70D01010205003061311130 +0F06035504071308496E7465726E657431173015060355040A130E566572695369676E2C +20496E632E31333031060355040B132A566572695369676E20436F6D6D65726369616C20 +536F667477617265205075626C697368657273204341301E170D39383034313630303030 +30305A170D3939303431363233353935395A3082015D3111300F06035504071308496E74 +65726E657431173015060355040A130E566572695369676E2C20496E632E313330310603 +55040B132A566572695369676E20436F6D6D65726369616C20536F667477617265205075 +626C69736865727320434131463044060355040B133D7777772E766572697369676E2E63 +6F6D2F7265706F7369746F72792F43505320496E636F72702E206279205265662E2C4C49 +41422E4C54442863293936313E303C060355040B13354469676974616C20494420436C61 +73732033202D204D6963726F736F667420536F6674776172652056616C69646174696F6E +207632310B3009060355040613025553311330110603550408130A57617368696E67746F +6E3110300E060355040713075265646D6F6E64311E301C060355040314154D6963726F73 +6F667420436F72706F726174696F6E311E301C060355040B14154D6963726F736F667420 +436F72706F726174696F6E30820120300D06092A864886F70D01010105000382010D0030 +8201080282010100B490D226A864E6EB15C3FF6D7B414F0AF96F2A71CE2E1853A63236E0 +D468E135FD4912D896FC65CF531420BE04C97AF5C9706D94ECCCB3AF2A309A32587CB6A9 +6B256799C0E277EA05E5EFE396F7AD0B19A6AE3C8470E2F86F5C4F7D6F0F52458A15D765 +DC3B2005E33DA16C973A0E0B2513ED21CB208E397A628305C9231AFC529DAC9D4C96D73C +4E583D827BEE093556B568C04245A23B31A3FBD895FB55C72CA8A3C3294FCEF493F0031F +7BF1153AA9F8AA5083056D62F08B138838D9E31C0E73C10640BA28C3EBCD9271C7BE66B2 +A15422D60B677CF8877989AC660AAA51FAFD7221FC865DC6F44A0EEC5861234DD0B13A64 +E0139E5EC8856D4C16AF3D07020103A38205DD308205D930090603551D1304023000300B +0603551D0F0404030205A03081880603551D01048180307E80107B96E4D143FD6898F338 +CC6E3BF20B82A16330613111300F06035504071308496E7465726E657431173015060355 +040A130E566572695369676E2C20496E632E31333031060355040B132A56657269536967 +6E20436F6D6D65726369616C20536F667477617265205075626C69736865727320434182 +0502B400000130210603551D040101FF04173014300E300C060A2B060104018237020116 +0302078000300D0603551D0A040630040302064030820436060A2B06010401823702010A +0101FF048204233082041FA029802768747470733A2F2F7777772E766572697369676E2E +636F6D2F7265706F7369746F72792F435053A18203B8818203B454686973206365727469 +66696361746520696E636F72706F7261746573206279207265666572656E63652C20616E +642069747320757365206973207374726963746C790A7375626A65637420746F2C207468 +6520566572695369676E2043657274696669636174696F6E205072616374696365205374 +6174656D656E742028435053290A76657273696F6E20312E302C20617661696C61626C65 +20696E2074686520566572695369676E207265706F7369746F72792061743A0A68747470 +733A2F2F7777772E766572697369676E2E636F6D3B20627920452D6D61696C2061742043 +50532D726571756573747340766572697369676E2E636F6D3B206F720A6279206D61696C +20617420566572695369676E2C20496E632E2C203235393320436F617374204176652E2C +204D6F756E7461696E20566965772C2043412039343034330A55534120436F7079726967 +6874202863293139393620566572695369676E2C20496E632E2020416C6C205269676874 +732052657365727665642E204345525441494E0A57415252414E5449455320444953434C +41494D454420414E44204C494142494C495459204C494D495445442E0A0A5741524E494E +473A2054484520555345204F462054484953204345525449464943415445204953205354 +524943544C59205355424A45435420544F205448450A564552495349474E204345525449 +4649434154494F4E2050524143544943452053544154454D454E542E2020544845204953 +5355494E4720415554484F524954590A444953434C41494D53204345525441494E20494D +504C49454420414E4420455850524553532057415252414E544945532C20494E434C5544 +494E472057415252414E544945530A4F46204D45524348414E544142494C495459204F52 +204649544E45535320464F52204120504152544943554C415220505552504F53452C2041 +4E442057494C4C204E4F540A4245204C4941424C4520464F5220434F4E53455155454E54 +49414C2C2050554E49544956452C20414E44204345525441494E204F544845522044414D +414745532E205345450A5448452043505320464F522044455441494C532E0A0A436F6E74 +656E7473206F662074686520566572695369676E2072656769737465726564206E6F6E76 +657269666965645375626A656374417474726962757465730A657874656E73696F6E2076 +616C7565207368616C6C206E6F7420626520636F6E736964657265642061732061636375 +7261746520696E666F726D6174696F6E0A76616C69646174656420627920746865204941 +2E0AA336803468747470733A2F2F7777772E766572697369676E2E636F6D2F7265706F73 +69746F72792F766572697369676E6C6F676F2E6769663081AF0603551D200481A7308030 +80060B6086480186F845010701013080302806082B06010505070201161C68747470733A +2F2F7777772E766572697369676E2E636F6D2F435053306206082B060105050702023056 +3015160E566572695369676E2C20496E632E30030201011A3D566572695369676E277320 +43505320696E636F72702E206279207265666572656E6365206C6961622E206C74642E20 +286329393720566572695369676E0000000000003016060A2B06010401823702011B0408 +30060101FF0101FF300D06092A864886F70D010102050003818100954CA27955DA745C8B +25C2A620F06CB8B37B467B9E9F7ABA710648151265CC5D29F8513B8971B1F4143878DA8F +AE0B8036905D4897C500380A53BF4037FF8A13276D004734F7484C2E72F2C6D37EFD446F +228FD1929FE394EDE7FF00C9C2EE721CD99C036EB6C1637B3278443B9E858AFB84863728 +2EE7A638373EBAFCF382233182042430820420020101307530613111300F060355040713 +08496E7465726E657431173015060355040A130E566572695369676E2C20496E632E3133 +3031060355040B132A566572695369676E20436F6D6D65726369616C20536F6674776172 +65205075626C69736865727320434102107966966E83B0D0B601126E9DC0B46571300C06 +082A864886F70D02050500A081AE301906092A864886F70D010903310C060A2B06010401 +8237020104301C060A2B06010401823702010B310E300C060A2B06010401823702011630 +1F06092A864886F70D010904311204105BA6237427F8290EF09CCF5B63F749F83052060A +2B06010401823702010C31443042A01A801800560065007200640061006E006100200046 +006F006E0074A1248022687474703A2F2F7777772E6D6963726F736F66742E636F6D2F74 +727565747970652F300D06092A864886F70D0101010500048201003EFBA519B6A00C823F +B823EA3A1E5E6EBDBBF2C647D1F1093C66910B72FEA26B78E409E7750E62A559DAAC12F7 +CCA36B0725F8BB2E0409AEE1156BE3736F46D1B116DF2B18ABCF394DCF0EF8EE01A758E5 +E4872882FFDD5F04C39F3258358C3DE27BE8FC410AC11736DD19609E3BACBB2257C5E4A4 +836F811D07EC80DAB42FE9AC33537823FA2AC0D406166130C356085818B3CEC8A53763BF +88191B4E52ED790B57C924CEA670505AA2621C1121663215F15D1A9E89A6BC2AA35F5B1F +86E4FDEC2280203A57D736DD2C29A4D2D29F00BAF260927AB3B36EF1C4CC5100CAC54BAA +0AFB74D0101FBEC53815E46B3814DF7E5DFC4A121257608F59AA76D5F333A3A18201D030 +8201CC06092A864886F70D010906318201BD308201B90201013081B830819E311F301D06 +0355040A1316566572695369676E205472757374204E6574776F726B3117301506035504 +0B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369676E +2054696D65205374616D70696E67205365727669636520526F6F7431343032060355040B +132B4E4F204C494142494C4954592041434345505445442C202863293937205665726953 +69676E2C20496E632E021500BD119ADA43ED21FB46588489CA46889025EE1460300C0608 +2A864886F70D02050500A059301806092A864886F70D010903310B06092A864886F70D01 +0701301C06092A864886F70D010905310F170D3938313131323135313835305A301F0609 +2A864886F70D01090431120410641EED59DAFC3103655C9A2A4309D288300D06092A8648 +86F70D01010105000481809092A6C858A52E216E3E56A1C40477C3C63030D247298EF8EA +BFA1C4D5DDE8C375555276DDBB2761ADFC914D772AD331C04DDD675B9736F7D136CAA72D +41CF9F8377C51611E0D1B6EDD8C5AB73694109FD5312908B17319E96C22CCEDD65C9D342 +DC0E3B159C36E0FDA54B21C8DD968B90621C263E94F737AC1997B9D84E517C0000> +] def +/CharStrings 893 dict dup begin +/.notdef 0 def /.null 1 def /nonmarkingreturn 2 def /space 3 def /exclam 4 def +/quotedbl 5 def /numbersign 6 def /dollar 7 def /percent 8 def +/ampersand 9 def /quotesingle 10 def /parenleft 11 def /parenright 12 def +/asterisk 13 def /plus 14 def /comma 15 def /hyphen 16 def +/period 17 def /slash 18 def /zero 19 def /one 20 def +/two 21 def /three 22 def /four 23 def /five 24 def +/six 25 def /seven 26 def /eight 27 def /nine 28 def +/colon 29 def /semicolon 30 def /less 31 def /equal 32 def +/greater 33 def /question 34 def /at 35 def /A 36 def +/B 37 def /C 38 def /D 39 def /E 40 def +/F 41 def /G 42 def /H 43 def /I 44 def +/J 45 def /K 46 def /L 47 def /M 48 def +/N 49 def /O 50 def /P 51 def /Q 52 def +/R 53 def /S 54 def /T 55 def /U 56 def +/V 57 def /W 58 def /X 59 def /Y 60 def +/Z 61 def /bracketleft 62 def /backslash 63 def /bracketright 64 def +/asciicircum 65 def /underscore 66 def /grave 67 def /a 68 def +/b 69 def /c 70 def /d 71 def /e 72 def +/f 73 def /g 74 def /h 75 def /i 76 def +/j 77 def /k 78 def /l 79 def /m 80 def +/n 81 def /o 82 def /p 83 def /q 84 def +/r 85 def /s 86 def /t 87 def /u 88 def +/v 89 def /w 90 def /x 91 def /y 92 def +/z 93 def /braceleft 94 def /bar 95 def /braceright 96 def +/asciitilde 97 def /Adieresis 98 def /Aring 99 def /Ccedilla 100 def +/Eacute 101 def /Ntilde 102 def /Odieresis 103 def /Udieresis 104 def +/aacute 105 def /agrave 106 def /acircumflex 107 def /adieresis 108 def +/atilde 109 def /aring 110 def /ccedilla 111 def /eacute 112 def +/egrave 113 def /ecircumflex 114 def /edieresis 115 def /iacute 116 def +/igrave 117 def /icircumflex 118 def /idieresis 119 def /ntilde 120 def +/oacute 121 def /ograve 122 def /ocircumflex 123 def /odieresis 124 def +/otilde 125 def /uacute 126 def /ugrave 127 def /ucircumflex 128 def +/udieresis 129 def /dagger 130 def /degree 131 def /cent 132 def +/sterling 133 def /section 134 def /bullet 135 def /paragraph 136 def +/germandbls 137 def /registered 138 def /copyright 139 def /trademark 140 def +/acute 141 def /dieresis 142 def /notequal 143 def /AE 144 def +/Oslash 145 def /infinity 146 def /plusminus 147 def /lessequal 148 def +/greaterequal 149 def /yen 150 def /mu1 151 def /partialdiff 152 def +/summation 153 def /product 154 def /pi1 155 def /integral 156 def +/ordfeminine 157 def /ordmasculine 158 def /Ohm 159 def /ae 160 def +/oslash 161 def /questiondown 162 def /exclamdown 163 def /logicalnot 164 def +/radical 165 def /florin 166 def /approxequal 167 def /increment 168 def +/guillemotleft 169 def /guillemotright 170 def /ellipsis 171 def /Agrave 172 def +/Atilde 173 def /Otilde 174 def /OE 175 def /oe 176 def +/endash 177 def /emdash 178 def /quotedblleft 179 def /quotedblright 180 def +/quoteleft 181 def /quoteright 182 def /divide 183 def /lozenge 184 def +/ydieresis 185 def /Ydieresis 186 def /fraction 187 def /Euro 188 def +/guilsinglleft 189 def /guilsinglright 190 def /fi 191 def /fl 192 def +/daggerdbl 193 def /periodcentered 194 def /quotesinglbase 195 def /quotedblbase 196 def +/perthousand 197 def /Acircumflex 198 def /Ecircumflex 199 def /Aacute 200 def +/Edieresis 201 def /Egrave 202 def /Iacute 203 def /Icircumflex 204 def +/Idieresis 205 def /Igrave 206 def /Oacute 207 def /Ocircumflex 208 def +/Ograve 209 def /Uacute 210 def /Ucircumflex 211 def /Ugrave 212 def +/dotlessi 213 def /circumflex 214 def /tilde 215 def /macron 216 def +/breve 217 def /dotaccent 218 def /ring 219 def /cedilla 220 def +/hungarumlaut 221 def /ogonek 222 def /caron 223 def /Lslash 224 def +/lslash 225 def /Scaron 226 def /scaron 227 def /Zcaron 228 def +/zcaron 229 def /brokenbar 230 def /Eth 231 def /eth 232 def +/Yacute 233 def /yacute 234 def /Thorn 235 def /thorn 236 def +/minus 237 def /multiply 238 def /onesuperior 239 def /twosuperior 240 def +/threesuperior 241 def /onehalf 242 def /onequarter 243 def /threequarters 244 def +/franc 245 def /Gbreve 246 def /gbreve 247 def /Idot 248 def +/Scedilla 249 def /scedilla 250 def /Cacute 251 def /cacute 252 def +/Ccaron 253 def /ccaron 254 def /dmacron 255 def /overscore 256 def +/middot 257 def /Abreve 258 def /abreve 259 def /Aogonek 260 def +/aogonek 261 def /Dcaron 262 def /dcaron 263 def /Dslash 264 def +/Eogonek 265 def /eogonek 266 def /Ecaron 267 def /ecaron 268 def +/Lacute 269 def /lacute 270 def /Lcaron 271 def /lcaron 272 def +/Ldot 273 def /ldot 274 def /Nacute 275 def /nacute 276 def +/Ncaron 277 def /ncaron 278 def /Odblacute 279 def /odblacute 280 def +/Racute 281 def /racute 282 def /Rcaron 283 def /rcaron 284 def +/Sacute 285 def /sacute 286 def /Tcedilla 287 def /tcedilla 288 def +/Tcaron 289 def /tcaron 290 def /Uring 291 def /uring 292 def +/Udblacute 293 def /udblacute 294 def /Zacute 295 def /zacute 296 def +/Zdot 297 def /zdot 298 def /Gamma 299 def /Theta 300 def +/Phi 301 def /alpha 302 def /delta 303 def /epsilon 304 def +/sigma 305 def /tau 306 def /phi 307 def /underscoredbl 308 def +/exclamdbl 309 def /nsuperior 310 def /peseta 311 def /IJ 312 def +/ij 313 def /napostrophe 314 def /minute 315 def /second 316 def +/afii61248 317 def /afii61289 318 def /H22073 319 def /H18543 320 def +/H18551 321 def /H18533 322 def /openbullet 323 def /Amacron 324 def +/amacron 325 def /Ccircumflex 326 def /ccircumflex 327 def /Cdot 328 def +/cdot 329 def /Emacron 330 def /emacron 331 def /Ebreve 332 def +/ebreve 333 def /Edot 334 def /edot 335 def /Gcircumflex 336 def +/gcircumflex 337 def /Gdot 338 def /gdot 339 def /Gcedilla 340 def +/gcedilla 341 def /Hcircumflex 342 def /hcircumflex 343 def /Hbar 344 def +/hbar 345 def /Itilde 346 def /itilde 347 def /Imacron 348 def +/imacron 349 def /Ibreve 350 def /ibreve 351 def /Iogonek 352 def +/iogonek 353 def /Jcircumflex 354 def /jcircumflex 355 def /Kcedilla 356 def +/kcedilla 357 def /kgreenlandic 358 def /Lcedilla 359 def /lcedilla 360 def +/Ncedilla 361 def /ncedilla 362 def /Eng 363 def /eng 364 def +/Omacron 365 def /omacron 366 def /Obreve 367 def /obreve 368 def +/Rcedilla 369 def /rcedilla 370 def /Scircumflex 371 def /scircumflex 372 def +/Tbar 373 def /tbar 374 def /Utilde 375 def /utilde 376 def +/Umacron 377 def /umacron 378 def /Ubreve 379 def /ubreve 380 def +/Uogonek 381 def /uogonek 382 def /Wcircumflex 383 def /wcircumflex 384 def +/Ycircumflex 385 def /ycircumflex 386 def /longs 387 def /Aringacute 388 def +/aringacute 389 def /AEacute 390 def /aeacute 391 def /Oslashacute 392 def +/oslashacute 393 def /anoteleia 394 def /Wgrave 395 def /wgrave 396 def +/Wacute 397 def /wacute 398 def /Wdieresis 399 def /wdieresis 400 def +/Ygrave 401 def /ygrave 402 def /quotereversed 403 def /radicalex 404 def +/afii08941 405 def /estimated 406 def /oneeighth 407 def /threeeighths 408 def +/fiveeighths 409 def /seveneighths 410 def /commaaccent 411 def /undercommaaccent 412 def +/tonos 413 def /dieresistonos 414 def /Alphatonos 415 def /Epsilontonos 416 def +/Etatonos 417 def /Iotatonos 418 def /Omicrontonos 419 def /Upsilontonos 420 def +/Omegatonos 421 def /iotadieresistonos 422 def /Alpha 423 def /Beta 424 def +/Delta 425 def /Epsilon 426 def /Zeta 427 def /Eta 428 def +/Iota 429 def /Kappa 430 def /Lambda 431 def /Mu 432 def +/Nu 433 def /Xi 434 def /Omicron 435 def /Pi 436 def +/Rho 437 def /Sigma 438 def /Tau 439 def /Upsilon 440 def +/Chi 441 def /Psi 442 def /Omega 443 def /Iotadieresis 444 def +/Upsilondieresis 445 def /alphatonos 446 def /epsilontonos 447 def /etatonos 448 def +/iotatonos 449 def /upsilondieresistonos 450 def /beta 451 def /gamma 452 def +/zeta 453 def /eta 454 def /theta 455 def /iota 456 def +/kappa 457 def /lambda 458 def /mu 459 def /nu 460 def +/xi 461 def /omicron 462 def /rho 463 def /sigma1 464 def +/upsilon 465 def /chi 466 def /psi 467 def /omega 468 def +/iotadieresis 469 def /upsilondieresis 470 def /omicrontonos 471 def /upsilontonos 472 def +/omegatonos 473 def /afii10023 474 def /afii10051 475 def /afii10052 476 def +/afii10053 477 def /afii10054 478 def /afii10055 479 def /afii10056 480 def +/afii10057 481 def /afii10058 482 def /afii10059 483 def /afii10060 484 def +/afii10061 485 def /afii10062 486 def /afii10145 487 def /afii10017 488 def +/afii10018 489 def /afii10019 490 def /afii10020 491 def /afii10021 492 def +/afii10022 493 def /afii10024 494 def /afii10025 495 def /afii10026 496 def +/afii10027 497 def /afii10028 498 def /afii10029 499 def /afii10030 500 def +/afii10031 501 def /afii10032 502 def /afii10033 503 def /afii10034 504 def +/afii10035 505 def /afii10036 506 def /afii10037 507 def /afii10038 508 def +/afii10039 509 def /afii10040 510 def /afii10041 511 def /afii10042 512 def +/afii10043 513 def /afii10044 514 def /afii10045 515 def /afii10046 516 def +/afii10047 517 def /afii10048 518 def /afii10049 519 def /afii10065 520 def +/afii10066 521 def /afii10067 522 def /afii10068 523 def /afii10069 524 def +/afii10070 525 def /afii10072 526 def /afii10073 527 def /afii10074 528 def +/afii10075 529 def /afii10076 530 def /afii10077 531 def /afii10078 532 def +/afii10079 533 def /afii10080 534 def /afii10081 535 def /afii10082 536 def +/afii10083 537 def /afii10084 538 def /afii10085 539 def /afii10086 540 def +/afii10087 541 def /afii10088 542 def /afii10089 543 def /afii10090 544 def +/afii10091 545 def /afii10092 546 def /afii10093 547 def /afii10094 548 def +/afii10095 549 def /afii10096 550 def /afii10097 551 def /afii10071 552 def +/afii10099 553 def /afii10100 554 def /afii10101 555 def /afii10102 556 def +/afii10103 557 def /afii10104 558 def /afii10105 559 def /afii10106 560 def +/afii10107 561 def /afii10108 562 def /afii10109 563 def /afii10110 564 def +/afii10193 565 def /afii10050 566 def /afii10098 567 def /afii00208 568 def +/afii61352 569 def /pi 570 def /onenumerator 571 def /twonumerator 572 def +/threenumerator 573 def /fournumerator 574 def /fivenumerator 575 def /sevennumerator 576 def +/eightnumerator 577 def /DontCompressHTMX 578 def /glyph579 579 def /glyph580 580 def +/glyph581 581 def /Ohorn 582 def /ohorn 583 def /Uhorn 584 def +/uhorn 585 def /hookabovecomb 586 def /dotbelowcomb 587 def /gravecomb 588 def +/acutecomb 589 def /glyph590 590 def /glyph591 591 def /glyph592 592 def +/glyph593 593 def /glyph594 594 def /glyph595 595 def /glyph596 596 def +/glyph597 597 def /glyph598 598 def /glyph599 599 def /glyph600 600 def +/glyph601 601 def /glyph602 602 def /glyph603 603 def /glyph604 604 def +/Adotbelow 605 def /adotbelow 606 def /Ahookabove 607 def /ahookabove 608 def +/Acircumflexacute 609 def /acircumflexacute 610 def /Acircumflexgrave 611 def /acircumflexgrave 612 def +/Acircumflexhookabove 613 def /acircumflexhookabove 614 def /Acircumflextilde 615 def /acircumflextilde 616 def +/Acircumflexdotbelow 617 def /acircumflexdotbelow 618 def /Abreveacute 619 def /abreveacute 620 def +/Abrevegrave 621 def /abrevegrave 622 def /Abrevehookabove 623 def /abrevehookabove 624 def +/Abrevetilde 625 def /abrevetilde 626 def /Abrevedotbelow 627 def /abrevedotbelow 628 def +/Edotbelow 629 def /edotbelow 630 def /Ehookabove 631 def /ehookabove 632 def +/Etilde 633 def /etilde 634 def /Ecircumflexacute 635 def /ecircumflexacute 636 def +/Ecircumflexgrave 637 def /ecircumflexgrave 638 def /Ecircumflexhookabove 639 def /ecircumflexhookabove 640 def +/Ecircumflextilde 641 def /ecircumflextilde 642 def /Ecircumflexdotbelow 643 def /ecircumflexdotbelow 644 def +/Ihookabove 645 def /ihookabove 646 def /Idotbelow 647 def /idotbelow 648 def +/glyph649 649 def /glyph650 650 def /glyph651 651 def /glyph652 652 def +/sheva 653 def /hatafsegol 654 def /hatafpatah 655 def /hatafqamats 656 def +/hiriq 657 def /tsere 658 def /segol 659 def /patah 660 def +/qamats 661 def /holam 662 def /qubuts 663 def /dagesh 664 def +/meteg 665 def /maqaf 666 def /rafe 667 def /paseq 668 def +/shindot 669 def /sindot 670 def /sofpasuq 671 def /alef 672 def +/bet 673 def /gimel 674 def /dalet 675 def /he 676 def +/vav 677 def /zayin 678 def /het 679 def /tet 680 def +/yod 681 def /finalkaf 682 def /kaf 683 def /lamed 684 def +/finalmem 685 def /mem 686 def /finalnun 687 def /nun 688 def +/samekh 689 def /ayin 690 def /finalpe 691 def /pe 692 def +/finaltsadi 693 def /tsadi 694 def /qof 695 def /resh 696 def +/shin 697 def /tav 698 def /doublevav 699 def /vavyod 700 def +/doubleyod 701 def /geresh 702 def /gershayim 703 def /newsheqelsign 704 def +/vavshindot 705 def /finalkafsheva 706 def /finalkafqamats 707 def /lamedholam 708 def +/lamedholamdagesh 709 def /altayin 710 def /shinshindot 711 def /shinsindot 712 def +/shindageshshindot 713 def /shindageshsindot 714 def /alefpatah 715 def /alefqamats 716 def +/alefmapiq 717 def /betdagesh 718 def /gimeldagesh 719 def /daletdagesh 720 def +/hedagesh 721 def /vavdagesh 722 def /zayindagesh 723 def /tetdagesh 724 def +/yoddagesh 725 def /finalkafdagesh 726 def /kafdagesh 727 def /lameddagesh 728 def +/memdagesh 729 def /nundagesh 730 def /samekhdagesh 731 def /finalpedagesh 732 def +/pedagesh 733 def /tsadidagesh 734 def /qofdagesh 735 def /reshdagesh 736 def +/shindagesh 737 def /tavdages 738 def /vavholam 739 def /betrafe 740 def +/kafrafe 741 def /perafe 742 def /aleflamed 743 def /zerowidthnonjoiner 744 def +/zerowidthjoiner 745 def /lefttorightmark 746 def /righttoleftmark 747 def /afii57388 748 def +/afii57403 749 def /afii57407 750 def /afii57409 751 def /afii57440 752 def +/afii57451 753 def /afii57452 754 def /afii57453 755 def /afii57454 756 def +/afii57455 757 def /afii57456 758 def /afii57457 759 def /afii57458 760 def +/afii57392 761 def /afii57393 762 def /afii57394 763 def /afii57395 764 def +/afii57396 765 def /afii57397 766 def /afii57398 767 def /afii57399 768 def +/afii57400 769 def /afii57401 770 def /afii57381 771 def /afii57461 772 def +/afii63167 773 def /afii57459 774 def /afii57543 775 def /afii57534 776 def +/afii57494 777 def /afii62843 778 def /afii62844 779 def /afii62845 780 def +/afii64240 781 def /afii64241 782 def /afii63954 783 def /afii57382 784 def +/afii64242 785 def /afii62881 786 def /afii57504 787 def /afii57369 788 def +/afii57370 789 def /afii57371 790 def /afii57372 791 def /afii57373 792 def +/afii57374 793 def /afii57375 794 def /afii57391 795 def /afii57471 796 def +/afii57460 797 def /afii52258 798 def /afii57506 799 def /afii62958 800 def +/afii62956 801 def /afii52957 802 def /afii57505 803 def /afii62889 804 def +/afii62887 805 def /afii62888 806 def /afii57507 807 def /afii62961 808 def +/afii62959 809 def /afii62960 810 def /afii57508 811 def /afii62962 812 def +/afii57567 813 def /afii62964 814 def /afii52305 815 def /afii52306 816 def +/afii57509 817 def /afii62967 818 def /afii62965 819 def /afii62966 820 def +/afii57555 821 def /afii52364 822 def /afii63753 823 def /afii63754 824 def +/afii63759 825 def /afii63763 826 def /afii63795 827 def /afii62891 828 def +/afii63808 829 def /afii62938 830 def /afii63810 831 def /afii62942 832 def +/afii62947 833 def /afii63813 834 def /afii63823 835 def /afii63824 836 def +/afii63833 837 def /afii63844 838 def /afii62882 839 def /afii62883 840 def +/afii62884 841 def /afii62885 842 def /afii62886 843 def /Odotbelow 844 def +/odotbelow 845 def /Ohookabove 846 def /ohookabove 847 def /Ocircumflexacute 848 def +/ocircumflexacute 849 def /Ocircumflexgrave 850 def /ocircumflexgrave 851 def /Ocircumflexhookabove 852 def +/ocircumflexhookabove 853 def /Ocircumflextilde 854 def /ocircumflextilde 855 def /Ocircumflexdotbelow 856 def +/ocircumflexdotbelow 857 def /Ohornacute 858 def /ohornacute 859 def /Ohorngrave 860 def +/ohorngrave 861 def /Ohornhookabove 862 def /ohornhookabove 863 def /Ohorntilde 864 def +/ohorntilde 865 def /Ohorndotbelow 866 def /ohorndotbelow 867 def /Udotbelow 868 def +/udotbelow 869 def /Uhookabove 870 def /uhookabove 871 def /Uhornacute 872 def +/uhornacute 873 def /Uhorngrave 874 def /uhorngrave 875 def /Uhornhookabove 876 def +/uhornhookabove 877 def /Uhorntilde 878 def /uhorntilde 879 def /Uhorndotbelow 880 def +/uhorndotbelow 881 def /glyph882 882 def /glyph883 883 def /Ydotbelow 884 def +/ydotbelow 885 def /Yhookabove 886 def /yhookabove 887 def /Ytilde 888 def +/ytilde 889 def /dong 890 def /tildecomb 891 def /currency 892 def + +end readonly def +FontName currentdict end definefont pop +%%EndFont +%%EndProlog +mpldict begin +13.5 175.5 translate +585 441 0 0 clipbox +% polygon +1.000 setgray +1.000 setlinewidth +0 setlinejoin +2 setlinecap +[] 0 setdash +0 0 m +0 441 l +585 441 l +585 0 l +closepath +gsave +fill +grestore +stroke +% polygon +0.000 setgray +73.125 44.1 m +73.125 396.9 l +526.5 396.9 l +526.5 44.1 l +closepath +gsave +1.000 setgray +fill +grestore +stroke +% draw_lines +gsave +453.375 352.800 73.125 44.100 clipbox +73.125 44.100 m +82.192 44.625 l +91.260 46.237 l +100.328 49.043 l +109.395 53.206 l +118.463 58.937 l +127.530 66.464 l +136.597 76.012 l +145.665 87.777 l +154.733 101.897 l +163.800 118.431 l +172.868 137.336 l +181.935 158.456 l +191.002 181.511 l +200.070 206.100 l +209.138 231.707 l +218.205 257.720 l +227.273 283.450 l +236.340 308.160 l +245.408 331.100 l +254.475 351.539 l +263.543 368.804 l +272.610 382.309 l +281.678 391.584 l +290.745 396.306 l +299.812 396.306 l +308.880 391.584 l +317.948 382.309 l +327.015 368.804 l +336.083 351.539 l +345.150 331.100 l +354.218 308.160 l +363.285 283.450 l +372.353 257.720 l +381.420 231.707 l +390.488 206.100 l +399.555 181.511 l +408.623 158.456 l +417.690 137.336 l +426.758 118.431 l +435.825 101.897 l +444.893 87.777 l +453.960 76.012 l +463.028 66.464 l +472.095 58.937 l +481.163 53.206 l +490.230 49.043 l +499.298 46.237 l +508.365 44.625 l +517.433 44.100 l +stroke +grestore +% draw_lines +0 setlinecap +[6 6] 0 setdash +gsave +453.375 352.800 73.125 44.100 clipbox +73.125 44.100 m +82.192 58.500 l +91.260 72.900 l +100.328 87.300 l +109.395 101.700 l +118.463 116.100 l +127.530 130.500 l +136.597 144.900 l +145.665 159.300 l +154.733 173.700 l +163.800 188.100 l +172.868 202.500 l +181.935 216.900 l +191.002 231.300 l +200.070 245.700 l +209.138 260.100 l +218.205 274.500 l +227.273 288.900 l +236.340 303.300 l +245.408 317.700 l +254.475 332.100 l +263.543 346.500 l +272.610 360.900 l +281.678 375.300 l +290.745 389.700 l +299.812 389.700 l +308.880 375.300 l +317.948 360.900 l +327.015 346.500 l +336.083 332.100 l +345.150 317.700 l +354.218 303.300 l +363.285 288.900 l +372.353 274.500 l +381.420 260.100 l +390.488 245.700 l +399.555 231.300 l +408.623 216.900 l +417.690 202.500 l +426.758 188.100 l +435.825 173.700 l +444.893 159.300 l +453.960 144.900 l +463.028 130.500 l +472.095 116.100 l +481.163 101.700 l +490.230 87.300 l +499.298 72.900 l +508.365 58.500 l +517.433 44.100 l +stroke +grestore +% draw_lines +[3 5 1 5] 0 setdash +gsave +453.375 352.800 73.125 44.100 clipbox +73.125 44.100 m +82.192 45.548 l +91.260 49.869 l +100.328 56.992 l +109.395 66.799 l +118.463 79.131 l +127.530 93.783 l +136.597 110.516 l +145.665 129.056 l +154.733 149.096 l +163.800 170.309 l +172.868 192.347 l +181.935 214.846 l +191.002 237.438 l +200.070 259.753 l +209.138 281.422 l +218.205 302.092 l +227.273 321.421 l +236.340 339.094 l +245.408 354.819 l +254.475 368.339 l +263.543 379.431 l +272.610 387.913 l +281.678 393.647 l +290.745 396.538 l +299.812 396.538 l +308.880 393.647 l +317.948 387.913 l +327.015 379.431 l +336.083 368.339 l +345.150 354.819 l +354.218 339.094 l +363.285 321.421 l +372.353 302.092 l +381.420 281.422 l +390.488 259.753 l +399.555 237.438 l +408.623 214.846 l +417.690 192.347 l +426.758 170.309 l +435.825 149.096 l +444.893 129.056 l +453.960 110.516 l +463.028 93.783 l +472.095 79.131 l +481.163 66.799 l +490.230 56.992 l +499.298 49.869 l +508.365 45.548 l +517.433 44.100 l +stroke +grestore +% draw_lines +[1 3] 0 setdash +gsave +453.375 352.800 73.125 44.100 clipbox +73.125 72.324 m +82.192 73.656 l +91.260 77.632 l +100.328 84.185 l +109.395 93.207 l +118.463 104.552 l +127.530 118.033 l +136.597 133.427 l +145.665 150.483 l +154.733 168.921 l +163.800 188.437 l +172.868 208.711 l +181.935 229.410 l +191.002 250.195 l +200.070 270.724 l +209.138 290.661 l +218.205 309.676 l +227.273 327.460 l +236.340 343.718 l +245.408 358.186 l +254.475 370.624 l +263.543 380.828 l +272.610 388.632 l +281.678 393.907 l +290.745 396.567 l +299.812 396.567 l +308.880 393.907 l +317.948 388.632 l +327.015 380.828 l +336.083 370.624 l +345.150 358.186 l +354.218 343.718 l +363.285 327.460 l +372.353 309.676 l +381.420 290.661 l +390.488 270.724 l +399.555 250.195 l +408.623 229.410 l +417.690 208.711 l +426.758 188.437 l +435.825 168.921 l +444.893 150.483 l +453.960 133.427 l +463.028 118.033 l +472.095 104.552 l +481.163 93.207 l +490.230 84.185 l +499.298 77.632 l +508.365 73.656 l +517.433 72.324 l +stroke +grestore +% text +/Verdana findfont +18.000 scalefont +setfont +144.812 403.956 m +0 4 rmoveto +(Smoothing window in time-domain) show +% text +/Verdana findfont +14.000 scalefont +setfont +69.469 30.1 m +(0) show +% line +0.500 setlinewidth +[] 0 setdash +163.800 44.100 m 163.800 48.100 l +stroke +% line +163.800 392.900 m 163.800 396.900 l +stroke +% text +155.769 30.1 m +(10) show +% line +254.475 44.100 m 254.475 48.100 l +stroke +% line +254.475 392.900 m 254.475 396.900 l +stroke +% text +246.444 30.1 m +(20) show +% line +345.150 44.100 m 345.150 48.100 l +stroke +% line +345.150 392.900 m 345.150 396.900 l +stroke +% text +337.619 30.1 m +(30) show +% line +435.825 44.100 m 435.825 48.100 l +stroke +% line +435.825 392.900 m 435.825 396.900 l +stroke +% text +427.731 30.1 m +(40) show +% text +518.844 30.1 m +(50) show +% text +296.656 17.1 m +(n) show +% text +47.812 39.1 m +(0.0) show +% line +73.125 114.660 m 77.125 114.660 l +stroke +% line +522.500 114.660 m 526.500 114.660 l +stroke +% text +47.875 109.66 m +(0.2) show +% line +73.125 185.220 m 77.125 185.220 l +stroke +% line +522.500 185.220 m 526.500 185.220 l +stroke +% text +47.125 180.22 m +(0.4) show +% line +73.125 255.780 m 77.125 255.780 l +stroke +% line +522.500 255.780 m 526.500 255.780 l +stroke +% text +47.812 250.78 m +(0.6) show +% line +73.125 326.340 m 77.125 326.340 l +stroke +% line +522.500 326.340 m 526.500 326.340 l +stroke +% text +47.797 321.34 m +(0.8) show +% text +48.062 391.9 m +(1.0) show +% polygon +1.000 setlinewidth +2 setlinecap +214.291 51.156 m +214.291 161.736 l +385.334 161.736 l +385.334 51.156 l +closepath +gsave +1.000 setgray +fill +grestore +stroke +% draw_lines +230.344 143.521 m +237.901 143.521 l +245.457 143.521 l +253.013 143.521 l +stroke +% draw_lines +0 setlinecap +[6 6] 0 setdash +230.344 121.605 m +237.901 121.605 l +245.457 121.605 l +253.013 121.605 l +stroke +% draw_lines +[3 5 1 5] 0 setdash +230.344 97.688 m +237.901 97.688 l +245.457 97.688 l +253.013 97.688 l +stroke +% draw_lines +[1 3] 0 setdash +230.344 71.371 m +237.901 71.371 l +245.457 71.371 l +253.013 71.371 l +stroke +% text +/Verdana findfont +24.000 scalefont +setfont +262.081 134.521 m +(Blackman) show +% text +262.081 112.605 m +(Bartlett) show +% text +262.081 86.688 m +0 5 rmoveto +(Hanning) show +% text +262.081 60.371 m +0 5 rmoveto +(Hamming) show + +end +showpage diff --git a/numpy/doc/numpybook/Figures/fig2.eps b/numpy/doc/numpybook/Figures/fig2.eps new file mode 100644 index 000000000..20797dc71 --- /dev/null +++ b/numpy/doc/numpybook/Figures/fig2.eps @@ -0,0 +1,4921 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: fig2.eps +%%Creator: matplotlib version 0.85.1.cvs, http://matplotlib.sourceforge.net/ +%%CreationDate: Fri Jan 6 00:11:32 2006 +%%BoundingBox: 13 175 598 616 +%%EndComments +%%BeginProlog +/mpldict 7 dict def +mpldict begin +/m { moveto } bind def +/l { lineto } bind def +/r { rlineto } bind def +/box { +m +1 index 0 r +0 exch r +neg 0 r +closepath +} bind def +/clipbox { +box +clip +newpath +} bind def +/ellipse { +newpath +matrix currentmatrix 7 1 roll +translate +scale +0 0 1 5 3 roll arc +setmatrix +closepath +} bind def +%%BeginFont: Verdana +%!PS-TrueType-1.0-1.0 +8 dict begin +/FontName /Verdana def +/FontMatrix [1 0 0 1 0 0] def +/FontType 42 def +/Encoding StandardEncoding def +/FontBBox [-102 -423 2963 2049] def +/PaintType 0 def +/FontInfo 7 dict dup begin +/Notice (Typeface and data © 1996 Microsoft Corporation. All Rights Reserved) def +/FamilyName (Verdana) def +/FullName (Verdana) def +/version (Version 2.35) def +/isFixedPitch false def +/UnderlinePosition -180 def +/UnderlineThickness 120 def +end readonly def +/sfnts [ +<00010000001301000004003044534947CD5006A400020D64000014144C5453485694D82F +00001530000003814F532F32477590C3000001B80000005656444D5874F17C6D000018B4 +000005E0636D6170E84D8B8B000007A80000068C637674204CA740E3000022AC00000198 +6670676DEE371553000021740000013867617370001700090000021000000010676C7966 +01F195F700009EC000013BB668646D7809490ECD0000323800006C8868656164C748722C +0000013C0000003668686561133B09D00000017400000024686D7478C905723E00002444 +00000DF46B65726E75BF7E53000200CC00000C966C6F63616784B57700000E34000006FC +6D617870086A023E00000198000000206E616D65A93B95720000022000000587706F7374 +C58F55450001DA7800002651707265701240C02F00001E94000002E00001000000010000 +16FBFC3A5F0F3CF5001B080000000000AA7E442900000000B26DE2ABFF9AFE590B930801 +00000009000200000000000000010000080BFE5200000C2CFF9AFBD40B93000100000000 +00000000000000000000037D00010000037D00620007006B000500020010002F00380000 +0495013F0003000100010411019000050000059A053300000125059A0533000003A00078 +02A70800020B0604030504040204000002870000000000000000000000004D5320200040 +0020FB02061EFE5900CA080B01AE2000019F000000000000000000030008000200100001 +FFFF00030000002801E60001000000000000004300000001000000000001000700430001 +0000000000020007004A0001000000000003002F00510001000000000004000700800001 +000000000005000C00870001000000000006000700930001000000000007002F009A0003 +000104030002000C00C90003000104050002001000D50003000104060002000C00E50003 +000104070002001000F10003000104080002001001010003000104090000008601110003 +000104090001000E01970003000104090002000E01A50003000104090003005E01B30003 +000104090004000E021100030001040900050018021F0003000104090006000E02370003 +000104090007005E024500030001040A0002000C02A300030001040B0002001002AF0003 +0001040C0002000C02BF00030001040E0002000C02CB0003000104100002000E02D70003 +000104130002001202E50003000104140002000C02F70003000104150002001003030003 +000104160002000C03130003000104190002000E031F00030001041B00020010032D0003 +0001041D0002000C033D00030001041F0002000C03490003000104240002000E03550003 +0001042D0002000E036300030001080A0002000C03710003000108160002000C037D0003 +00010C0A0002000C0389000300010C0C0002000C0395547970656661636520616E642064 +61746120A92031393936204D6963726F736F667420436F72706F726174696F6E2E20416C +6C2052696768747320526573657276656456657264616E61526567756C61724D6963726F +736F66743A56657264616E6120526567756C61723A56657273696F6E203120284D696372 +6F736F66742956657264616E6156657273696F6E20322E333556657264616E6156657264 +616E6120697320612074726164656D61726B206F66204D6963726F736F667420436F7270 +6F726174696F6E004E006F0072006D0061006C006F00620079010D0065006A006E00E900 +6E006F0072006D0061006C005300740061006E0064006100720064039A03B103BD03BF03 +BD03B903BA03AC0054007900700065006600610063006500200061006E00640020006400 +6100740061002000A9002000310039003900360020004D006900630072006F0073006F00 +66007400200043006F00720070006F0072006100740069006F006E002E00200041006C00 +6C0020005200690067006800740073002000520065007300650072007600650064005600 +65007200640061006E00610052006500670075006C00610072004D006900630072006F00 +73006F00660074003A00560065007200640061006E006100200052006500670075006C00 +610072003A00560065007200730069006F006E0020003100200028004D00690063007200 +6F0073006F00660074002900560065007200640061006E00610056006500720073006900 +6F006E00200032002E0033003500560065007200640061006E0061005600650072006400 +61006E006100200069007300200061002000740072006100640065006D00610072006B00 +20006F00660020004D006900630072006F0073006F0066007400200043006F0072007000 +6F0072006100740069006F006E004E006F0072006D0061006C004E006F0072006D006100 +61006C0069004E006F0072006D0061006C004E006F0072006D00E1006C004E006F007200 +6D0061006C0065005300740061006E00640061006100720064004E006F0072006D006100 +6C004E006F0072006D0061006C006E0079004E006F0072006D0061006C041E0431044B04 +47043D044B0439004E006F0072006D00E1006C006E0065004E006F0072006D0061006C00 +4E006F0072006D0061006C004E0061007600610064006E006F0041007200720075006E00 +740061004E006F0072006D0061006C004E006F0072006D0061006C004E006F0072006D00 +61006C004E006F0072006D0061006C00000000020001000000000014000300010000011A +000001060000010000000000000001020000000200000000000000000000000000000001 +0000030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324 +25262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748 +494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60610062636465666768696A6B +6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F +909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAB03ACADAEAFB0B1B2 +B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD000D1D2D3D4D5 +D6D7D8D9DADBDCDDDEDF0004057200000084008000060004007E017F019201A101B001FF +02C702C902DD0301030303090323037E038A038C03A103CE040C044F045C045F04911E85 +1EF92015201E2022202620302033203A203C203E2044207F20A420A720AC210521132116 +21222126212E215E22022206220F22122215221A221E222B22482260226525A125AB25CA +25CF25E6F002F00DFB02FFFF0000002000A0019201A001AF01FA02C602C902D803000303 +03090323037E0384038C038E03A30401040E0451045E04901E801EA02013201720202026 +203020322039203C203E2044207F20A320A720AB21052113211621222126212E215B2202 +2206220F221122152219221E222B22482260226425A125AA25CA25CF25E6F001F004FB01 +FFFFFFE30000FF1400A60099FF8A0000FE0F0000FF4C0078FF41FF28FCA00000FE170000 +0000FDD9FDD8FDD7FDD6FDA6E30B0000000000000000E085E095E109E084E0F9E156E077 +E0B70000E0900000E038E02BE123DF6ADF79E068E03CDE96DEA2DE8B0000DEA60000DE74 +DE71DE5FDE2FDE30DB9EDB96DAEEDB73DB5D10BE000005BE000100000082000000000000 +000002380000023800000000000000000000023800000242026800000000000000000000 +000002B203640368037600000000000000000000000000000000036A0000036A00000000 +000000000000000000000000000000000358000003580000000000000000000000000000 +0000000000000000034400000000000300A300840085037C009600E60086008E008B009D +00A900A40010008A01000083009300F000F1008D00970088010100DC00EF009E00AA00F3 +00F200F400A200AC00C800C600AD006200630090006400CA006500C700C900CE00CB00CC +00CD00E7006600D100CF00D000AE006700EE009100D400D200D3006800E900EB0089006A +0069006B006D006C006E00A0006F0071007000720073007500740076007700E80078007A +0079007B007D007C00B700A1007F007E0080008100EA00EC00B901440145010201030104 +010500FB00FC014601470148014900FD00FE01060107010800FF014A014B014C014D014E +014F0109010A010B010C0150015100F600F701520153015401550156015701580159015A +015B015C015D015E015F0160016100F800D50138013901620163016401650166010D010E +01670168010F01100111011200E000E1011301140169016A01150116013A016B016C016D +016E016F01700117011800AF00B00119011A01710172011B011C011D011E0173017400F9 +00FA00E200E3011F01200121012201750176017701780179017A017B017C012301240125 +0126017D017E017F01800181018200BA012701280129012A00E400E5018300D600DF00D9 +00DA00DB00DE00D700DD019D019E019F018A01A001A101A201A401A501A601A701A8012B +01A901AA01AB01AC012C01AD01AE01AF01B001B101B201B301B401B501B601B701B8012D +01B901BA01BB01BC01BD01BE01BF01C001C101C2012E01C301C4012F013001C501C601C7 +01C801C901CA01CB01CC01CD01CE023A01CF01D00131013201D1013301D201D301D401D5 +01D601D701D801D9025D025E025F0260026102620263026402650266026702680269026A +026B026C026D026E026F0270027102720273027402750276027702780279027A027B027C +027D027E027F028002810282028302840285028602870288034C034D034E034F03500351 +03520353035403550356035703580359035A035B035C035D035E035F0360036103620363 +036403650366036703680369036A036B036C036D036E036F037003710191019203740375 +037603770378037900B100B20238013400B500B600C3019300B300B400C4008200C10087 +00F50195037A00BC009900ED00C200A5019B019C023B023C023D023E023F024002410242 +0000001F001F001F001F00470070010401C0025F033C035503A203F10461049604C004DE +04F50520057F05B9063806DB072D07A70830086B090B099309B509F10A350A640AAA0B13 +0BF80C600CDC0D4F0DA00DD60E060E7A0EAE0EDB0F180F860FA61000104C10B8111711AE +122012B812DF132C13881407148814DF15221544156F159015C815DE15FE168916E71747 +17A01803184F18D11912193D198C19E51A001A761AB61B011B5D1BB81BF51C8B1CDB1D1B +1D741DD91E641EC21F041F631F7E1FDC203B205520FE21AA21BD21D021E9220222142226 +2238225322652278230A231C232E234023562369237C23B423EE2400241224242436244C +245E24702482249424AB24E62520259A260826EB270B274327C928832929297B299C29C2 +2A2D2A912B412BCD2C0D2C5A2CA82D0C2D4C2DCB2E3D2E722E9F2EE92F5E2F9F301130E7 +316D31D831FF3223326032DF336433A233F33443346D3480349334A6350E35AD35C735DD +361C365B368036A736E33728373F37593777382D3858388438E139313986399E39C43A03 +3AD73AEA3AFD3B103B243B373B4A3B5D3B773B8A3B9D3BB03BC33BD63BE93BFC3C173C47 +3C8E3CA63CEC3D003D493D7D3DB53DEA3E1B3E5B3E923EA53EB73ECA3EDC3F043F6B3FFF +40124024408840E441014135416941BB4239425A427E42AA42F643024314432743F044AF +44C244D444E744F9456F4586459E45B145C3465F47144727479D47A54806489348A648B8 +48CB48F0492B4961499249BC49CF49E149F44A064A1A4A2D4A404A534A664A794A8C4A9E +4AEE4B6C4B7F4BEC4C354C484C5C4C6F4C824C954CA84CBA4CDA4D584DDD4E3C4EC24F58 +4FB24FE1505D5081509D50E951DF51EF52085268528B52CA538353FD5425543F54665491 +54EA54FC550D551F55345546555B556D557E559055A455B655C755D955EE5600561556B8 +575B576D578757DE583458A458FC593F596C59C05A035A595AB15AC85B225B335B495BA2 +5BEB5C305C465C5C5CD25D2E5D405D515D635D745D855DEA5DFC5E105E4E5EBA5ECC5EDD +5EEF5F005F125F235FA2600E6020603260446055608561656246625C626E6285629A62B1 +62C362D562E762F963166332634963606388639E6422648E64AA64D76504653065556589 +65A265DD65F36611662F664F666E668E66B16700670867106752675A6762676A6772677A +67C367CB67D36812681A6840684868DA68E268EA68F2695D69DC69F66A106A216A376A48 +6A5B6A6F6AFD6B4A6BBD6BFF6C866C8E6D226D7A6DC16DC96E726E7A6ECF6F3B6F7A6FEA +705A70F370FB7112712371347146715A71C571DD7255725D7265727F7287731C738773DE +73F3749074C174C97521752975497594759C765676F2773A77AE783B7892789A78A278AA +78D078D878E078E8795979DE79E67A167A5D7A907ACD7B297B907BE47C5F7CCD7D367D3E +7DCA7E4C7E6C7EBC7EC47F7D8015804D80B18126817B81D38203820B82308238829A82C9 +82D1836C837483AC83EF8425846784C3852B858085F4865386BD86D38757876887D587DD +87E587ED87F5888B88F9894F896489EE8A258A4E8A7B8A918B238B488B6C8BBD8C398C73 +8CD88D0C8D8E8D8E8D8E8D8E8D8E8E208E8D8EF48F598F9F8FB58FBD8FC59006904590BD +9126916491A19209927292C09334938093D1944E94D395479558956C9586959B95B195C7 +95DD95F3960B96219633964996659683969596AA96BC96D196E396F8970A971F973E9759 +976A977B979697AE97C497D597ED97FF98179829983F985598679879989898B198C998DB +98ED98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF9911 +9922994099549970998999A199B399CB99E499FC9A159A359A4E9A659A769A909AA59ABB +9ACC9AE29AF99B0B9B1C9B2D9B3E9B549B659B7C9B949BAF9BC79BDD9BEE9C009C119C22 +9C339C4E9C649C759C8B9CA49CB89CCE9CDF9D639D6B9DDB0000037D01011C1C300E0E0B +0E010A01010E0E010F01010B0B0B0B0B0B0B0B0B0B01010E0E0E0B0C320E101923150E0F +740A0E2D240E0D0D0D0E322C1D322E1C111C0101010101010D0D0E0D0D1C0D0BB4010EB4 +110B100D0D2A11110B0A100F0A11010E0101323210230E0D1D0D0D0D0D0D0D0E0D0D0D0D +B4B4B4B40B10101010100B0B0B0B0B010B0B01010B0101010101010E330D010E0E0E0B10 +010101010B0101010E100B300E010B010127270132320D011C0B01010101010E010A1101 +01010101010B010101013223322323747474740D0D0D1D1D1DB401010101010101010101 +0AD732111C110E1001110A0D0D0E01010101010101010E0D743211100E100E0D0101320D +320D190D10230D230D2DB42D322D010E0B0E0B0D100E2A0E2A32112C112C111D0B1D0B1C +111C11100D130D2612181110010D010A0A110E01240A121901011901320D100E100E230D +230D230D0E0D0E0D0E0D0F0B0F0B74B474B474B474B40A010E0E0E2DB40E0B0E0B0D100D +100E2A32112C111D0B1D0B1D491D182E10110A01320D330E0D10012E102E102E10110A01 +010B01010101012E010101320E1C10160C27B4320E01231C0F740E0A240E300D0F0D1E2C +111C111474110D120BB40B0B0F0D0B0DB40D0A130A011010010B0C1010B40B100B10230A +100D3274740A0C0E010E1111320E0E10012311010E0E0E12240F0D0F0D102C11131C2D22 +11111F2D0E0D01100D240A010D0D301210100B011D1010100D0F110A170F270D11320C11 +0C0E0D0A0D0B010E11B4B4010A0E0B0B0A10100A01011001010101010101010101012D10 +282001010101010101010101010101010101010101320D320D320D320D320D320D320D32 +0D320D320D320D320D230D230D230D230D230D230D230D230D74B474B401010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010D100D100D100D100D100D100D102D102D102D102D102D101D0B1D0B +28202820282028202820110A110A110A110A0D010B00000000000001000101010101000C +00F808FF00080008FFFE0009000AFFFE000A000AFFFE000B000BFFFE000C000CFFFE000D +000DFFFD000E000EFFFD000F000FFFFD0010000FFFFD00110011FFFD00120012FFFC0013 +0013FFFC00140015FFFC00150015FFFC00160016FFFC00170017FFFB00180018FFFB0019 +001AFFFB001A001BFFFB001B001BFFFB001C001CFFFA001D001DFFFA001E001EFFFA001F +0020FFFA00200020FFFA00210021FFF900220022FFF900230023FFF900240025FFF90025 +0026FFF900260026FFF800270027FFF800280028FFF800290029FFF8002A002BFFF8002B +002BFFF7002C002CFFF7002D002DFFF7002E002EFFF7002F0030FFF700300031FFF60031 +0031FFF600320032FFF600330033FFF600340034FFF600350036FFF500360036FFF50037 +0037FFF500380038FFF500390039FFF5003A003BFFF4003B003CFFF4003C003DFFF4003D +003DFFF4003E003EFFF4003F003FFFF300400041FFF300410041FFF300420042FFF30043 +0043FFF300440044FFF200450046FFF200460047FFF200470047FFF200480048FFF20049 +0049FFF1004A004AFFF1004B004CFFF1004C004DFFF1004D004DFFF1004E004EFFF0004F +004FFFF000500051FFF000510052FFF000520052FFEF00530053FFEF00540054FFEF0055 +0055FFEF00560057FFEF00570058FFEE00580058FFEE00590059FFEE005A005AFFEE005B +005CFFEE005C005DFFEC005D005DFFEC005E005EFFEC005F005FFFEC00600060FFEC0061 +0062FFEB00620062FFEB00630063FFEB00640064FFEB00650065FFEB00660067FFEA0067 +0068FFEA00680068FFEA00690069FFEA006A006AFFEA006B006BFFE9006C006DFFE9006D +006DFFE9006E006EFFE9006F006FFFE900700070FFE800710072FFE800720072FFE80073 +0073FFE800740074FFE800750075FFE700760076FFE700770078FFE700780078FFE70079 +0079FFE7007A007AFFE6007B007BFFE6007C007DFFE6007D007DFFE6007E007EFFE6007F +007FFFE500800080FFE500810082FFE500820083FFE500830083FFE500840084FFE40085 +0085FFE400860086FFE400870088FFE400880088FFE400890089FFE3008A008AFFE3008B +008BFFE3008C008DFFE3008D008EFFE3008E008EFFE2008F008FFFE200900090FFE20091 +0091FFE200920093FFE200930093FFE100940094FFE100950095FFE100960096FFE10097 +0098FFE100980099FFE000990099FFE0009A009BFFE0009B009BFFE0009C009CFFE0009D +009EFFDF009E009EFFDF009F00A0FFDF00A000A0FFDF00A100A1FFDF00A200A3FFDE00A3 +00A4FFDE00A400A4FFDE00A500A6FFDE00A600A6FFDE00A700A7FFDD00A800A9FFDD00A9 +00A9FFDD00AA00ABFFDD00AB00ABFFDD00AC00ACFFDC00AD00AEFFDC00AE00AFFFDC00AF +00B0FFDC00B000B0FFDC00B100B1FFDB00B200B2FFDB00B300B4FFDB00B400B5FFDB00B5 +00B6FFDB00B600B6FFDA00B700B7FFDA00B800B9FFDA00B900BAFFDA00BA00BBFFDA00BB +00BBFFD900BC00BCFFD900BD00BDFFD900BE00BFFFD900BF00C0FFD900C000C1FFD800C1 +00C1FFD800C200C2FFD800C300C4FFD800C400C5FFD800C500C5FFD700C600C6FFD700C7 +00C7FFD700C800C8FFD700C900CAFFD700CA00CBFFD600CB00CCFFD600CC00CCFFD600CD +00CDFFD600CE00CFFFD600CF00D0FFD500D000D0FFD500D100D1FFD500D200D2FFD500D3 +00D3FFD500D400D5FFD400D500D5FFD400D600D7FFD400D700D7FFD400D800D8FFD400D9 +00DAFFD300DA00DBFFD300DB00DCFFD300DC00DCFFD300DD00DDFFD300DE00DEFFD200DF +00E0FFD200E000E0FFD200E100E2FFD200E200E2FFD200E300E3FFD100E400E5FFD100E5 +00E6FFD100E600E7FFD100E700E7FFD100E800E8FFD000E900E9FFD000EA00EBFFD000EB +00EBFFD000EC00ECFFD000ED00EDFFCF00EE00EEFFCF00EF00F0FFCF00F000F1FFCF00F1 +00F2FFCF00F200F2FFCE00F300F3FFCE00F400F4FFCE00F500F6FFCE00F600F7FFCE00F7 +00F7FFCD00F800F8FFCD00F900F9FFCD00FA00FBFFCD00FB00FCFFCC00FC00FDFFCC00FD +00FEFFCC00FE00FEFFCC00FF00FFFFCCB8FFC0401EB229323610B220B240B250B270B280 +B2A0B2B0B2D0B2E0B20AC0B2F0B202B8FFC04070B51718361F44010F561F56024F555F55 +026F54019F54AF54025153170452531604535215044A4952044649370447493204484932 +04493539043C3F32043D3F3D043E3F2104433F1D04423F5204413F5204403F52043F3532 +0432336404333534043534540434351E04D034E034F03403B8FFEEB3B4254836B8FFE0B3 +B4102336B8FFEE400DB4090F36B41A480476B386B302B8FFF0B3B3254836B8FFFA40FFB3 +092436B314480489881304706C7078020F9CDF9E02409D161936409C161B364097171936 +4096171B368685131F0F840F850F8E0F8F0F901F841F8E1F8F2F8E808580888F91908590 +8790880F40820910360F721F72024071090C360F6D0120C80120C7013FC6EFC60220C540 +C50200620100621062024061A061020F5B012D1411042C1425042B1439042A1413042914 +15041F141E042120430420143C04C91A45041A1B47041B1A3C041A143204151439041314 +480412141A0411141A0470140140144143360F0E2A1F0006010DC34B1F0CC24B1F0AC04B +1F09C04B1F05BC4B1F04BD4B1F03B94B1F02BA4B1F01B64B1F00B74B1FC3C22A1FC0BF2A +1FBD4056BC211FBAB9211FB7B6211FC2C3C40DBFC0C10DBCBDBE0CB9BABB0CB6B7B80C10 +BC80BC0240B980B9020FB63FB64FB67FB6040FB62FB63FB66FB67FB6BFB6CFB6FFB6080A +0937040C0D02050402030202010002500501B801FF858D8D1DB0964B5258B0801D59B808 +004B5458B001B0018E59B0084B5358B001B0018E59002B2B2B2B2B737473732B2B2B2B2B +2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB00345B006456861B006234473B00345B00E456861 +B00E2344B00E45B00F456861B00F23442B01B0144568B01423442B732B2B2B2B2B2B2B2B +2B2B2B2B2B2B2B2B7373737373737373732B732B732B2B2B2B2B73732B2B2B2B732B2B2B +2B00752B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73747373742B73742B400C3736 +26251F13120D0C0504022C20B003254523452361688A204568208A234460442D2C4B5258 +45441B2121592D2C202045684420B001602045B0467668188A4560442D2CB0122BB00225 +45B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C +60B0022523442121212D2CB100032545685458B0032545B0032545606820B004252344B0 +042523441BB00325204568208A2344B00325456860B003252344592D2CB0032520456820 +8A2344B00325456860B0032523442D2C4B525845441B2121592D2C462346608A8A462320 +468A608A61B8FF8062232010238AB14B4B8A70456020B0005058B00161B8FFBA8B1BB046 +8C59B0106068013A2D2C2045B003254652583F1B2111592D2C4B53234B515A5820458A60 +441B2121592D2C4B53234B515A58381B2121592D061E061405F005D1047C045D03DD0010 +0000FFE7FFE1FE78FE64FE590394001FFFFF009600AA00B900C600CEFFFFFFFFFFFFFFFF +00BC00C2FFFFFFFF007600B200C000CBFFFFFFFFFFFFFFFFFFFFFFFF0081009400A600CC +00DA00EFFFFFFFFFFFFFFFFF0098009E00AB00B0FFFFFFFFFFFFFFFFFFFFFFFF00900098 +009E00A400A900AE00B300BA00C3FFFF00880091009800A500ACFFFFFFFFFFFFFFFFFFFF +006F0087008F009B00A000D3011DFFFFFFFFFFFF00C3021401C2FFFFFFFF00E9000C02D1 +0173018E001A002C0044005C0073007E008600B200C8014C001A003D00440050005C0072 +0078009200B200B900C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003D0056005D006A +006E00B100B900C1FFFFFFFF002A003D00540064006A00B100B9FFFFFFFFFFFF0071007A +008900A100A700BB006F007A00870091009AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +008102210221007400E500B900CA019502C600AC00A700850614000A000005D1001F0000 +045D001F00000000FFE10000FE64FFF50000036202F402A2029100AF026A004C08000100 +0000000002D0000002D000000326012303AC00A8068C00C30516009B089C009505D00073 +022600A403A200B503A20093051600A7068C00D202E9009303A2009902E900FD03A2FFE2 +0516008905160116051600A1051600A70516004D051600BB051600890516009A0516007A +0516007103A2015A03A200E6068C00FE068C00F5068C010C045D00A0080000B00578001A +057C00C805960073062A00C8050F00C8049900C806340073060300C8035E008903A3002C +058B00CD047400C806BE00C805FC00C8064C007304D300C8064C0073059000C805780086 +04EE000005DB00B20578001A07E9005C057B004404EC0006057B007E03A200EF03A20046 +03A200AB068C00BA0516FFFC0516015404CE006804FC00B9042B006904FC006C04C4006A +02D0004404FC006C051000B9023200AF02C1FFC204BC00C1023200BB07C800B9051000B9 +04DB006A04FC00B904FC006C036A00B9042B006E0327003E051000B104BC003D068C0056 +04BC003C04BC003D0434005D051400AD03A2017A051400BB068C00BB0578001A0578001A +05960073050F00C805FC00C8064C007005DB00B204CE006804CE006804CE006804CE0068 +04CE006804CE0068042B006904C4006A04C4006A04C4006A04C4006A023200A00232FFEB +0232FFF502320005051000B904DB006A04DB006A04DB006A04DB006A04DB006A051000B1 +051000B1051000B1051000B1051600BB0456009A0516009F05160089051600AC045D00B9 +0516008904F600B90800009F0800009F07D000AA0516021D0516015A068C00F507E0000E +064C0073080000A1068C00D7068C00FE068C010C0516006C052200BE0516009505D100BB +068C009005A900710516008A045D0097045D0079068C006B07A4006804DB005D045D0071 +03260123068C00D2068C00860516FFDC068C00F305D10032052800A6052800AE068C00B2 +0578001A0578001A064C0073088F007807DA006A051600990800009903ACFFED03AC0096 +0226FFED022600A0068C00D2068C00AC04BC003D04EC000602E4FF9A0516000003A200BA +03A200C20500004405020044051600BB02E900FD0226FFF603ACFFF60C2C00950578001A +050F00C80578001A050F00C8050F00C8035E0089035E005D035E007E035E0089064C0073 +064C0073064C007305DB00B205DB00B205DB00B2023200BB05160136051600ED05160118 +05160113051602210516012D05160161051601560516019F05160132047E001802460018 +05780086042B006E057B007E0434005D03A2017A0634000E04E5006A04EC000604BC003D +04D800C804FC00B9068C00DC068C012304560123045600CF045600CF080000AB080000AB +0800008C0516003C0634007304FC006C035E008905780086042B006E05960073042B0069 +05960073042B006904FC006C0516FFFC02E900FD0578001A04CE00680578001A04CE0068 +062A00C8052E006C0634000E050F00C804C4006A050F00C804C4006A047400C8023200AB +047400C8025E00BB047400C803AB00BB05FC00C8051000B905FC00C8051000B9064C0073 +04DB006A059000C8036A00B9059000C8036A009205780086042B006E04EE00000327003E +04EE00000327003E05DB00B2051000B105DB00B2051000B1057B007E0434005D057B007E +0434005D048800C8064C0073068D006904FC006C04DD006A041A006D050B006A03F8000A +065200680516FFFC04FF0123045D009A094F00C806F7008904E900AF05D8000002E400D5 +047500D5089C00950296000F04D5009202D6008302D6008304D500B102D600700578001A +04CE006805960073042B006905960073042B0069050F00C804C4006A050F00C804C4006A +050F00C804C4006A0634007304FC006C0634007304FC006C0634007304FC006C060300C8 +051000B90603002005100013035E002C0232FFF2035E005F0232FFFC035E008002320001 +035E00890232008E03A3002C02C1FFC2058B00CD04BC00C104BC00C1047400C802320005 +05FC00C8051000B905FC00C8051000B9064C007304DB006A064C007304DB006A059000C8 +036A001B05780086042B006E04EE00000327003E05DB00B2051000B105DB00B2051000B1 +05DB00B2050B00B105DB00B2050B00B107E9005C068C005604EC000604BC003D026700B9 +0578001A04CE006807E0000E07A40068064C007304DB005D03A2015A07E9005C068C0056 +07E9005C068C005607E9005C068C005604EC000604BC003D0226FFED0516FFD005160089 +05BE00B1080000AB0800008C0800008A0800009901B00061051601610516021205160100 +057800070602000006F6000004510000070C000006070000074300000232FFCB0578001A +057C00C805A0001A050F00C8057B007E060300C8035E0089058B00CD057C001A06BE00C8 +05FC00C805310072064C0073060300C804D300C80561007604EE000004EC0006057B0044 +06F700B3068C006C035E007E04EC000604FC006C041A006D051000B9023200A0050D00B1 +04F600B904BC003D03A9006C051000B904FE0089023200BB04BC00C104BC003D051E00B9 +04BC003D0406006804DB006A050000B904100069050D00B104B80030069300B006820071 +02320005050D00B104DB006A050D00B106820071050F00C80657FFFF048800C8059B0073 +05780086035E0089035E007E03A3002C08F2001208D300C8068BFFFF058B00CD04EC0006 +060300C80578001A057C00C8057C00C8048800C805F7000A050F00C807C9002004ED0051 +060100C8060100C8058B00CD05E0001206BE00C8060300C8064C0073060300C804D300C8 +0596007304EE000004EC0006068D0069057B0044061700C805B2008E083E00C8085C00C8 +06440000075D00C8057200C8059C0061084600C805A6002C04CE006804EA007404C200B9 +03C500B904F9000904C4006A0662003404320041051F00B9051F00B904BC00C104F7001D +059200B9051900B904DB006A051900B904FC00B90446006A03F8000A04BC003D06BA006F +04BC003C052800B904D8008E070200B9071A00B90520000A065B00B9049100B904600053 +06B600B904CC004304C4006A0510001303C500B90460006A042B006E023200AF02320005 +02C1FFC20750001D075000B90510001304BC00C104BC003D051900B9048800C803C500B9 +080000CB096000C8051900B904560119045600EF045600E6045600B3045600E6045600F3 +045600C5000000000000000000000000000000000674007304DB006A060D00B2054700B1 +0000020900000221000001540000021D0516013605160003051601360516012505160142 +051601420516014205160125051602090516013605160142051601420516014205160142 +051601360578001A04CE00680578001A04CE00680578001A04CE00680578001A04CEFFE3 +0578001A04CE00680578001A04CE00680578001A04CE00680578001A04CE00680578001A +04CE00680578001A04CE00680578001A04CE00680578001A04CE0068050F00C804C4006A +050F00C804C4006A050F00C804C4006A050F00C804C4006A050F002904C4FFFC050F00C8 +04C4006A050F00C804C4006A050F00C804C4006A035E008902320096035E0089023200AF +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000064C007304DB006A064C0073 +04DB006A064C007304DB006A064C007304DBFFE5064C007304DB006A064C007304DB006A +064C007304DB006A0674007304DB006A0674007304DB006A0674007304DB006A06740073 +04DB006A0674007304DB006A05DB00B2051000B105DB00B2051000B1060D00B2054700B1 +060D00B2054700B1060D00B2054700B1060D00B2054700B1060D00B2054700B104EC0006 +04BC003D04EC000604BC003D04EC000604BC003D04EC000604BC003D04FC006C000000ED +0516008A0000001F00000380090E09000303050507070B07030404070703050304070707 +070707070707070404070707060A08070808070608080505070609080907090707070808 +090707070404040706060606060606030606030306030906060606040604060607060605 +060506070808080708090806060606060606060606060303030306060606060606060606 +07050707060507060909090606070A090907070707060607070607050507090606050707 +0707070606070808090A0907090404020207070607030604040606070302040E08070807 +070505050509090908080803060606060606060606060603070607050508060706070607 +070505050909090608060507060806080606060308060806080608070607060603060306 +040806080609060704070407060704070408060806070507050609070606050605090606 +050B09060703050B03050303050308060806080607060706070608060806080608060806 +050305030503050305030706060603080608060906090607040706070408060806080608 +06090707060308060A090906040907090709070706020607060909090902060606080809 +060908090308070607070805070809080709080706070707090905070605060306060505 +060603060606060506060506050907030606060707080608070505050A0A070707070807 +070607070906080807070908090807080707070708070909080907080907060606040606 +070506060606070606060606050609060705090907080606080606060406060303030909 +060606060505090B06050505050505050000000009060806000000000606060606060606 +060606060606060806080608060806080608060806080608060806080608060706070607 +060706070607060706070605030503000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000090609060906 +090609060906090609060906090609060906080608060806080608060806080607060706 +07060706060007000A0F0A000404040508070B0703050507080405040507070707070707 +0707070505080808060A070708080606080805050706090709070908070708070B070707 +0505050806060707050707040707030307030B0707070704060407060707060606050608 +070708060709080707070707070507070707030303030707070707070707070707050707 +060507060A0A0A0606080A090A080808070706070807070505080A070604080807080706 +06080707090B0A070A0505030308080607040605050606070403050F0706070606050505 +050909090808080306060606060606060606060307060706050806070607070808050505 +0A0A0A060807050706080508050706040707070708070806070607060306030605070707 +0709070804080407060704070408070807070607060609090707050705090606050C0906 +0704060B0306040406040707080508050607060706070807080708070807080705030503 +0503050305030707070603070707070907090708040706070408070807080708070B0707 +060307070A0A0907050B070B070B070706030607070A0A0A0A0206060607070906090909 +030707070607080507070907070908070707070709090507070507030707070507070307 +0607060507070507060909030707070906080608070505050B0B08070708070707060706 +0906080807070908090807080707090709070B0B080907080A0707070605060707050707 +0706070707070705050609070706090A0708060608060707050606030303090907070607 +06050A0C0705050505050505000000000907080700000000060606060606060606060606 +060606070707070707070707070707070707070707070707070707060706070607060706 +070607060706070503050300000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000009070907090709070907 +090709070907090709070907090708070807080708070807080708070706070607060706 +070007000B110B000404040509070C080305050709040504050707070707070707070705 +05090909060A080809090706090805050806090809070908080708080B08070805050509 +07070707060707040707030407030B070707070506040707090707060705070908080907 +080908070707070707060707070703030303070707070707070707070706070707060707 +0B0B0B0707090B090B090909070707080908070606090B07060409090709080707090808 +090C0B070B05050303090907070407050507070704030511080708070705050505090909 +08080803070707070707070707070603080608060509070707070709090606060B0B0B07 +090705080609060906070704080708070907090707070706030603060508070807090708 +05080508060704070408070807080608060609090707060705090707060D0A070804060C +040704040704080709060906070707070707090709070907080708070503050305030503 +05040807070603080708070907090708050806070408070807080708070B090707030807 +0B0B0907050B090B090B090707030707080B0B0B0B02070707080809060A090903080808 +070808050808090807090807070707080909050707060703070707050707030707070706 +07070607070909030707070907090609080505050D0C090808080808080608070B070808 +08080908090807090708090809080B0C090A07090B080707070508070906070707070707 +07070706050709070807090A080907070A0707070507060303040A0B0707070706050B0D +070606060606060600000000090708070000000007070707070707070707070707070708 +070807080708070807080708070807080708070807080707070707070707070707070707 +070707050305030000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000907090709070907090709070907 +090709070907090709070807080708070807080708070807070707070707070707000700 +0C120C00040405060A080D09030505080904050405080808080808080808080505090909 +070C0808090908070909050508070A090A080A08080709080D0807080505050A08080808 +060808040808030407030B0808080805070508070B0707070805080A08080908090A0908 +08080808080608080808030303030808080808080808080808070808080708070C0C0C08 +08090C0A0C090909080808090A080807070A0B080705090A080A0908080A08080A0D0D08 +0C06060303090A070704080505080808040306120808080808050505050A0A0A09090903 +0808080808080808080807030807080705090707070808090A0707070C0C0C0809080508 +07090609060808040808080809090908080808070307040706090809080A080805080508 +07070507050908090808070807070A0B0808060807090808070E0A070904070D04070404 +070408080906090608080808080809080908090809080908050305030503050305040807 +070703090809080A080A0808050807070509080908090809080D0B07070408080C0B0A08 +050D0B0D0B0D0B0707030808090C0C0C0C0308080808090A060B090B0308080808080905 +08080A09080A0908080707080B0A05070806080308070706080803080708070608080608 +070B0B030808080B080A0709080505050D0D0A0808090808080709080D07090908090A09 +0A09080907080B0809090D0E090B08090C080808070608080B0608080707080808080806 +07070B0709080B0C080907080B0708080608070303040B0B0807070807060C0E08070707 +07070707000000000A080908000000000808080808080808080808080808080808080808 +080808080808080808080808080808080808080808080808080808080808080808080805 +030503000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000A080A080A080A080A080A080A080A080A08 +0A080A080A0809080908090809080908090809080707070707070707080008000D140D00 +050505050A080D09030606090905070506080808080808080808080606090909070D0908 +090908080909050608070B090A080A08090909090D0909090606060B0808080808080805 +0808030407030B0808080805070608080B0708070807080B09090908090A090808080808 +080808080808030303030808080808080808080808070808080708080D0D0D0808090C0A +0D090909080808090B090807070B0B080705090B080B0908080B09090A0E0D080D060603 +03090B080905080606080808050306140908090808050505050A0A0A0909090308080808 +08080808080807030907090707090809080808090B0707070D0D0D080908050907090809 +080808050908090809080908080808070307040706090809080A08080508050907090609 +060908090809070907070A0B08080708070B0808070F0B080A05070E0408050508050908 +090809080808080808080908090809080908090805030503050305030604080707070309 +0809080A080A0808050907090609080908090809080D0B09080409080C0B0A08060D0B0D +0B0D0B0908030808090D0D0D0D0308080809090A060B0A0C030908090809090508090B09 +080A0908090909090B0B05090807080308080906080803080808080708080708080B0B03 +0808080B080A0709090505060F0D0B080909090808070A080D080909080A0B090A090809 +09090B090A090D0E0A0C08090D080808080608080B070808080809080808080807080B07 +09080B0C080907080B0808080608070303040C0D0808080807060D0F0807070707070707 +000000000A08090900000000080808080808080808080808080808090809080908090809 +080908090809080908090809080908080808080808080808080808080808080503050300 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000A080A080A080A080A080A080A080A080A080A080A08 +0A0809080908090909090909090909090908090809080908080008000E150E0005050606 +0B090F0A040606090B050705060909090909090909090906060B0B0B080E0A0A0A0B0908 +0B0A05060A080B0A0B080B0A0A090A0A0F0A090A0606060B090908090709080509090305 +08030D0909090906080609080B0908080906090B0A0A0A090A0B0A080808080808070808 +0808030303030909090909090909090909080909090809090E0E0E09090B0E0B0E0B0B0B +0909090A0B0A0908080B0D0908060B0B090B0A09090B0A0A0B0F0E090E060604040B0B08 +0905090606090909050406150A090A0909050505050B0B0B0A0A0A030909090909090909 +090908030A080A08060B09090808090B0B0808080E0E0E090B09050A080A070A07090905 +0A080A080B090B090809080803080408060A090A090B090A060A060A08090609060A090A +090A080A08080B0B09090709070B090908100C080A05080F0508050508050A080A070A07 +0908090809080B090B090B090A090A09050305030503050306050A080808030A090A090B +090B090A060A0809060A090A090A090A090F0B0908040A080E0D0B09060F0B0F0B0F0B09 +080409090A0E0E0E0E030909090A0B0C070C0B0C030A0A0A090A0A050A0A0B0A090B0A08 +0909090A0B0B05090907090309090906090903080809080709090709080B0B030909090B +090B080A0A050506100F0B0A090B0A0A0A080A090F090B0B0A0A0B0A0B0A080A09090B0A +0B0A0D0E0B0D0A0A0E0A0809080709080B07090908090A090909090807080B090A080B0C +090B08080C0808090708080303050D0D0908080908070E10090808080808080800000000 +0B090B0A000000000909090909090909090909090909090A080A080A080A080A080A080A +080A080A080A080A080A0809080908090809080908090809080908050305030000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000B090B090B090B090B090B090B090B090B090B090B090B090A09 +0A090B0A0B0A0B0A0B0A0B0A0908090809080908090009000F170F00050506070C0A100B +0407070A0C050705070A0A0A0A0A0A0A0A0A0A07070C0C0C080F0A0A0B0B09090C0B0507 +0A080D0B0C090C0A0A090B0A0F0A090A0707070C0A0A0909080909050909030509030F09 +0A090906080609090D0909090A070A0C0A0A0B090B0C0B09090909090908090909090303 +0303090A0A0A0A0A090909090A080A0A0A080A090F0F0F0A0A0C0F0C0F0C0C0C0A090A0B +0C0B0A08080C0E0A08060C0C0A0C0B0A0A0C0A0A0C100F0A0F070704040C0C0909050A07 +0709090A050407170A090A0909050505050C0C0C0B0B0B030A0A0A0A0A0A0A0A0A0A0803 +0A080A09070B09090909090C0C0808080F0F0F0A0C09050A080B080B08090A050A090A09 +0B0A0B090909090803080408070B090B090C0A0A060A060A08090609060B090B090A090A +09090C0D090A080A070B0A0908110D080B0508100509050509050A090B080B0809090909 +09090C090C090C090B090B09050305030503050307050A090908030B090B090C0A0C0A0A +060A0809060B090B090B090B080F0D0909050A090F0E0C0A070F0D0F0D0F0D0909040A0A +0B0F0F0F0F030A0A0A0A0B0D070D0B0D030A0A0B090A0B050A0A0D0B0A0C0B090A09090A +0D0C0509090809030909090709090309090909080A0A0809090B0D03090A090D090C090B +0A05050711110C0A0A0B0A0A0A090B090F090B0B0A0B0D0B0C0B090B090A0D0A0B0B0F10 +0C0E0A0B100A0909090709090D08090909090A090A09090807090D090A090D0E0A0C0908 +0D0909090708080303050E0E0909090909070F120908080808080808000000000C0A0C0A +000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090A090A090A090A090A +090A090A090A090909090909090909090909090909090905030503000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B090B090C0A +0C0A0C0A0C0A0C0A090909090909090909000A0010181000060606070D0A110C0407070A +0D060706070A0A0A0A0A0A0A0A0A0A07070D0D0D09100B0B0B0C0A090C0C07070B090D0C +0D0A0D0B0A0A0C0B110B0B0B0707070D0A0A0A0A080A0A060A0A050609050F0A0A0A0A06 +09070A090D0909090A070A0D0B0B0B0A0C0D0C0A0A0A0A0A0A080A0A0A0A050505050A0A +0A0A0A0A0A0A0A0A0A090A0A0A090A0A1010100A0A0D100D100D0D0D0A0A0A0C0D0B0A09 +090D0F0A09060D0D0A0D0C0A0A0D0B0B0D11100A10070704040D0D090B060A07070A0A0A +060407180B0A0B0A0A070707070D0D0D0C0C0C050A0A0A0A0A0A0A0A0A0A09030A090B09 +070C0A0B090A0A0D0D0909091010100A0C0A070A090B080B080A0A060B0A0B0A0C0A0C0A +0A0A0A0905090509070C0A0C0A0D0A0B060B060A090A070A070C0A0C0A0B090B09090D0D +0A0A090A070D0A0A09130E0B0C060911050A06060A060B0A0B080B080A0A0A0A0A0A0C0A +0C0A0C0A0C0A0C0A070507050705070507060B090909050C0A0C0A0D0A0D0A0B060A090A +070C0A0C0A0C0A0C0A110D0B09050B0A100F0D0A07110D110D110D0B09040A0A0B101010 +10030A0A0A0B0C0E090E0C0E050B0B0B0A0B0C070B0B0D0C0A0D0C0A0B0A0B0B0D0D070B +0A090A050A0A09070A0A0509090A09080A0A080A090D0D050A0A0A0D0A0D090B0A070707 +12120D0B0B0B0B0B0B090C0A110A0C0C0B0C0D0C0D0C0A0B0A0B0D0B0C0B0F100D0E0B0B +110B0A0A0A080A0A0D090A0A090A0B0A0A0A0A0907090D090A0A0D0E0A0C09090D0A0A0A +0809090505060F0F0A09090A090810130A09090909090909000000000D0A0D0B00000000 +0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B +0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0705070500000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0A0C0A0D0B0D0B0D0B +0D0B0D0B0B090B090B090B090A000A00111A1100060607080E0B120C0508080B0E060806 +080B0B0B0B0B0B0B0B0B0B08080E0E0E09110C0C0C0D0B0A0D0D08080C090E0D0D0A0D0C +0C0A0C0C110C0A0C0808080E0B0B0A0B090B0A060B0B05060A05110B0A0B0B0709070B0A +0E0A0A090B080B0E0C0C0C0B0D0D0C0A0A0A0A0A0A090A0A0A0A050505050B0A0A0A0A0A +0B0B0B0B0B090B0B0B090B0B1111110B0B0E110D110E0E0E0B0B0B0C0E0C0B09090E100A +09070E0E0B0E0C0B0B0E0C0C0D12110B11080805050E0E0A0A060B08080B0B0B0605081A +0C0B0C0B0B080808080D0D0D0C0C0C050B0B0B0B0B0B0B0B0B0B0A050C090C09080D0A0A +0A0A0B0E0E0909091111110B0D0B080C090C090C090B0B060C0A0C0A0D0B0D0B0A0B0A09 +05090509080D0B0D0B0D0A0C070C070C090A070A070C0B0C0B0C090C090A0D0E0B0A080B +080D0B0B09140F0A0C060912060A06060A060C0A0C090C090B0A0B0A0B0A0D0B0D0B0D0B +0D0B0D0B080508050805080508060C0A0A09050D0B0D0B0D0A0D0A0C070C090A070C0B0C +0B0C0B0C0B110E0A0A050C0A11100D0A08110E110E110E0A0A050B0B0C11111111040B0B +0B0C0D0F090F0D10050C0C0C0B0C0D080C0C0E0D0B0D0D0A0B0A0A0C0F0E080A0B080B05 +0B0B0A080B0B050A0A0B0A090A0B090B0A0E0E050B0A0B0E0B0D0A0C0C08080813130E0C +0A0D0C0C0C0A0D0B110A0D0D0C0D0E0D0D0D0A0C0A0A0E0C0D0C12120D100C0C120C0A0A +0A080B0A0E080B0B0A0B0C0B0A0B0B09080A0D0A0C0A0F0F0B0E0A090E0A0A0B08090905 +050610100B0A0A0B0A0811140B09090909090909000000000D0A0D0B000000000B0B0B0B +0B0B0B0B0B0B0B0B0B0B0B0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B +0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A080508050000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000D0A +0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0B0C0B0D0B0D0B0D0B0D0B0D0B +0A0A0A0A0A0A0A0A0B000B00121B1200060607080F0B130D0508080B0F070807080B0B0B +0B0B0B0B0B0B0B08080F0F0F0A120C0C0D0E0B0A0E0E08080C0A0F0D0E0B0E0D0C0B0D0C +120C0B0C0808080F0B0B0B0B090B0B060B0B05060B05120B0B0B0B0809070B0B0F0B0B09 +0B080B0F0C0C0D0B0D0E0D0B0B0B0B0B0B090B0B0B0B050505050B0B0B0B0B0B0B0B0B0B +0B0A0B0B0B0A0B0B1212120B0B0F120E120F0F0F0B0C0B0D0F0D0B0A0A0F110B0A070F0F +0B0F0D0C0C0F0C0C0E13120B12080805050F0F0B0B070B08080B0B0B0705081B0C0B0C0B +0B080808080E0E0E0D0D0D050B0B0B0B0B0B0B0B0B0B0A050C090C09080E0B0B0B0B0B0F +0F0A0A0A1212120B0E0B080C090D090D090B0B070C0B0C0B0E0C0E0B0B0B0B0A050A050A +080D0B0D0B0E0B0D080D080C090B070B070D0B0D0B0C090C090A0E0E0B0B090B090E0B0B +0A15100B0D070A13060B06060B060C0B0D090D090B0B0B0B0B0B0E0B0E0B0E0B0E0B0E0B +080508050805080508060C0B0B0A050D0B0D0B0E0B0E0B0D080C090B070D0B0D0B0D0B0D +0B120F0B0B050C0B12110E0B08120F120F120F0B0B050B0B0D12121212040B0B0B0C0E10 +0A100E10050C0C0D0B0C0E080C0C0F0D0C0E0E0B0C0B0B0C100E080B0B090B050B0B0B08 +0B0B050B0B0B0B090B0B090B0B0F0F050B0B0B0F0B0E0A0D0C08080814140F0C0B0E0C0C +0C0A0D0B120B0E0E0C0D0F0E0E0E0B0D0B0B0E0C0E0D13130E110C0D130D0B0B0B080B0B +0E090C0C0B0B0D0B0B0B0B0A090B0F0B0C0B10100C0E0A0A0F0B0B0B080A090505061010 +0B0B0B0B0A0812150B0A0A0A0A0A0A0A000000000E0B0D0B000000000B0B0B0B0B0B0B0B +0B0B0B0B0B0B0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0B0B0B0B0B +0B0B0B0B0B0B0B0B0B0B0B08050805000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000E0B0E0B0E0B +0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0B0B0B0B +0B0B0B0B0B000B00131D130007070709100C140E0509090C10070907090C0C0C0C0C0C0C +0C0C0C09091010100A130D0D0D0F0C0B0F0E08090D0B100E0F0B0F0D0D0C0E0D130D0C0D +090909100C0C0B0C0A0C0B070C0C06070B06120C0C0C0C080A070C0B100B0B0A0C090C10 +0D0D0D0C0E0F0E0B0B0B0B0B0B0A0B0B0B0B060606060C0C0C0C0C0C0C0C0C0C0C0A0C0C +0C0A0C0C1313130C0C10130F131010100C0C0C0E100D0C0A0A10120C0A0710100C100E0C +0C100D0D0F14130C130909050510100B0C070C09090C0C0C0705091D0D0C0D0C0C080808 +080F0F0F0E0E0E060C0C0C0C0C0C0C0C0C0C0B060D0A0D0A090F0C0C0B0C0C10100A0A0A +1313130C0F0C080D0A0D0A0D0A0C0C070D0B0D0B0F0C0F0C0B0C0B0B060B060B090E0C0E +0C0F0C0D080D080D0A0C070C070E0C0E0C0D0A0D0A0B0F100C0C0A0C090F0C0C0A16110C +0E070B14060B07070B070D0B0D0A0D0A0C0B0C0B0C0B0F0C0F0C0F0C0E0C0E0C08060806 +0806080609070D0B0B0B060E0C0E0C0F0C0F0C0D080D0A0C070E0C0E0C0E0C0E0C13100C +0B060D0B13120F0C091310131013100C0B050C0C0E13131313040C0C0C0D0E110A110E11 +060D0D0D0C0D0E080D0D100E0C0F0E0B0D0C0C0D110F080C0C0A0C060C0C0B090C0C060B +0B0C0B0A0C0C0A0C0B100F060C0C0C0F0C0F0B0D0D0808091515100D0C0E0D0D0D0B0E0C +120C0E0E0D0E100E0F0E0B0D0C0C100D0E0E14140F110D0D140D0B0C0B090C0B0F0A0C0C +0B0C0D0C0C0C0C0A090B100B0D0C11110C0F0B0A100B0B0C090A0A06060711110C0B0B0C +0B0913160C0A0A0A0A0A0A0A000000000F0C0E0C000000000C0C0C0C0C0C0C0C0C0C0C0C +0C0C0C0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0C0B0C0B0C0B0C0B0C +0B0C0B0C0B0C0B0806080600000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000F0C0F0C0F0C0F0C0F0C +0F0C0F0C0F0C0F0C0F0C0F0C0F0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0C0B0C0B0C0B0C0B +0C000C00141E140007070809100D160F0509090D10070907090D0D0D0D0D0D0D0D0D0D09 +091010100B140E0E0E0F0D0C100F08090E0B110F100C100E0E0C0F0E140E0C0E09090910 +0D0D0C0C0A0C0C070C0D06070C06130D0C0C0C090A080D0C100C0C0B0D090D100E0E0E0D +0F100F0C0C0C0C0C0C0A0C0C0C0C060606060D0C0C0C0C0C0D0D0D0D0D0B0D0D0D0B0D0C +1414140D0D101310141010100D0D0D0F100E0D0B0B10130C0B0810100D100F0D0D100E0E +1015140D140909050510100C0C070D09090D0D0D0705091E0E0D0E0D0D08080808101010 +0F0F0F060D0D0D0D0D0D0D0D0D0D0B060E0A0E0B09100C0C0C0C0C10100B0B0B1414140D +100C080E0A0E0A0E0A0C0D070E0C0E0C0F0D100D0C0D0C0B060B060B090F0D0F0D100C0E +090E090E0A0C080C080F0D0F0D0E0B0E0B0B10100C0C0A0D0A100D0C0B17110C0F070B16 +060C07070C070E0C0E0A0E0A0D0C0D0C0D0C100C100C100C0F0D0F0D0806080608060806 +09070E0C0C0B060F0D0F0D100C100C0E090E0A0C080F0D0F0D0F0D0F0D14100C0C060E0C +1313100C091410141014100C0C050D0D0E14141414040D0D0D0E0F110B120F12060E0E0E +0D0E0F080E0E110F0D100F0C0D0C0C0E1110080C0C0A0D060D0C0C090D0C060C0C0D0C0A +0C0D0A0D0C1010060D0C0D100D100B0E0E0808091616100E0C0F0E0E0E0B0F0D130C0F0F +0E0F110F100F0C0E0C0C100E0F0E151510120E0E150E0C0C0C090C0C100A0D0D0C0C0E0D +0C0D0C0B0A0C110C0D0C12120D100B0B110C0C0D090B0A06060712120D0C0C0D0B091417 +0D0B0B0B0B0B0B0B00000000110C0F0D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E +0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0D0C0D0C0D0C0D0C0D0C0D0C0D +0C0D0C080608060000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000100C100C100C100C100C100C100C +110C110C110C110C110C0F0D0F0D0F0D0F0D0F0D0F0D0F0D0C0C0C0C0C0C0C0C0C000D00 +152015000707080A110D170F060A0A0D11080A080A0D0D0D0D0D0D0D0D0D0D0A0A111111 +0B150E0E0F100D0C1010080A0F0C1210110D110F0E0D0F0E150E0D0E0A0A0A110D0D0D0D +0B0D0D070D0D06070C06140D0D0D0D090B080D0C110C0C0B0D0A0D110E0E0F0D10110F0D +0D0D0D0D0D0B0D0D0D0D060606060D0D0D0D0D0D0D0D0D0D0D0B0D0D0D0B0D0D1515150D +0D111411151111110D0D0D0F110F0D0B0B11140D0B0811110D110F0E0E110E0E1116150D +150A0A060611110C0D080D0A0A0D0D0D08060A200E0D0E0D0D080808081111110F0F0F06 +0D0D0D0D0D0D0D0D0D0D0C060E0B0E0B0A100D0D0C0D0D11110B0B0B1515150D100D080E +0B0F0B0F0B0D0D080E0D0E0D100E100D0D0D0D0C060C060C0A100D100D110D0F090F090E +0B0D080D080F0D0F0D0E0B0E0B0C11110D0D0B0D0A110D0D0B18120D0F080C17070D0707 +0D070E0D0F0B0F0B0D0D0D0D0D0D100D100D100D100D100D08060806080608060A070F0C +0C0C06100D100D110D110D0F090E0B0D080F0D0F0D0F0D0F0D15110D0C060E0D1414110D +0A1511151115110D0C060D0D0F15151515040D0D0D0E10120B131013060E0E0F0D0E1008 +0F0E12100E11100D0E0D0D0E1211080D0D0B0D060D0D0C0A0D0D060C0C0D0C0B0D0D0B0D +0C1111060D0D0D110D110C0F0E08080A1717110F0D100E0E0E0C100D140D10100F0F1210 +11100D0F0D0D110E100F161610130E0F160F0D0D0C0A0D0D110B0D0D0C0D0F0D0D0D0D0B +0A0C120C0E0D12130D110C0B120D0D0D0A0B0B06060713130D0C0C0D0C0A15190D0B0B0B +0B0B0B0B00000000120D100D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0D0E0D0E +0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D08 +060806000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000110D110D110D110D110D110D110D120D120D +120D120D120D0F0D0F0D100D100D100D100D100D0D0C0D0C0D0C0D0C0D000D0016211600 +0808090A120E1810060A0A0E12080A080A0E0E0E0E0E0E0E0E0E0E0A0A1212120C160F0F +0F110E0D11110A0A0F0C1310110D110F0F0E100F160F0E0F0A0A0A120E0E0D0E0B0E0D08 +0E0E06080D06150E0D0E0E090B090E0D120D0D0C0E0A0E120F0F0F0E1011100D0D0D0D0D +0D0B0D0D0D0D060606060E0D0D0D0D0D0E0E0E0E0E0C0E0E0E0C0E0E1616150E0E121511 +161212120E0E0E1012100E0C0C12150D0C0912120E12100E0E120F0F1118160E160A0A06 +0612120D0E080E0A0A0E0E0E08060A210F0E0F0E0E0A0A0A0A111111101010060E0E0E0E +0E0E0E0E0E0E0C060F0B0F0C0A110D0E0D0D0E12120C0C0C1616160E110E0A0F0B0F0B0F +0B0E0E080F0D0F0D110E110E0D0E0D0C060C070C0A100E100E110D0F090F090F0B0E090E +09100E100E0F0C0F0C0C11120E0D0B0E0B110E0E0C1A130E10080C18070D08080D080F0D +0F0B0F0B0E0D0E0D0E0D110E110E110E110E110E0A060A060A060A060A080F0D0D0C0610 +0E100E110D110D0F090F0B0E09100E100E100E100E16120E0D070F0D1515110D0A161216 +1216120E0D060E0E1016161616050E0E0E0F11130C131114060F0F0F0E0F110A0F0F1310 +0E11110D0F0E0E0F13120A0E0E0B0E060E0E0D0A0E0E060D0D0E0D0B0D0E0B0E0D121206 +0E0D0E120E110C0F0F0A0A0A1918120F0E110F0F0F0C100E150E11110F10131111110D0F +0E0E120F1110171711140F0F17100D0E0D0A0E0D120C0E0E0D0E0F0E0D0E0E0C0B0D130D +0E0D13140E110D0C120D0D0E0A0C0B06060814140E0D0D0E0C0A161A0E0C0C0C0C0C0C0C +00000000120D110F000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0D0F0D0F0D0F0D0F +0D0F0D0F0D0F0D0F0D0F0D0F0D0F0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0A060A0600 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000110D110D110D110D110D110D110D120D120D120D120D +120D100E100E110F110F110F110F110F0E0D0E0D0E0D0E0D0E000E00172317000808090B +130F1911060A0A0F13080A080A0F0F0F0F0F0F0F0F0F0F0A0A1313130D17101010120F0D +12110A0A100D1311120E1210100E111017100E100A0A0A130F0F0E0E0C0E0E080E0F0608 +0E06160F0E0E0E0A0C090F0E130E0E0C0F0A0F131010100F1112110E0E0E0E0E0E0C0E0E +0E0E060606060F0E0E0E0E0E0F0F0F0F0F0C0F0F0F0D0F0E1717160F0F13161217131313 +0F0F0F1113100F0D0D13160E0D0913130F13110F0F1310101219170F170B0B060613130E +0E080F0A0A0E0E0F08060B23100F100F0F0A0A0A0A121212111111060F0F0F0F0F0F0F0F +0F0F0D06100C100C0A120E0E0E0E0E13130C0C0C1717170F120E0A100C100C100C0E0F08 +100E100E120F120F0E0F0E0D060D070D0B110F110F120E100A100A100C0E090E09110F11 +0F100C100C0D12130E0E0C0F0B120F0E0D1B140E11080D19070E08080E08100E100C100C +0F0E0F0E0F0E120E120E120E110F110F0A060A060A060A060A08100E0E0D06110F110F12 +0E120E100A100C0E09110F110F110F110F17130E0E07100E1616120E0A1713171317130E +0E060F0F1117171717050F0F0F1011140C141115061010100F10110A101013110F12110E +0F0E0E1014130A0E0E0C0F060F0E0E0B0F0E060E0E0F0E0C0E0E0C0F0E1313060F0E0F13 +0F120D10100A0A0A1A1913100E111010100D110F160E11111011131112110E100E0E1310 +121018181215101018100E0E0E0B0E0E120C0F0F0E0E100F0E0F0E0C0B0E130E0F0E1414 +0F120D0D130E0E0F0B0D0C06060815150F0E0E0F0D0B171B0F0C0C0C0C0C0C0C00000000 +130E1110000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E10 +0E100E100E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A060000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000120E120E120E120E120E120E120E130E130E130E130E130E110F +110F111011101110111011100E0E0E0E0E0E0E0E0E000F00182518000808090B140F1A11 +060B0B0F14090B090B0F0F0F0F0F0F0F0F0F0F0B0B1414140D18101011130F0E13120A0B +110D1412130E1311100F121018100F100B0B0B140F0F0E0F0D0F0E080F0F06080E06170F +0F0F0F0A0D090F0E140E0E0D0F0B0F141010110F1213120E0E0E0E0E0E0D0E0E0E0E0606 +06060F0F0F0F0F0F0F0F0F0F0F0D0F0F0F0D0F0F1818170F0F141713181414140F0F0F11 +14110F0D0D14170F0D0914140F14110F0F141010131A180F180B0B060614140E0F090F0B +0B0F0F0F09060B25100F100F0F0A0A0A0A131313121212060F0F0F0F0F0F0F0F0F0F0D06 +100D100D0B130F0F0E0F0F14140D0D0D1818180F130F0A100D110D110D0F0F09100E100E +1310130F0E0F0E0D060D070D0B120F120F130F110A110A100D0F090F09120F120F100D10 +0D0E13140F0F0C0F0C130F0F0D1C150F12090D1A080F09090F09100E110D110D0F0E0F0E +0F0E130F130F130F120F120F0A060A060A060A060B08110E0E0D06120F120F130F130F11 +0A100D0F09120F120F120F120F18140F0E07100E1717130F0B1814181418140F0E060F0F +1118181818050F0F0F1012150D151216061010110F10120A111014121013120E100F0F10 +15140A0F0F0C0F060F0F0E0B0F0F060E0E0F0E0C0F0F0C0F0E1414060F0F0F140F130E11 +100A0A0B1B1A14110F121010100E120F170F12121112141213120E110F0F141012111919 +1316101119110E0F0E0B0F0E130D0F0F0E0F110F0F0F0F0D0C0E140E0F0F15150F130E0D +140E0E0F0B0D0D06060816160F0E0E0F0E0B181C0F0D0D0D0D0D0D0D00000000130F1210 +000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E100E100E10 +0E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A06000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000130F130F130F130F130F130F130F130F130F130F130F130F120F120F1210 +12101210121012100F0E0F0E0F0E0F0E0F000F001B291B000A0A0B0C16111D14070C0C11 +160A0C0A0C111111111111111111110C0C1616160F1B12131315111015140B0C130F1714 +15101513121114121B1311130C0C0C16111110110E11100A1111070910071A111011110C +0E0B11101610100E110C1116121213111415141010101010100E10101010070707071110 +1010101011111111110F1111110F11111B1B1A1111161B151B161616111111141613110F +0F161A100F0B16161116141111161212151D1B111B0C0C0707161610110A110C0C111111 +0A070C2912111211110B0B0B0B15151514141407111111111111111111110F07120E130E +0C15111110101116160F0F0F1B1B1B1115110B120E130E130E11110A1210121015111511 +1011100F070F080F0C141114111510130C130C120E110B110B14111411130E130E0F1516 +11100E110D1511110F1F1811140A0F1D09100A0A100A1210130E130E1110111011101511 +15111511141114110B070B070B070B070C091310100F071411141115101510130C120E11 +0B14111411141114111B1611100812101B1A15100C1B161B161B161110071111131B1B1B +1B061111111214180F181419071213131113140B13131714121514101211111318160B11 +110E11071111100C111107101011100E10110E11101616071110111611150F13120B0B0C +1E1E161311141213130F14111A11141413141714151410131111161315131C1C15191213 +1C131011100D1110160E1111101113111011110E0D1017101110181811150F0F17101011 +0D0F0E0707091919111010110F0D1B20110F0F0F0F0F0F0F000000001610141200000000 +111111111111111111111111111111121012101210121012101210121012101210121012 +101210111011101110111011101110111011100B070B0700000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000015101510151015101510151015101610161016101610161014111411141214121412 +141214121110111011101110110011001D2C1D000A0A0B0D18121F15080D0D12180B0D0B +0D121212121212121212120D0D181818101D14141416121116160D0D1410181617111714 +141215141D1412140D0D0D18121211120F12110A1212090A11091C121212120C0F0B1211 +1811110F120D1218141414121617151111111111110F1111111109090909121212121212 +1212121212101212121012121D1D1C1212181D171D181818121312151815121010181C12 +100B18181218151313181414171F1C121D0D0D0808181811120A120D0D1212120B080D2C +14121412120D0D0D0D17171715151509121212121212121212121009140F140F0D161212 +11121218181010101D1D1D1216120D140F140F140F12120B141114111613161211121110 +091009100D161216121712140C140C140F120B120B15121512140F140F10171812120F12 +0E17121210221912150A101F09120A0A120A1411140F140F121112111211161216121612 +161216120D090D090D090D090D0A14111110091612161217121712140C140F120B151215 +12151215121D1812110914111D1C17120D1D181D181D181211081212151D1D1D1D061212 +12141619101A161A091414141214160D14141816131716111412121419180D12120F1209 +1212110D121209111113110F12120F12111818091212121812171014140D0D0D20201814 +12161414141016121C12161614151816171611141212181416151E1E171B14141E141112 +110E1211170F1313111214121212120F0E1118111312191A13171110181111120E100F09 +090A1B1B12111112100E1D22121010101010101000000000171216130000000012121212 +121212121212121212121214111411141114111411141114111411141114111411141112 +1112111211121112111211121112110D090D090000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000001712 +171217121712171217121712171217121712171217121512151216131613161316131613 +121112111211121112001200203120000B0B0D0F1A142217090F0F141A0C0F0C0F141414 +141414141414140F0F1A1A1A112016161619141219180D0F16121B181913191616141716 +201614160F0F0F1A141413141114130B1414090B13091F141314140E110D14131A131311 +140F141A1616161418191713131313131311131313130909090914131313131314141414 +141114141411141420201F14141A1F19201A1A1A141514171A171411111A1F13110D1A1A +141A1715151A161619221F14200F0F09091A1A13140C140F0F1414140C090F3116141614 +140D0D0D0D19191917171709141414141414141414141209161116110F1914141313141A +1A1111112020201419140D16111611161114140C16131613191519141314131209120912 +0F181418141913160E160E1611140D140D171417141611161112191A1413101410191414 +11251C14170C12220A130B0B130B16131611161114131413141319141914191418141814 +0D090D090D090D090F0B16131312091814181419131913160E1611140D17141714171417 +14201A14130A16131F1F19130F201A201A201A141309141417202020200714141416181C +111C181D091616171416180D16161B1815191813161414161C1A0D14141014091414130F +141409131314131013141014131A1A091413141A14191216160D0D0F24231A1614181616 +161218141F14181816181B181918131614141A1618172121191D161621171314130F1413 +1A111414131416141314141110131B1315131C1C151912121B1313140F121109090B1D1D +14131314120F20261411111111111111000000001A131815000000001414141414141414 +141414141414141613161316131613161316131613161316131613161316131413141314 +13141314131413141314130D090D09000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000191319131913 +19131913191319131A131A131A131A131A13171417141815181518151815181514131413 +1413141314001400213221000C0C0D0F1B152418090F0F151B0C0F0C0F15151515151515 +1515150F0F1B1B1B12211717171915131A190D0F17121C191A141A171714181721171417 +0F0F0F1B151514151115140C1515090B140920151415150E110D15141B141411150F151B +17171715191A181414141414141114141414090909091514141414141515151515121515 +1512151421212015151B201A211B1B1B151515181B171512121B2014120D1B1B151B1815 +151B17171A232015210F0F09091B1B14140C150F0F1515150C090F3217151715150D0D0D +0D1A1A1A18181809151515151515151515151309171117110F1A14141414151B1B121212 +212121151A150D17111711171115150C1714171419151A151415141209120A120F191519 +151A14170E170E1711140D140D1815181517111711131A1B15141115101A151512261D14 +180C12240B140C0C140C1714171117111514151415141A151A151A15191519150D090D09 +0D090D090F0B1714141209191519151A141A14170E1711140D1815181518151815211B14 +140A171420201A140F211B211B211B141409151518212121210715151517191D121D191E +091717171517190D17171C19151A1914161414171D1B0D14151115091514140F15150914 +1415141114151115131B1B091514151B151A1317170D0D0F25241B171419171717131915 +2014191917181C191A19141714141B17191822221A1E161722171414141015141A111515 +141417151415151210141C1415141D1D151A13121C14141510121109090B1E1E15141415 +131021271512121212121212000000001B14191600000000151515151515151515151515 +151515171417141714171417141714171417141714171417141714151415141514151415 +141514151415140D090D0900000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000001A141A141A141A141A14 +1A141A141B141B141B141B141B1418151815191619161916191619161414141414141414 +15001500253825000D0D0F111E18281B0A1111181E0D110D111818181818181818181811 +111E1E1E142519191A1D17151D1C10111A151F1C1D161D1A19171B19251917191111111E +181816171317160D17170A0D160A241716171710130F17161E1616131711171E19191A17 +1C1D1B16161616161613161616160A0A0A0A171616161616171717171814181818141817 +25252418181E241D251E1E1E1818181B1E1A1814141E2316140F1E1E181E1B18181E1919 +1D2824182511110A0A1E1E16170D1811111717180D0A11381917191717101010101D1D1D +1B1B1B0A18181818181818181818150A19131913111D17171616171E1E14141425252518 +1D171019131A131A1317180D191619161D181D17161716150A150B15111C171C171D161A +101A101913170F170F1B171B1719131913151D1E17171317121D1817142B20171B0D1528 +0C160D0D160D19161A131A131716171617161D171D171D171C171C17100A100A100A100A +110D1A1616150A1C171C171D161D161A101913170F1B171B171B171B17251E17160B1916 +24231D1611251E251E251E17160A18181B2525252508181818191C2014211C220A19191A +17191C101A191F1C181D1C1619171719201E10171713170A1717161117170A1616181613 +16171317161E1E0A1716171E171D151A1910101129291E1A171C191919151C1724171C1C +1A1B1F1C1D1C161A17171E191C1A26271D22191A261A1617161117161E13181816171A18 +1618171412161F1618162021181D15141F1616171114130A0A0D2222171616181511252B +1814141414141414000000001E161C180000000018181818181818181818181818181819 +161916191619161916191619161916191619161916191617161716171617161716171617 +161716100A100A0000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000001D161D161D161D161D161D161D16 +1E161E161E161E161E161B171B171C181C181C181C181C18171617161716171617001800 +2A402A000F0F1113221B2D1F0B13131B220F130F131B1B1B1B1B1B1B1B1B1B1313222222 +172A1D1D1D201B18212012131D17231F2119211D1D1A1F1D2A1D1A1D131313221B1B191A +161A190F1A1B0C0E190C291B191A1A1216111B19221919161B131B221D1D1D1B1F211F19 +191919191916191919190C0C0C0C1B19191919191B1B1B1B1B171B1B1B171B1A2A2A291B +1B222A212A2222221B1B1B1F221E1B1717222819171122221B221F1B1B221D1D212D291B +2A13130B0B2222191A0F1B13131A1A1B0F0B13401D1B1D1B1B121212122121211F1F1F0C +1B1B1B1B1B1B1B1B1B1B180C1D161D1613211A1A19191A22221717172A2A2A1B211A121D +161D161D161A1B0F1D191D19201B211B191B19170C170C17131F1B1F1B21191D121D121D +161A111A111F1B1F1B1D161D161821221A1A161A15211B1A1731251A1F0F172D0E190F0F +190F1D191D161D161B191B191B19211A211A211A201B201B120C120C120C120C130E1D19 +19170C1F1B1F1B211921191D121D161A111F1B1F1B1F1B1F1A2A221A190D1D192A282119 +132A222A222A221A190B1B1B1E2A2A2A2A091B1B1B1D2025172520260C1D1D1E1B1D2012 +1D1D231F1B2120191C1A1A1D2522121A1A161B0C1B1A19131B1A0C19191B1915191A151B +1923220C1B191B221B21181D1D1212132F2E221D1A201D1D1D181F1B291A20201D1F2320 +2120191D1A1A221D201E2B2C21271D1D2B1E191A19141A1922161B1B191A1D1B191B1A16 +151923191B1925251B2118172319191B1417160C0C0E26261B19191B18142A311B171717 +17171717000000002219201C000000001B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1D191D191D +191D191D191D191D191D191D191D191D191D191B191B191B191B191B191B191B191B1912 +0C120C000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000211921192119211921192119211922192219 +2219221922191F1B1F1B201C201C201C201C201C1A191A191A191A191A001B002E462E00 +10101215261D32210C15151D26111511151D1D1D1D1D1D1D1D1D1D1515262626192E1F20 +20231D1A24231215201A2722241C24201F1C221F2D201C20151515261D1D1C1D181D1B10 +1D1D0C101B0C2D1D1C1D1D1418121D1B261B1B181D151D261F1F201D2224221C1C1C1C1C +1C181B1B1B1B0C0C0C0C1D1C1C1C1C1C1D1D1D1D1D191D1D1D191D1D2E2E2D1D1D262E24 +2E2626261D1E1D2126211D1919262C1C191226261D26211E1E261F1F24312D1D2E15150C +0C26261B1C111D15151D1D1D110C15461F1D1F1D1D121212122424242222220C1D1D1D1D +1D1D1D1D1D1D1A0C1F18201815241C1C1B1C1D26261919192E2E2E1D241D121F18201820 +181D1D111F1C1F1C231E241D1B1D1B1A0C1A0E1A15221D221D241C201420141F181C121C +12221D221D201820181A24261D1C181D17241D1D1936281C22111A320F1C10101C101F1C +201820181D1B1D1B1D1B241D241D241D231D231D120C120C120C120C1510201B1B1A0C22 +1D221D241C241C20141F181C12221D221D221D221D2D261C1B0E1F1C2E2C241C152D262D +262D261C1B0C1D1D212E2E2E2E0A1D1D1D1F23281929232A0C1F20201D20231220202722 +1E24231C1F1C1C202826121C1D181D0C1D1D1B151D1D0C1B1B1D1B171C1D171D1B26250C +1D1C1D251D241A201F121215333326201C231F20201A221D2D1C23232022272324231C20 +1C1C262023212F30242A1F2030201C1C1B161D1B25181D1D1B1D201D1C1D1D19171B271B +1E1C28291D251A19271C1B1D1619180C0C102A2A1D1B1B1D1A162E361D19191919191919 +00000000251C231E000000001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1F1C1F1C1F1C1F1C1F +1C1F1C1F1C1F1C1F1C1F1C1F1C1F1C1D1B1D1B1D1B1D1B1D1B1D1B1D1B1D1B120C120C00 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000241C241C241C241C241C241C241C251C251C251C251C +251C221D221D231E231E231E231E231E1C1B1C1B1C1B1C1B1D001D00324C320012121417 +292036240D17172029121712172020202020202020202017172929291B3222222327201D +27261517231C2A25271E2723221F252231221F221717172920201E1F1A1F1E121F200F11 +1E0F31201E1F1F151A14201E291E1E1A20172029222223202527251E1E1E1E1E1E1A1E1E +1E1E0F0F0F0F201E1E1E1E1E20202020201B2020201B201F323231202029322732292929 +202020242923201B1B29301E1B1429292029242020292222273531203217170D0D29291E +1F122017171F1F20120D174C2220222020151515152727272525250F2020202020202020 +20201C0F221A221A17271F1F1E1E1F29291B1B1B32323220271F15221A231A231A1F2012 +221E221E272027201E201E1C0F1C0F1C1725202520271E23152315221A1F141F14252025 +20221A221A1C27291F1E1A201928201F1B3A2C1F25121C36101E12121E12221E231A231A +201E201E201E271F271F271F26202620150F150F150F150F1711231E1E1C0F2520252027 +1E271E2315221A1F14252025202520252031291F1E0F221E3230271E173129312931291F +1E0D202024323232320B20202022262C1B2C262D0F2222232022261523222A252027261E +221F1F222C29151F1F1A200F201F1E17201F0F1E1E201E191E1F19201E29290F201E2029 +20281C2322151517383729231F262222221C2520311F262623252A2627261E231F1F2922 +26243434272E222334231E1F1E181F1E281A20201E1F23201E201F1B191E2A1E201E2C2C +20281D1B2A1E1E20181B1A0F0F112E2E201E1E201C18323B201B1B1B1B1B1B1B00000000 +281E262100000000202020202020202020202020202020221E221E221E221E221E221E22 +1E221E221E221E221E221E201E201E201E201E201E201E201E201E150F150F0000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000271E271E271E271E271E271E271E281E281E281E281E281E2520 +2520262126212621262126211F1E1F1E1F1E1F1E1F00200036523600131315192C223A27 +0F1919222C141914192222222222222222222219192C2C2C1D362525262A221F2A291719 +251E2E282B212B2625212825352521251919192C222220221C22201322220F13200F3522 +212222171C1522202C20201C2219222C25252622282B282020202020201C202020200F0F +0F0F22212121212122222222221D2222221D222136363522222C362B362C2C2C22232227 +2C26221D1D2C34211D152C2C222C2723232C25252B3A35223619190F0F2C2C2021142219 +19222222140F19522522252222171717172B2B2B2828280F222222222222222222221E0F +251C251C192A21212021222C2C1D1D1D363636222A2217251C261C261C22221425202520 +2A232A222022201E0F1E101E19282228222B2126172617251C2115211528222822251C25 +1C1F2B2C22211C221B2B22221D3F2F2127141E3A1121131321132520261C261C22202220 +22202A222A222A2229222922170F170F170F170F19132520201E0F282228222B212B2126 +17251C21152822282228222822352C212010252036342B2119352C352C352C21200F2222 +27363636360B22222225292F1D3029310F2525262225291725252E28232B292124212125 +2F2C1721221C220F2221201922220F202023201B21221B22202C2C0F2221222C222B1F26 +251717193C3C2C2521292525251F28223521292925282E292B29212621212C2529263838 +2A32252638262021201922202B1C2323202226222122221D1B202D2023212F30232B1F1E +2D202022191E1C0F0F133131222020221F19363F221D1D1D1D1D1D1D000000002C212924 +000000002222222222222222222222222222222520252025202520252025202520252025 +2025202520252022202220222022202220222022202220170F170F000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000002B212B212B212B212B212B212B212C212C212C212C212C21282228222924 +29242924292429242120212021202120220022003A583A001414171B2F253E2A101A1A25 +2F151A151A252525252525252525251A1A2F2F2F203A2828292D25212D2C181A2820312B +2E232E2828242A28392824281A1A1A2F252523241E24231424250F14220F382523242419 +1E1725222F22221E251A252F282829252B2E2A2323232323231E232323230F0F0F0F2523 +2323232325252525251F2525252025243A3A3925252F392E3A2F2F2F2525252A2F292520 +202F372320172F2F252F2A25252F28282E3E39253A1B1B10102F2F222415251A1A242425 +15101B582825282525181818182E2E2E2A2A2A0F25252525252525252525210F281E281E +1A2D23242223242F2F1F1F1F3A3A3A252D2418281E291E291E242515282328232D262D25 +232523200F2011201B2B252B252E2328192819281E241724172A252A25281E281E212E30 +24231E251D2E2524204333242A15203E1323151523152823291E291E2523252325232D24 +2D242D242C252C25180F180F180F180F1A14282222200F2B252B252E232E232819281E24 +172A252A252A252A25392F242211282339372E231A392F392F392F24221025252A3A3A3A +3A0C252525282C321F332C350F28282925282C182828312B262E2C2327242428332F1824 +241E250F2524221B25240F222225221D23241D2522302F0F2523252F252E21292818181A +41402F28242C282828212B2538242C2C282B312C2E2C2329242430282C293C3D2D352729 +3C292324231B24232E1E2525222428252325241F1D22312225233333252E212031232325 +1B201E0F0F14353525222225211B3A44251F1F1F1F1F1F1F000000002F232C2600000000 +252525252525252525252525252525282328232823282328232823282328232823282328 +23282325232523252325232523252325232523180F180F00000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00002E232E232E232E232E232E232E232F232F232F232F232F232A252A252C262C262C26 +2C262C262422242224222422240025004366430018181A1F372B4831121E1E2B37181E18 +1E2B2B2B2B2B2B2B2B2B2B1E1E37373725432E2E2F342A2734321D1E2E2538323528352F +2E29312E422E292E1E1E1E372B2B282A232A28182A2A12172812412A292A2A1D231A2A28 +372828232B1E2B372E2E2F2A3235312828282828282328282828121212122A2929292929 +2A2A2A2A2B242B2B2B252B2A4343412B2B374335433737372B2B2B31372F2B2525374029 +251A37372B37312B2B372E2E3548422B431F1F121237372829182B1E1E2A2A2B18121F66 +2E2A2E2A2A1D1D1D1D353535313131122B2B2B2B2B2B2B2B2B2B26122E232E231E342929 +28292A37372424244343432B342A1D2E232F232F232A2B182E282E28342B342A282A2825 +122514251F322A322A35292F1D2F1D2E23291A291A312A312A2E232E232635372A29222A +21352B2A254E3A29311825481628181828182E282F232F232A282A282A28342A342A342A +322A322A1D121D121D121D121E172E28282512322A322A352935292F1D2E23291A312A31 +2A312A312A42372928142E28434035291E4237423742372928122B2B30434343430E2B2B +2B2E323A243B323D122E2E2F2A2E321D2E2E38322B3532282D29292E3A371D292A222A12 +2A2A281F2A2A1228282B2822292A222A283737122A292A372A35262F2E1D1D1E4B4A372E +29322E2E2E26322A412932322E3138323532282F2929372E33304546343E2E2F452F2829 +28202A2835232B2B282A2F2B292B2A24212838282B293B3B2B3526253828282A20252312 +12173D3D2A28282B2620434F2B24242424242424000000003629332C000000002B2B2B2B +2B2B2B2B2B2B2B2B2B2B2B2E282E282E282E282E282E282E282E282E282E282E282E282A +282A282A282A282A282A282A282A281D121D120000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000003529 +35293529352935293529352936293629362936293629312A312A332C332C332C332C332C +29282928292829282A002B004B724B001A1A1E223D305137142222303D1B221B22303030 +3030303030303022223D3D3D294B3333343A2F2B3A381F22342A3F383B2D3B34332E3733 +4A332E332222223D30302D2F272F2D1A2F2F151A2C15492F2E2F2F20271E2F2C3D2C2C27 +3022303D3333342F383B372D2D2D2D2D2D272D2D2D2D151515152F2E2E2E2E2E2F2F2F2F +302930303029302F4B4B4930303D4A3B4B3D3D3D303030373D353029293D482E291E3D3D +303D3730303D33333B504A304B222214143D3D2C2E1B3022222F2F301B142272332F332F +2F1F1F1F1F3B3B3B37373715303030303030303030302A1533273327223A2E2E2C2D2F3D +3D2929294B4B4B303A2F1F3327342734272F301B332D332D3A313A2F2D2F2D2A152A162A +22382F382F3B2E3420342033272E1E2E1E372F372F332733272A3B3D2F2E262F253B302F +2957412E371B2A51182D1B1B2D1B332D342734272F2D2F2D2F2D3A2F3A2F3A2F382F382F +1F151F151F151F15221A342C2C2A15382F382F3B2E3B2E342033272E1E372F372F372F37 +2F4A3D2E2C17332D4A483B2E224A3D4A3D4A3D2E2C143030364B4B4B4B10303030333841 +28423944153333352F33381F34333F38313B382D322E2E33413D1F2E2F262F152F2F2C22 +2F2F152C2C302C262E2F262F2C3E3D152F2E2F3D2F3B2A35331F1F2254533D342E383333 +332A382F492E383834373F383B382D342E2E3D3339354D4E3B4533354E352D2E2D232F2D +3C2730302C2F34302E302F28252C3F2C302D4243303C2B293F2D2D2F23292715151A4545 +2F2C2C302A234B583029292929292929000000003D2E3931000000003030303030303030 +30303030303030332D332D332D332D332D332D332D332D332D332D332D332D2F2D2F2D2F +2D2F2D2F2D2F2D2F2D2F2D1F151F15000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000003B2E3B2E3B2E +3B2E3B2E3B2E3B2E3D2E3D2E3D2E3D2E3D2E372F372F393139313931393139312E2C2E2C +2E2C2E2C2F003000537E53001D1D21264435593C16262635441E261E2635353535353535 +35353526264444442D5339393A403430403E22263A2E463E4132413A39333D3952393339 +26262644353532342B34311D3435181D31185135323434232B2135314431312C35263544 +39393A343E413D3232323232322B313131311818181835323232323235353535352D3535 +352D35335353513535445241534444443535353C443B352D2D444F322D21444435443C36 +36443939415951355326261616444431331E3526263434351E16267E3934393434222222 +224141413D3D3D18353535353535353535352F18392B392C2640333331323444442D2D2D +53535335403422392B3A2B3A2B34351E39323932403640343134312E182E192E263E353E +3541323A233A23392B332133213D353D35392C392C2F414434322B34294235342D614833 +3D1E2E591B321D1D321D39323A2B3A2B3431343134314034403440343E353E3522182218 +22182218261D3A31312E183E353E35413241323A23392B33213D353D353D353D34524433 +31193932524F41322652445244524433311635353C5353535312353535393E482D493F4B +1839393A34393E223A39463E36413E323833333948442233342B35183433312635341831 +3135312A32342A34314444183432344434422F3A392222265D5C443A333E3939392F3E34 +51333E3E3A3D463E413E323A333344393F3B5657414C393A563B323331273431422C3535 +31343A353235342C293146313632494A35422F2D46323135272D2B18181D4C4C35313135 +2F275361352D2D2D2D2D2D2D0000000043323F3700000000353535353535353535353535 +353535393239323932393239323932393239323932393239323932343134313431343134 +313431343134312218221800000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000041324132413241324132 +41324132433243324332433243323D353D353F373F373F373F373F373331333133313331 +340035005C8C5C002020242A4B3A6343192A2A3A4B212A212A3A3A3A3A3A3A3A3A3A3A2A +2A4B4B4B325C3F3F40473A354745272A40334E45483748403F39433F5B3F393F2A2A2A4B +3A3A373930393720393A18203618593A3839392730243A364B3636303A2A3A4B3F3F403A +4548433737373737373037373737181818183A38383838383A3A3A3A3A323A3A3A323A39 +5C5C5A3A3A4B5B485C4B4B4B3A3B3A434B413A32324B583832244B4B3A4B433B3B4B3F3F +48625A3A5C2A2A19194B4B3639213A2A2A3A3A3A21192A8C3F3A3F3A3A27272727484848 +434343183A3A3A3A3A3A3A3A3A3A34183F303F302A4738393638394B4B3232325C5C5C3A +4739273F3040304030393A213F373F37473C473A373A373318331B332A453A453A483840 +2740273F3039243924433A433A3F303F3034484B39382F3A2E493A39326B503843213363 +1E38212138213F37403040303A373A373A37473947394739453A453A2718271827182718 +2A204036363318453A453A4838483840273F303924433A433A433A433A5B4B39361C3F37 +5B5848382A5B4B5B4B5B4B3936193A3A425C5C5C5C133A3A3A3F455032514554183F3F41 +3A3F4527403F4E453C4845373E39393F504B2739392F3A183A39362A3A391836363B362E +383A2F3A364C4B183A383A4B3A4934403F27272A67654B4039453F3F3F34453A5A394545 +40444E454845374039394B3F46425F6048553F415F413739372B393749303B3B3639403B +383B39312E364D363B3851523B4935324D37373A2B323018182054543A36363B342B5C6C +3B32323232323232000000004A38463D000000003A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3F +373F373F373F373F373F373F373F373F373F373F373F373A373A373A373A373A373A373A +373A37271827180000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000004838483848384838483848384838 +4A384A384A384A384A38433A433A463D463D463D463D463D393639363936393639003A00 +649864002323272E52406C491B2D2D4052242D242D404040404040404040402D2D525252 +37644445464D3F394E4B2A2D4538544B4F3C4F46443E494463453E452D2D2D5240403C3E +343E3C233E3F1B223B1B613F3D3E3E2B34273F3B523B3B353F2D3F524444463F4B4F493C +3C3C3C3C3C343C3C3C3C1B1B1B1B3F3D3D3D3D3D3F3F3F3F403640404037403E64646240 +4052634F6452525240404049524740373752603D3727525240524940405244444F6B6240 +642E2E1B1B52523B3E24402D2D3F3F40241B2E98443F443F3F2A2A2A2A4F4F4F4949491B +40404040404040404040381B443445352D4E3D3E3B3D3E5252363636646464404E3E2A44 +34463446343E4024443C443C4D414E3F3C3F3C381B381E382E4B3F4B3F4F3D462B462B44 +343E273E27493F493F45354535394F523E3D333F324F403E3774573D4924386C203C2323 +3C23443C463446343F3C3F3C3F3C4E3E4E3E4E3E4B3F4B3F2A1B2A1B2A1B2A1B2D22453B +3B381B4B3F4B3F4F3D4F3D462B44343E27493F493F493F493F63523E3B1E443C63604F3D +2D6352635263523E3B1B4040486464646415404040444B5736584B5B1B4445463F454B2A +4545544B414F4B3C433E3E4557522A3E3E333F1B3F3E3B2E3F3E1B3B3B403B323D3F333F +3B52511B3F3D3F513F4F3946442A2A2D706E52453E4B444545394B3F613E4B4B4549544B +4F4B3C463E3E52454C4767694E5C444667473C3D3B2F3E3C503440403B3E46403D403E35 +323B543B403D5859404F3937543C3C3F2F37341B1B225B5B3F3B3B40392F647540363636 +3636363600000000513D4C4200000000404040404040404040404040404040443C443C44 +3C443C443C443C443C443C443C443C443C443C3F3C3F3C3F3C3F3C3F3C3F3C3F3C3F3C2A +1B2A1B000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000004F3D4F3D4F3D4F3D4F3D4F3D4F3D513D513D +513D513D513D493F493F4C424C424C424C424C423E3B3E3B3E3B3E3B3E00400000020100 +000007000600000300070014B706020400060204002FCDDDCD002FCDDDCD313021112111 +2521112101000600FA800500FB000600FA0080050000000201230000020305D100030007 +0027401703030202075505080F0901005D042B035D0F051F0502052F5DE4FDE45D003FED +332F3F3130010323031323353302031AAA1CD6CCCC05D1FBC90437FA2FD3000200A803D1 +0304061400030007002640150206060307010F09400902032C0040000100042C072FED33 +5D2FED5D003F3C332F3C3130010323032303230303042B842BA82B842B0614FDBD0243FD +BD024300000200C3000005C905D1001B001F00B1407140215609740570097B137B167B17 +7B1A080A091E1D160F1501671501151E0C0F1013140B1407081F1C17001801681801181E +0502011A06190662191462700B010B03110B111903040D001B011B1B0D171A011D0410B5 +131E020509040CB50F070F1318040B00140114030F0B4F0B020B08003F5D3F5D1217392F +ED17392FED1739012F332F5D1217392F2F2F5DE42FE4313087C0C0C0C0FD5D71C0C0C0C0 +C08710C0C0C0C0FD5D71C0C0C0C0C0015D01210321152103231321032313213521132135 +2113330321133303210521032105C9FEB35C0134FEA9688168FEF2688168FED6014D5CFE +CC0157698169010E698169012AFE35FEEE5E011203A4FE8887FE5B01A5FE5B01A5870178 +8701A6FE5A01A6FE5A85FE840003009BFE9704880628002C0033003A00BC408D7D087E16 +70197620702C7A36060E16012B1B16122B230D350D3C163C24352B430D4A164C24432B5A +08532053335A356B0865206529632B6A30643A171D40090B371D382E11221D2226471B18 +312D1227373400030A067F1E011E050A11470A05060F3C1F3C0221210334207F00010031 +201818063F094F09020900112D1B1E263706031E0930064006700603062F5D33ED173932 +2F5D12392FED2F5DED12392F5D002F3333ED2F2F2F5D121739ED33332F1139392F2B3130 +5D5D011406071123112E012735331E01171E0117112E01272E01353436371133111E0117 +15232E0127111E01171E0125110E0115141601342627113E010488F2C47684E855101362 +2E348B4F28441DA38EE9D17665D4480E4BA3851E461A95A3FDD46B926C02007584788101 +7C9BCD13FE960165013127C60E351113210301B1080F0829A57994CC110110FEF2022C1D +C42E4709FE51051105209CE8019D08655A5B5CFE585E5719FE620C6200050095FFE30807 +05ED000B000F001B00270033009C40720908060A0918061A0F351808170A1818171A2908 +260A2918261A460D480F4035560D580F680E13791F7625792B76310425512F034F030203 +031F5109020F030E082B51201940190219193151130A4F0C400E020C0E2E2A0016011616 +282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D123939ED33 +2F5DED2F2F5D003FED332F5DED3F3F3FED332F5DED5D3130015D01140623222635343633 +321625012309011406232226353436333216013426232206151416333236013426232206 +1514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6BAFABB59 +64665858666459049359646658586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADC +DDE0DADA01B8AC8888ADAD8787FE17AC8888ADAD878700030073FFE1061305F0000B0018 +004500E1406F090F190F3C0C3015301D352D3E3D4F1A471D4F44791C0B6A25603F7B0576 +087B0F761D7A25703E703F090508062A06371408161D142A1437153F290C2A1D26373008 +300A4008400A490C41144F1C431D46204C21412D413C5108590D5B25690566086B0F601D +1E3F0C161D20231903B8FFC0403B12173703AA190D2C093E05233502163F230A1E082C0D +3E032F00143806142F3F0C4513201D2F38041A26001E011E1E45140D1A011A1A13152673 +4610F6ED332F5DED332F5D11121739111239392FED2FED121739003F3FED3F121739ED2B +2F12393912393931305D5D015D013426232206151416173E0113010E01070E0115141633 +323601151406070123270E01232224353436373E01372E01353436373E01333216151406 +070E0107013E0137362635031871585C744F836265C2FE221F3E1F1C24AB9D5DB7016B32 +3C017AF6E573F07FD0FEED34232368356E61353532A161ADD6181D20765E01730E0E0102 +0104A75F6D7B594B744F2387FD0001D20F312A276E4592B35B02AE6060F06DFE90E08E71 +F3C55C86312F531F48926F437932303CAF862C6F2C315A20FE96286034388A30000100A4 +03D10182061400030015400A020203010F0501002C032FED5D003F332F31300103230301 +822B882B0614FDBD0243000100B5FE64030F061400150048403709010907190119072803 +28054F01480348054F075F015F076F016F077F01780278067F07120701010C7A04010830 +000100000F1F04881610F4ED332F5D3C5D003F3F3130015D012326021110123733150E01 +070602151412171E0117030FE5B1C4C4B1E551933F3C4B493E3C9A4DFE64CB01E0012D01 +2D01E0CB0A49BF7F7BFED8A4ABFEE4807BC7450000010093FE6402ED06140015004E403D +060306131503151326012603261326154701400340134715500350136003601379007602 +700370137614151201040C750001123F040104040B1F00921710F6ED332F5D3C5D003F3F +3130015D0110020723353E01373612353402272E01273533161202EDC4B1E54D9B3B3E49 +4A3D3F9351E5B1C4023CFED3FE20CB0A45C77B80011CABA401287B7FBF490ACBFE200001 +00A70276047106140011009040094F1301114009103708B8FFC040580910375B025B0554 +0B540E6B026B05640B640E7B027B05730B730E0C01060F0A0B0E08110502060C064F0450 +0402040A0F0C01040C010F131F130200110D4010011008070C4F090109100E020304050B +060D2809700C010C2F5D33ED1739322F5D1239392F5D1239395D003F335D332F5D331217 +392F332F3331305D012B2B5D01072513231305272D013705033303251705047140FE9606 +8105FE9741017DFE8341016A068107016B40FE8403776ED5FE980168D66ECFCF6ED50167 +FE99D46ECD00000100D2001B05BA04FD000B0039402303AC01045408AC0A0F070107400D +01300D400D0200AB0A800101012A05AB07400401042F5D3CE4FD5D3CE45D5D002F5D3CE4 +FD3CE4313001211123112135211133112105BAFDDFA6FDDF0221A60221023CFDDF0221A0 +0221FDDF00010093FE8E023F011D0003003540261A012A012B0235003902450048025500 +590264007400C5030C0202035604000004021A0202022F5D332F0010F4322F3130015D09 +012313023FFEE692AE011DFD71028F00000100990231030902E600030020401401420F02 +01020F054F004F055F005F05050000022F332F5D002F5DED3130012135210309FD900270 +0231B500000100FD000001EC011D00030016400C02560108002D2F013F0102012F5DED00 +3FED31302123113301ECEFEF011D0001FFE2FED0035C0614000300364025030100050116 +01250138004900440156016701770186010A011202032F02010200010000022F332F003F +2F5D31300187ED5D87C009012301035CFD33AD02CA0614F8BC07440000020089FFE1048F +05EF000B0023004140303601390B340C3B123B18341E4501490B440C4B124B18441E0C15 +4909022149030A0F21009E250F251F25021B2106982410F6ED5D10F6ED003FED3FED3130 +5D011002212002111012212012013E01353426272E01232206070E01151416171E013332 +36048FFBFEF8FEF4F7FA0109010CF7FEF92319192423795F5E7B24221916242179645E7C +02E9FE6FFE89017C018A018D017BFE7FFCB551DB9A98E04E4D4E4E4F4AEE8E9CD2534E52 +4E00000101160000043C05D6000F003A4023054606060C030E034801080F111F11020502 +1F0F010F0F0C0E20023F036F03700303032F5D33ED39322F5D2F335D003FFD323F332FED +3130290135211121353236373E0137331121043CFCDA0136FECA3F90252E35049B013098 +03E6881514194D41FAC2000100A10000049105F000200097407B501F601F020503061116 +03151124113B05380D350E3F1D3F1E391F4B05480D450E4F1D4F1E491F5F035D045D055B +0956115F195E1B5D1C5F1D5F1E6A036406651162156F1E700274117F1A7F1C7F1E25000F +100F2D082F1C300F400F060F0F0B4A1302021F4A01081F0208211616209E220F221F2202 +101002992110F6322F5D10F6322FED1239003FFD323FED332F5D31305D015D2901353E01 +373E013534262322060723353E01333204151406070E01070E0107210491FC1069D35BC0 +8E99895BD4650A47ED6FE501042B2A27694B6BE4630321D15AB459BADB7F74834042D223 +3ADDBD5593423E784969C554000100A7FFE1047C05F0003D009540700B0B052F1A0B152F +290B262F293C3C0B35143122342F4A0B45144322432F56015905590B552F6A0B662F6A3C +780B762F74357B3C1A343A443A023B3A1E491F012D112D022D2D294A1F0931020F0D1F0D +020D0D114A090A2321371E2E1621032E1E3A37040C03A03F0F3F1F3F020C9A3E10E65D10 +E611173910ED2F2F2FED003FED332F5D3F1239ED332F5D2FFD39395D31305D011E011514 +06070E012322262735331E01333236373E01353426272E012B0135333236353426272E01 +2322060723353E01333216171E0115140607151E01040E303E4A434BCB797CF04D0F55E6 +6B3F8E2C2E2D332D2D804A5A4698B52E292B623E5FD65F0A47ED6F6DA643484AAF77307C +02CD2B826766AA3F46433B23D1384A2A292C6A5150691E1F17A67F7A36511A1A14443ED1 +233B282C30885B7CB9180E0833000002004D000004B305D1000A000D00684041040D140D +240D340D440D700D060C0D480606070C0607090D4901050503070303083F0A4F0A020A0F +0F1F0F02070C04200A090D064F060101010F061F063F0603062F5D332F5D12393333ED39 +395D2F5D003F3F12392F3CFD321239393130018710FD04C0015D01231123112135013311 +3321110104B3DDC0FD3702D1B8DDFE63FDBF01A3FE5D01A3E60348FC7202A0FD60000001 +00BBFFE1048505D1002A0070404E0A081A082B083D0835113D164B0844115A0854296A08 +7A080C1D1D1A490F251F2540250325214A25061E020F0A1F0A020A0A0E4A060A2022204F +1D011D142100201D09009F2C0F2C1F2C02099B2B10E65D10E611393910ED2F5DED2F003F +ED332F5D3F1239ED2F5DFD322F31305D011406070E012322262735331E01333236373E01 +353426272E012322060711211521113E01333216171E0104854C4248C7837AE24E0E52DC +6A4785342C2D352F34955C58A33B0380FD412B5A2179B64C505801D968BE41464B3324D3 +344928322B784F4D6A20261F180C02FFAFFE740404293437AE0000020089FFE104A705ED +0022003700644044060D160D3925333133374925423143375F01560D5020502165217531 +0E1A0329491D1313174A1D030F023549030A1A2C2F122321001209009C390F391F39022F +2109983810F6ED5D10E6113910ED2F123939003FED3F1239FD322F2FED123931305D0114 +002322262726023534123736243332161715232E01232200073E01333216171E01073426 +272E01232206070E01151416171E0133323604A7FED5D96EB445565D555D580116B93B50 +290A1C713BD7FF001554A36B5F914C5859CB373F2E703D55924D020241392E6B3F91A601 +E3E3FEE14443530112C1C6013277717F0A0DBF0F1BFEF3E5333523353DBA8D5D7A2D2014 +282A16291F9EB7352C29B1000001009A0000049505D10006004F403209010A0224014801 +4B0258027903070301000120020203000002034A050302080F081F087B02030300020204 +0F00010000042F332F5D12392F12395D003F3FFD11392F3130018710ED87C0015D090123 +012135210495FD5ED602CDFCB003FB04F2FB0E0522AF0003007AFFDE049C05F300190028 +0037009440702D2B3415332234273433441541224427453350155B195A1B5A1F54225F2B +592C5F31543354376008620E6212621960236027760E76127B2C86121DA926A62F022616 +0A2F04031D4710023548030A1A200013011313002F0A0D292100162620009D390F391F39 +0220210D0D322106973810F6ED332FED5D10E411393910ED11393911332F71ED003FED3F +ED1217395D31305D01140023222435343637352E0135342433320415140607151E010334 +26232206151416171E01173E01133426272E01270E01151416333236049CFED3E4F2FEE1 +908378730114D5DF010A7E7A8C94EDA5807EA15152258B42634C1F51762F705D5A6DBA8F +92AF019FC1FF00FAC37CC93B06409872A8E0D6A565C337063CB0024F6B7F786648692912 +3A13428EFD735C6F3816262231A86A87B09600020071FFE3048F05EF0022003700644045 +0804190429043C253C2B352E4C254C2B432E58045F175D18521B70017B250F111D324914 +294914061D020A0A0E4A060A351109232100091A009E390F391F39022C211A963810F6ED +5D10E6113910ED2F3939003FFD322F3F1239ED2FED123931305D01140207060423222627 +35331E01333212370E01232226272E01353400333216171612073426272E012322061514 +16171E01333236373E01048F595A5BFEEEB9345C240A1D6A41DDFB145DA4615C954B5859 +012CD86CB845555CCA40382F6C3F90A736402D6C424EA04601030342C3FEC270727C0B0C +BF0F1B0109E9383024343DBC83E4011E434353FEFBA49BBC342D27B4A35F782D1F152A28 +15290002015A00000249045D00030007001E4010015602050656050807002D0600010101 +2F5D3CFD3C003FED3FED313001231133112311330249EFEFEFEF0340011DFBA3011D0002 +00E6FE8E0292045D00030007004C40370A050A061A051A062A052B063504390645044806 +5504590664047404C5070F01560205060607560806063F044F04020404002D000101012F +5DFD322F5D332F0010F4322F3FED3130015D01231133130123130249EFEF49FEE692AE03 +40011DFCC0FD71028F00000100FE004D058004CB0006005E401073050105045403020306 +540001002C00B8FFE240260A1837031E0A1837031F002F0002030F000100400801300840 +080204050100004001500102012F5D332F1239395D5D002F5D335D2F2B2B31304B535887 +10FD8710FD05C059015D250135011509010580FB7E0482FC72038E4D02017C0201B4FE75 +FE75000200F5016A059703AE00030007003540200554060154060F020102400901300940 +09020405012F004000020000400101012F5D332F5D1239395D5D002F5D33ED2FED313001 +213521112135210597FB5E04A2FB5E04A2030EA0FDBCA0000001010C004D058E04CB0006 +006040107C030103045405050602540101002C01B8FFE240280A1837051E0A1837051F01 +2F0102050F010101400801300840080203050100002F013001400103012F5D332F123939 +5D5D002F5D335D2F2B2B31304B53588710FD8710FD05C059015D09013509013501058EFB +7E038EFC720482024EFDFFB4018B018BB4FDFF00000200A0000003ED05EF001C00200069 +40470F221F2224140335184F024F034F0544185C0554186904691064187418741C0C0870 +090109061A1E161612341A02081F551E08202B1F1F061F7F0901090F1509172000010000 +172F332F5D1239ED2F5DED332FED003FED333FFD322F111239395D2F31305D015D011406 +070E01071523113E01373E013534262322060723353E013332160123353303ED46393892 +52B34197303A4099796CC1380A46D760D7F9FE75CCCC047362993B39642FE1013125582D +346F56716F4423CC1B2BD1FAE2D3000200B0FF1E074E05EF0042004F00D640A206020F04 +0B050A090F1B0E1C0F3F0F4016021F041C051F1B1F1C142214271F3F1F4125022C042C05 +2F1B2F1C242220272F3F2F414740444856481D0A05052759496E09650D691A6821652766 +3F664174167B1B70277439743B0F120511081247520E1440151B371404044D53082D2D2A +510E083D311E51313D020F2D012D051143122D144A123F0B010B0F512051021829140B37 +0F0020007F000300002429376B5010F6ED332F5D123939ED5D2F5DED2F33FD32322F5D00 +3F33ED2F123939ED332F2FED332FCD2B2FED331239392F31305D015D0114020721270E01 +23222635341233321617353311333E013534022726242322040706021514121716043332 +3637150E0123222427260235341237362433320417161201112E01232206151416333236 +074E514BFE481B4A8858A8C9F6AB4970419FF32A2B5B5858FEFCA5A0FEF75F606D685F63 +010A9D56B75461A859BAFEC2727380867474013EB5C401346A6A71FD8F3F64398192747B +438602978BFEFC6B743C40FEE4E3010E212130FCB64BE159A4010C606067746262FEEF9A +A5FEEF61656716188E150F7F72730142C3B9013F7575867C7070FEC5FE4002061D19B4A6 +A3A73E000002001A0000055E05D10007000A009840694009014A0645070209090A080287 +01010114000700090A0387040104140505067C067307020334300A400A700A030A090A06 +03017A050105080F0C0106070903050C002400390042005A006A0074000700006E0C0F0C +010A052B0536054D05550565057B050705640B10E65D5D10F62F5D1217395D003F5D3C3F +39392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D005D2123032103230121 +130901055ED392FD7C92C9021E01087CFEFBFEFA019FFE6105D1FC7802DBFD25000300C8 +0000052B05D100150024003300524033050C150C270C550256157F190612112C341E1E07 +1D3408032D3407081615122C0F0F0725150071350F354035021E2C14076C3410F6FD325D +10F6ED12392F1239ED003FED3FED12392FED39393130015D011406070E01232111213216 +171E0115140607151E01013426272E012B0111213236373E01133426272E012321112132 +36373E01052B544754C99BFDF001B9A3A24A524A6C5A97AEFEB324282F8663EC01005D6E +2F2F277F3647308962FEC9010682A635383401CA6FAA37423805D118262B875E6A952D08 +1FCB0204364A171B0DFE52131E1E5FFD9A5A6A25190FFDD61B24276400010073FFE50546 +05EC002A0061404A05010D09061416011B0914152515361543145B08580A580E5B105B28 +600361147002760F70141316161A3412022A2A2634060A1600712C0F2C010F2C1F2C2F2C +3F2C6F2C0520150C682B10F6ED5D5D10F63C003FED332F3FED332F3130015D250E01070E +012322242726023534123736243332161715232E01232206070E01151416171E01333236 +373305463759483D8F56A2FEF762606C68625F010DA478EF920F7BF28A71B547454D5543 +46BB688FFA6D0E6C182A17131B5B615F0125C2B801226461663A49EB675E494D4BE5969D +E2474A476262000200C8000005B205D1000E001D003A4027391249126902680D04163408 +03173407087600010F1500741F0F1F2F1F401F601F041714076C1E10F6ED5D10F6ED5D00 +3FED3FED3130015D011402070E01232111213204171612073426272E012B011133323637 +3E0105B2B19366FBCDFE880174DA01015998AACF7A7958C68ABABA8FD5596F6F02E7CBFE +B65B3F3805D13F375FFEC4D6AFF0453227FB832A3947E800000100C80000049D05D1000B +003B402309350006100602060601053502030A350108040008010800730D0F0D01060914 +016C0C10F6FD325D10F63C5D3C003FED3FED12392F71ED31302901112115211121152111 +21049DFC2B03D5FCF1030FFCF1030F05D1B0FE68B0FDD700000100C80000047F05D10009 +0034401E053502020701350803070800034F0B02030300640B0F0B01020514076C0A10F6 +FD325D10F4322F5D003F3FED12392FED313001211121152111231121047FFD0F0287FD79 +C603B70521FE5CB0FD3305D100010073FFE305A205EC00240069404907010906060E1D06 +130E210E350E4901410E510E6506650B630E740E741C0F223540230123230C0310101734 +0C021D34030A7609012210220910216C0075260F264026021A1509682510F6ED5D10F6ED +3312392F2F5D003FED3FED332F1112392F5DED3130015D25060423222427260235100021 +32041715232E01272E01232200111000213236371121352105A27AFEDF87AEFEDE666770 +01A1016C7F010999121F763945AF6FFAFEDD0130010660BF48FE7102536E385360606101 +23C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAE00000100C80000053B +05D1000B003A4023033500081008020808050A070301050809021400780D0F0D400D500D +03080314056C0C10F6FD325D10F6FD32003F3C3F3C12392F71ED31302123112111231133 +11211133053BC6FD19C6C602E7C602D9FD2705D1FDB8024800010089000002D505D1000B +002E401909043206030A033201080D6D0A080B5A0A140305025A036D0C10F6F43210FDF4 +3210E6003FFD323FFD32313029013533112335211523113302D5FDB4C3C3024CC3C39804 +A19898FB5F000001002CFFEB02EA05D100150030401C6A017C01021233150307070B3403 +09131312140077170F170106651610E65D10F6ED332F003FFD322F3FED31305D01140623 +22262735331E01333236373E01351121352102EAEFC930A0360B29783F5C6D1A1B0FFEC5 +02010183C4D4110CB90E1E2A2728744C03659E00000100CD0000057505D1000B00A74075 +190956015C09030509280938094A0968098A09D809070F010A091E0119022A012B093901 +3909350B49014909450B5C01650B72007908100202038801C8010201B3000B000809B302 +0B0A030A840A010802050A07030105080B02030A0A0F0D20003000400004500001006E0D +400D01080314056C0C10F6FD325D10F65D5D322F123939003F3C3F3C1239393130015D87 +10C0C07AFD1804C00187107AFD5D1808C0015D71722901010711231133110133010575FE +FFFDB394C6C602D3F0FD6702979EFE0705D1FCF70309FD44000100C80000047605D10005 +002040110203043501080000070F07010414016C0610F6ED5D11332F003FED3F31302901 +113311210476FC52C602E805D1FADF00000100C8000005F605D1000C00794059560A0138 +023805360A6F0260036F05600A7F0270037F05700A0B5509560A5A0B0364037403750903 +050A020309000410043404440454046A04060404070B0903010708090A0B030502140078 +0E0F0E1F0E500E030513076C0D10F6ED5D10F6ED111739003F3C3F3C12392F5D12173931 +30015D72005D722123110123011123112109012105F6C6FE6276FE65B9010E018D018001 +130503FC970369FAFD05D1FCC3033D00000100C80000053805D10009006B404E0C071F07 +34074507510761077107077606010F0102061F0115063406440653066B0160067F017006 +0B0C010406025A01550602020701080603010408060102071300780B0F0B400B02021304 +6C0A10F6ED5D10F6FD113939003F3C3F3C12393931300172715D5D005D21230111231121 +0111330538F5FD3EB901330284B90534FACC05D1FB4004C000020073FFE105DA05F00017 +002300564042040004060B0C0B1217001706190C19125701570553075F0B580D58115F13 +53171076097915021B3415022134090A18150373250F25010F251F253F25031E150F6824 +10F6ED5D5D10F6ED003FED3FED5D3130015D011612151402070E01232224272602353412 +373624333216131000232200111000333200051E5B6163595CFBA19DFEFF5A5A61605C58 +01059AA0FF47FEFCE1E3FEFD0108DEDE0107052664FEDEB8B8FEDD6165666863630120B9 +B6012167626869FD610122013BFEC5FEDEFEDBFEC9013700000200C80000049605D10010 +001F0056403D3A143D1D4B144B1D500E540F650F071934000710070207070918340A0309 +080F211F21021115200030004000700004006F210F213F2102190714096C2010F6FD325D +10F45DED5D003F3FED12392F5DED3130015D011406070E012B01112311213216171E0107 +3426272E012B0111333236373E010496453E4DD2A0C6C6019486BA48555DCE3637307B5E +C4A778962F2F27040F63A93E4D4DFDD505D12D3039AA874D72241F1BFDAD2B2F306A0002 +0073FE7705F805F000250031008640610B0C0B120418041D190C19121518161D5C0B590D +59115C1353175719571D742010551F651F751D742D0425252135030B29341E0609760979 +150215022F34090A1E130600337326151B0009061D030F1B73330F33010F331F333F3303 +2C150F683210F6ED5D5D10E61117393210EDE62F2FED003FED3F5D123939ED3FFD322F31 +305D015D010E01232226270E01232224272602353412373624333216171612151002071E +01333236373303100023220011100033320005F83C753DAED309182D159DFEFF5A5A6160 +5C5801059AA0FF595B61DFBC0464842971181BECFEFCE1E3FEFD0108DEDE0107FE930F0D +BFB204036863630120B9B60121676268696164FEDEB8FEEFFE8A4B727E190A039F012201 +3BFEC5FEDEFEDBFEC9013700000200C80000059805D10010001F007A405408011D012D01 +3A01391D450F4814481D5A01560F59146F016902600A650B7E01750B110201B300100010 +071A34400201020205183407030105080F211F2140210311150F0D010D0D102000010019 +031400056C2010F632FD322F5D39392F5DED5D003F3C3FED12392F5DED12393130018710 +7AFD18C0015D29010121112311213216171E0115140607133426272E012B011133323637 +3E010598FEFFFE0EFEE9C601A187B448515BA28E612D342B7650E9C85E8C312D2B0250FD +B005D1232D339B77A1D93701A34063221D17FDCE212D2A6D00010086FFE5050205EC0030 +009A40790B09031F00231B08141F29082818241F242F390836103813351F362A4A084510 +4913451F4A27442A5802551B551F552D6B19661B651F662B602F7B16701F7020742A742D +86122309400E103708400E103700111A28041D06212125341D020A0A0E34060A2128151A +111500211A090074320F32703202096A3110E65D10E611393910ED2FED2F003FED332F3F +ED332F1112173931302B2B5D011406070E012322242735331604333236353426272E0127 +2E013534243332041715232624232206151416171E01171E010502514950D596A1FEFF85 +0E71012882B8CD61634BAF62C6BF013CF39D0106650E55FEEB919FC1607940EC52A6A801 +A957AA3B40483C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E28 +152CB20000010000000004EE05D1000700274018010435060303080F091F094F0903005B +0114045B4F0501052F5DF4FDE45D003F3FFD323130012111231121352104EEFDECC6FDEC +04EE0521FADF0521B000000100B2FFE1052905D1001D003A4029231223183D033D094C03 +4C0977137717081C0D031534060A1B1400761F0F1F1F1F401F030F140C6B1E10F6ED5D10 +F6ED003FED3F3C31305D011406070E01232226272E01351133111416171E01333236373E +01351133052947514DCE898CD0475147C621272C976A6B962D2721C60256A2F1504C464A +4852E8A9037BFC7B798C394142414239936D038A0001001A0000055E05D10006008C4066 +470148020205040507065706860603061400000105070457048604030414030203080144 +014B02580273017C02060005027503010303020845004A0302020103040024003A005A00 +6A00740006006E080F08010F08010B032B033503550365037B030603640710E65D5D5D10 +F65D1139395D003F3F5D1239393130015D8710FD5DC08710FD5D08C0015D090121013309 +01055EFDE2FEF8FDE2D401D301D305D1FA2F05D1FAE2051E0001005C0000078D05D1000C +00BB409E470367037903030D010B020404020505080C0B1701190318051908190B290329 +08290B3B023903320434083C09330A3A0B4B02440444084C09430A4B0B55015A0255045A +0557075909550A65016A0265046A056A09650A7F02700473087C09720A7C0B2E0C140001 +000714060506030301000300090205080B03090C0602060302083B0034064B0044067A00 +75060600720E1F0E3F0E5F0E7F0E0406670D10EE5D10E65D003F3F1217395D5D31300187 +10FD8710FD015D005D09012309012301330901330901078DFE7DDFFEC7FECEDAFE76CB01 +390134C90137013705D1FA2F04D4FB2C05D1FB2A04D6FB1E04E2000100440000053805D1 +000B00C2409775017A07020A04050A1A04150A2C04230A37094D04420A58035F04580557 +09500A570B68036D0468056709600A670B7B04730A170B14000100091408070803140201 +020514060607050407010A0B0602080302080F0D01060216022602360247020509081908 +290839084808050208070A04010406020D00160026003600470050000600660D08090619 +062906390648065F060606660C10F65D3210F65D321117392F2F5D5D5D003F3F12173931 +30018710ED8710ED8710ED8710ED005D015D09022309012309013309010538FDFE0201E5 +FE6AFE60D80207FE05E40191019A05D1FD20FD0F0265FD9B02E802E9FDA3025D00010006 +000004E605D10008007C405D2C012C04280735074001400440075007680470070A160619 +08270628085606590865066A08080814000100061405040502000D050200010004000703 +040107080402050302080F0A1F0A4F0A7F0A04005B01070114045B4F057F0502052F5DF4 +ED3910E45D003F3F1217395D3130015D8710ED8710ED015D005D09011123110133090104 +E6FDF4C6FDF2DB0197019B05D1FCBCFD7302780359FD66029A000001007E0000050805D1 +000900594036030708060813082608360846085608660876080808B30202030707033506 +03020208350108040803020707040209730B0F0B0102690A10E65D10E61139392F123939 +2F003FFD322F3FFD322F31300187107AED5D1887C0290135012135211501210508FB7603 +91FC910452FC6603B0B80469B0B3FB92000100EFFE7802F706140007001C400E05520201 +0652010B030000061F012FED332F3C003FED3FED3130012111211521112102F7FDF80208 +FEA6015AFE78079C8FF9820000010046FED003C006140003003A40280301020A0119012A +0138014B01590168017801890109011200032F000100030100006002700202022F5D332F +003F2F5D31300187ED5D87C00123013303C0ADFD33B0FED00744000100ABFE7802B30614 +0007001C400E045207010352010B031F000005012F3C332FED003FED3FED313001213521 +1121352102B3FDF8015AFEA60208FE788F067E8F000100BA02AA05D205D1000600474034 +3B0133034B0145035F0150036F0160037F0170030A69027B02020102050F031F033F035F +036F0305030305030000004F000200042F335D2F003F332F5D12393931305D015D012309 +0123013305D2C6FE39FE3AC5024D7E02AC0273FD8B0327000001FFFCFED4051AFF4C0003 +0011B6015002000005022F11332F002FED313001213521051AFAE2051EFED47800010154 +051602FA068C000300244016480159026902790204500360037003030303010000022F33 +2F002F332F5D3130015D0123013302FA95FEEFF30516017600020068FFE1041D04780026 +0033007A40540C0A0423190A152304590E511E5C2C690E601D6F2D7B0A7A14701D7B2C0A +0208283D3011401102111120084F1C011C1C183F20043141080A01080F1D011D1127021A +001D0B0091350F351F353F35032E1B0B853410F6ED5D10E6113910FD32322F5D003F3FED +3FED332F5D1112392F5DED123931305D015D2123350E01070E0123222635343637362437 +353426272E012322060723353E01333216171E011503110E01070E01151416333236041D +BB1955282F7A5297D26D6566011EA42D2A28703D4AB6610A37D06576AF403F42BB56E944 +5164747763A477113D12171FC89B7F9D2D2D20081D40541817102725BF0F24272F2E926C +FE1D013705141317615560614D00000200B9FFE10490061400130020005140393402350F +3B1530204402450F4B154020571267127F087B1C0C0E0906174211040C011E40060A0B08 +141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED3F3FED123939 +31305D011406070E012322262707231133113E0133321203342623220607111E01333236 +04904F4347AA665F8E450CB0BC4FB26FC6E5C2849352A8485073499CB102378CE04C4F4F +2D26340614FDD44153FED0FEE6C8CF4738FD80241CCD00010069FFE703F3047700210057 +40410F234F23022B01220E2A1624183A01350E3A16351849014F0A440E4F164118590155 +0E6901650E7A01730E131010143F0C0421211A3F03090F008D23171B09852210F6ED10F6 +3C003FED332F3FED332F31305D015D250E01232226272E013510003332161715232E0123 +2206151416333236373E01373303F35EA95F79CA484950012DF760B94D0A56B757A0B9B5 +A439762F2948150A462D32474848DC93011201383627D14348D7D0CAD91E18152F110002 +006CFFE10443061400130020004B40333C1A301C38204F1A421C48205806680670100912 +0102110518410E0401081E42050A1114021A0092221F223F22021B1B08852110F6ED5D10 +F6FD3232003FED3F3FED1239393F31305D2123350E01232202113436373E013332161711 +3303112E012322061514163332360443BC51B067C8EB514544B56158884BBCBC4C78479E +B0889650A475464E013401118EDE4E4C50252701E4FAFF0281221ADCCAC7CF470002006A +FFE60460047C0018001F005A404026042B0D30043B0D3C1E43044B0D4B1E5A0D50166A0D +6017780D7A1E0E013C1F1F0F1C3D15040B0B073F0F090C0C191A008F210F211F213F2103 +1F011B12852010F6FD325D10F4ED332F003FED332F3FED12392FED31305D01211416171E +013332363733150E0123200011100033321215272E01232206070460FCC93E36348F5672 +E7310A5FC66DFEEAFEC8012BF4E2F5B701939697B30C021B67993130305B2CCD2836012D +011501120142FEF8F32A94A2B2840001004400000312061E0018004B402D081439147505 +030000043F15000B0E3E0811050D080009400902090F090E00080B1A0F11000E400D1037 +0E891910F62B323232FD322F12392F2F5D003F3F33FD323FFD322F3130015D01232E0123 +22061D012115211123112335333534363332161703120A1F6426796D0153FEB3BC7F7FC6 +BB3F652A055E09136B8C269EFC4103BF9E25C7D50C080002006CFE590443047C00230030 +006E404E3D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C05 +702011220512211528401E0407070B40030D2E4115070F0601062124121A000618009232 +1F323F32022B1B18853110F4ED5D10E4113910FD32322F5D003FED3FED332F3FED123939 +3F31305D2510002122262735331E01333236373E013D010E01232202113436373E013332 +1617373303112E012322061514163332360443FEFEFEF459A9520A2EC864607E23231E55 +9B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A57FFEE4FEF61917C012352E29 +276E446644430121010790D14C474F272830FCD60261221DD0C6BCC23F00000100B90000 +045F061400160037402203151615751503100D084213040E01010D08021A0091181F1860 +1802100B1A0D881710F6FD325D10F6ED003F3C3F3FED123931305D2123113426272E0123 +22060711231133113E0133321615045FBC1218195E4B4DA84DBCBC58BC63B5BE027C4D87 +262A294C3BFCBE0614FDCD4952DACD00000200AF0000018305DB000300070030401E0144 +02400B0D370203060505087F090109920060041A01607F050105880810F65DE4FDE4E65D +003F3F3F2BED313001233533032311330183D4D40CBCBC0518C3FA25045D0002FFC2FE59 +021505DB000300190049402E0A051C0502014402400B0D370203163E19050B0B0F40070D +4F1701177F0A010A0160161A00600A1770190119921B10F65D3232E4FDE42F5D2F5D003F +FD322F3FED3F2BED31305D012335330314062322262735331E01333236373E0135112335 +210215D4D40CC8A828832C0A1C5F2D485816160DE901A50518C3FA0AC4C8100CB30B1C28 +2828715103849E00000100C1000004AF0614000B007D40512802D801DB090309010F0D1F +011D021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A +0802050A0507010105080B02600A700A020A0A00000D200D400D0208031A05890C10F6FD +325D11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0 +015D7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B0614FC +1A022FFDFC00000100BB0000017706140003001E4011020101087F05010592001A7F0101 +01880410F65DFDE65D003F3F3130212311330177BCBC0614000100B900000717047C002B +006A4048032403291324132944204426B72A07B62501251F1D1C0817422822041D050110 +1C08402D011F2D302D402D502D702D05001A016110250B1C0F1A101F1A1A1C611F104010 +801003102F5DF4FD3210FD11393910F4ED5D5D003F3C3C3F3F3CFD32111239395D31305D +2123113426272E01232206071E01151123113426272E012322060711231133153E013332 +16173E01333216150717BC0D151756514F9E4F0304BC0D151756514D9B4DBCBC58AF6372 +9F2772BC6BB8AF027C4886282B2C4F3D173D1EFD35027C4A85282B2B4C3BFCBE045D7C49 +5260556055DFC800000100B90000045F047C00160037402203151615751503100D084213 +040E05010D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3C3F3FED +123931305D2123113426272E012322060711231133153E0133321615045FBC1218195E4B +4DA84DBCBC58BC63B5BE027C4D87262A294C3BFCBE045D7C4952DACD0002006AFFE10471 +047C000B0017003E402C3B0E341034143B164B0E441044144B16080F3F0904153F030A0C +1B0090190F191F193F196F1904121B06851810F6ED5D10F6ED003FED3FED3130015D0110 +002322001110003332000334262322061514163332360471FEE8EBEDFEE90117EDEB0118 +C2AA9799A9AA9896AB022EFEEFFEC4013C01110111013DFEC3FEEFD9D3D3D9D2D9D70002 +00B9FE640490047C00130020004D4035320239153220430249154220561267127E087C1C +0A0E0906174211040C051E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD +32325D10F4ED003F3FED3F3FED12393931305D011406070E012322262711231133153E01 +33321203342623220607111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F +51A44B5073499DB0023C88E14E4A512628FE2C05F9753F55FECFFEECCAC84639FD87241A +D4000002006CFE640443047C00130020004B40333B033D1A301C3A204C034B1A461C4A20 +701009120502110418400E04010C1E4205091114021A0092221F223F22021B1B08852110 +F6ED5D10F4FD3232003FED3F3FED1239393F31305D0123110E01232202113436373E0133 +321617373303112E012322061514163332360443BC57AC64C7ED534442B2635A8B480CB0 +BC4E7846A3AA899352A4FE64021A4B490133010E90DD4B4950282730FCBF0278231CDDC2 +C4D34700000100B900000372045D001200384021000D100D200D030C090F000004430A0F +05090800001440147014020C071A09881310F6FD325D11332F003F3F3CFD322F11123931 +305D01232E012322060711231133153E013332161703720A2A4F3657A24BBCBC70AB5931 +2C2C03900A094D3DFCE7045DA55A4B0507000001006EFFE503D704780033009340710602 +091B1502191B26092A2432093C2442094C245E055D165321562F54326F056C166020642F +6532147A057F1174207928742B8A01880D851A872894019A1B0B000E1829041E03802201 +2222263E1E0407070B3E030921291B180E1B00211807008E350F351F353F355F357F3505 +07863410E65D10E611393910ED2FED2F003FED332F3FED332F5D1112173931305D015D01 +14062322262735331E0133323635342726272E01272E01353436373E013332161715232E +0123220615141716171E011716171603D7FDDB7CCF460A59DA647C8C26266C288135937B +393A38AD6B64CD440A48CE63678E2B2A5E34812B834747014299C43B23D3434F50564222 +221809180E27976E457A302F373123C935494F4E452323160C180A1E494A0001003EFFEA +02FD059E001B0048402C0C051A052B05030B10073E0D0B0A051B1B173F03094F1D7F1D02 +0E008C1D080D101A0A0807400D103707881C10F62B3232FD322F10F6325D003FFD322F3F +3333FD322F31305D250E012322263511233533113311211521111416171E013332363733 +02FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A0A0E12B8CB02529E0141FEBF9E +FE0358632B28251B0900000100B1FFE10457045D0016003740220B0619077A0703020515 +09051142050A010814021A0092181F186018020B1A08871710F6ED5D10F6FD32003F3FED +3F3C123931305D2123350E01232226351133111416171E013332363711330457BC5FAE69 +B0C4BC101A1B565249AD4BBC7C4B50D7D002D5FD8455792B2C284C3B03420001003D0000 +047F045D000600864041260429063604390646044906062905390540055105600505061A +000100041A03020328002703380037034A00470375017A02080005027503010305020802 +010300B8FFC0401E0910370C001C006A007A0004008D080F080103031303650375030403 +820710E65D5D10F45D2B113939003F3F5D1239393130015D8710FD8710FD005D015D0901 +2301330901047FFE3CBDFE3FCC015A0157045DFBA3045DFC870379000001005600000636 +045D000C0088406D0D031D032C012A0229032504260524082B0B34013B0544014B055701 +58045905570B6D02620464086A09640A6B0B79017D02720474087B09730A7A0B1E0C1A00 +0100071A060506000910090205080B03090C0602060502080F061F062F0603008E0E100E +3F0E6F0E030006830D10F6325D10E65D003F3F1217395D3130018710FD8710FD015D0901 +23090123013313013301130636FEDDAEFEE1FEE3ADFEDAC4CD01179B011EC2045DFBA303 +5DFCA3045DFC9F0361FC9F0361000001003C00000480045D000B00DA408C090B1B011403 +14071B09270327073C003B0134033404340634073B093D0A4C004B014403440444064407 +4B094D0A5A0155035A0555075A09550B6F016003690560076F09660B230F0200083F0230 +084F0240087D02700808091A0A0B0A071A060506011A000B00031A0405040102050B0809 +06047A047506020605040809060106020D010502080B04040A00B8FFC0401C0910370600 +01008D0D0F0D010F0D1F0D400D5F0D040602040104820C10F65D325D5D10F65D2B321117 +395D2F5D003F3F5D1217393130018710ED8710ED8710ED8710ED005D015D212309012309 +0133090133010480EDFEC3FEC1DB01B4FE50ED013B013CDCFE4901ADFE53022D0230FE5A +01A6FDDA0001003DFE64047F045D0007008C404104063406440650066006700606090307 +0519031705460149035800570179030902071A000100051A040304490046040200030204 +05020C02680101010203030400B8FFC040220910370C001C004A006A007A0005008D090F +0901030413044504650475040504820810E45D5D10F65D2B1117395D2F003F3F12393931 +30015D8710FD8710FDC0015D005D0901231301330901047FFD74C9D0FE43CC0157015A04 +5DFA0701D20427FCC4033C000001005D000003E3045D00090056403A15083A0335084A03 +45085C03540860087F0370080A0707033E06050202083E01080408030207070402098E0B +1F0B3F0B5F0B6F0B7F0B0502840A10E65D10E41139392F1239392F003FFD322F3FFD322F +3130015D2901350121352115012103E3FC7A028BFD830367FD72029F8B03359D86FCC800 +000100ADFE78045906140025005640382F1D3A074A07562367237523063A1D4A1D021D1C +09533F0A4F0A020A0A01145112012451010B140F00400002000919201F0E000940050105 +2F5D33333CFD3C2F2F5D3C003FED3FED12392F5DFD39395D3130015D012322263D013426 +2B01353332363D0134363B01152322061D01140607151E011D0114163B01045996B3DFA6 +AB3333ABA6DFB39672887B9A89899A7B8872FE78C7BC95A9BF9CBFA995BCC78A7E8CAF8B +BD371837BD8BAF8C7E000001017AFE78022806140003001B400F0F054F05020201010B00 +1F4F0101012F5DED003F3F3130015D012311330228AEAEFE78079C00000100BBFE780467 +0614002500544034211235023112400240127A0C06131200533F254F25022525091B511C +010A51090B1B0009010900170E1F050509004F200120202710D62F5D33333C10FD3C2F2F +5D3C003FED3FED12392F5DFD39393130015D012322061D0114062B01353332363D013436 +37352E013D0134262B01353332161D0114163B01046733ABA6DFB39672887B9A89899A7B +887296B3DFA6AB3301F8BFA995BCC78A7E8CAF8BBD371837BD8BAF8C7E8AC7BC95A9BF00 +000100BB018B05D1039F001F0056404206030609091309191908170A1518191A3B083418 +4B0844185A035A0A550D541B5B1D60056E14611875047A147518170F1C54060C54061F16 +1F2A000001000F2A00102F33ED2F5DED002F3333ED2FED333130015D010E01070E012322 +26272E0123220607233E01373E01333216171E013332363705D102292D2E82645E925466 +5C325E6409A702292C2B8A605D935550663D676103039F63C04B4D584F667D40AFC464BD +4D4A5B4D68625BCAA900FFFF001A0000055E07500236002400000117008E002F0175001A +40130320113011401170118011050200110E060725012B355D350003001A0000055E0801 +0012001E002100DF40442B2040205A18551A501E55206918651A651E09180B170D4A0646 +125906561278027703082020211F02870101011400120020210387040104140505067B06 +74120216510CB8FFC0405D0D10370C033470210121212006120405001C011C0301050813 +114F0F500F600F030F191140095F096F0903090F230106090F1204050C00240039004200 +5A006A0074000700006E230F23010A052B0536054D05550565057B050705642210E65D5D +10F62F5D1217395D2F5DED2F5DED003F3C3F5D1217392F5DED2F2BED3130015D8710FD5D +C0C0C08710FD5DC0C008C0015D005D212303210323012E01353436333216151406071334 +26232206151416333236130901055ED394FD8094C90207596BCC9293CB69592C72565672 +7355567236FEFEFEFD019FFE61057F2C9F668FC2C28F64A32A012F56737455567373FBF1 +02CBFD3500010073FE59054605EC00410097406F0A20032B1C20152B250B222B3402330B +342B4302430B452B5D1F582158255A275E3F6102602B70027626702B160B0B1B0B022D2D +313429021A061D41413D341D0A101014320C0D0F0F172A0009100920090309091D234371 +2C0071430F43010F431F432F433F436F4305371523684210F6ED5D5D10F43CE41239392F +5DED332F003FFD322F3FED332F1239393FED332F31305D015D250E01070E01071E011514 +062322262735331E01333236353426270E01232224272602353412373624333216171523 +2E01232206070E01151416171E01333236373305463759480B1A120203BB9326772D091A +5B326A620202132B12A2FEF762606C68625F010DA478EF920F7BF28A71B547454D554346 +BB688FFA6D0E6C182A17030903133317A2AC0E0CA20A1C5056132D1402025B615F0125C2 +B801226461663A49EB675E494D4BE5969DE2474A47626200FFFF00C80000049D08010236 +002800000117008D001E0175000BB601000D0D020325012B3500FFFF00C80000053807C8 +023600310000011700D7008C0175000BB60100170A050925012B3500FFFF0070FFE105D7 +075002360032FD000117008E009601750018401103002930295029702904020029240F03 +25012B355D35FFFF00B2FFE1052907500236003800000117008E00620175001840110210 +24202440246024040100241E0D1D25012B355D35FFFF0068FFE1041D068C023600440000 +0116008DE300000BB6020036371D2625012B3500FFFF0068FFE1041D068C023600440000 +01160043E800000BB6020035371D2325012B3500FFFF0068FFE1041D068C023600440000 +011600D6E000000BB6020038341D2625012B3500FFFF0068FFE1041D05DB023600440000 +0116008EE000001E4016030F39703902020039103920394039040039341D2625012B5D35 +5D35FFFF0068FFE1041D0653023600440000011600D7E200000BB6020041341D2525012B +3500FFFF0068FFE1041D07B1023600440000011600DBD300000DB70302003A341D262501 +2B35350000010069FE5903F3047700380080405B0F3A4F3A022A012A0726252A2D252F3B +01390735253B2D342F4B014F2140254F2D402F590153256C0166257A017525150B081B08 +0227272B3F230417031A3838313F1A090D0D113D090D0C0C142A06061A2026008D3A2E1B +20853910F6ED10F63C1139392FED332F003FFD322F3FED332F1239393FED332F31305D5D +015D250E01071E011514062322262735331E01333236353426270E01232226272E013510 +003332161715232E01232206151416333236373E01373303F3214D1D0305B79225742D09 +1A583268620302101D1979CA484950012DF760B94D0A56B757A0B9B5A439762F2948150A +460F1F0913391CA2AC0E0CA00A1A4E58162E140204474848DC93011201383627D14348D7 +D0CAD91E18152F11FFFF006AFFE60460068C0236004800000116008DFD00000BB6020022 +21121825012B3500FFFF006AFFE60460068C02360048000001160043FD00000BB6020021 +20121825012B3500FFFF006AFFE60460068C023600480000011600D6F900000BB6020024 +20120025012B3500FFFF006AFFE6046005DB0236004800000116008EF9000014400D0330 +2560250202002520120025012B355D35FFFF00A000000246068C023600D500000117008D +FE830000000BB601000505020325012B3500FFFFFFEB00000191068C023600D500000117 +0043FE970000000BB601000505020325012B35000002FFF50000023C068C0006000A003D +40247A0174037A057406040201030505030905080800047F0C01000C92071A047F080108 +880B10FD5D32FDE4335D2F2F003F3F2F332F1239393130015D01230B0123133303231133 +023C978F8E93B2E313BCBC0511010BFEF5017BF974045D00000300050000022D05DB0003 +0007000B0041402702010744600401040A050908011A7F000100041A700501057F0D0100 +0D92081A057F090109880C10F65D32FDE4335D2F5DED2F5DED003F3F2F5DED3939313001 +2335330523353313231133022DBDBDFE95BDBDB5BCBC0518C3C3C3FA25045D00FFFF00B9 +0000045F0653023600510000011600D70700000BB6010024170E1525012B3500FFFF006A +FFE10471068C0236005200000116008DE200000BB602001919060025012B3500FFFF006A +FFE10471068C02360052000001160043E200000BB602001919060025012B3500FFFF006A +FFE10471068C023600520000011600D6E200000BB602001C18060025012B3500FFFF006A +FFE1047105DB0236005200000116008EE2000014400D03301D501D0202001D1806002501 +2B355D35FFFF006AFFE104710653023600520000011600D7E200000BB602002518060025 +012B3500FFFF00B1FFE10457068C0236005800000116008DEE00000BB601001918101225 +012B3500FFFF00B1FFE10457068C023600580000011600430200000BB601001818091625 +012B3500FFFF00B1FFE10457068C023600580000011600D6F800000BB601001B17091625 +012B3500FFFF00B1FFE1045705DB0236005800000116008EFD000016400F02301C501C60 +1C0301001C17091625012B355D35000100BB0087045B0614000B003C4026070A0B000104 +0605AA0606080308010F0D1F0D02006302040708090A010602280563700301032F5DE6ED +173910E65D003F2F12392FED17393130012513231305350503330325045BFE6D058405FE +6D01930584050193040A05FC780388058105018EFE7205000002009A02CC03BC05EC000B +0017002840186A0F65157A0F751504155403030F5409020C2A0000122A062FED332FED00 +3FED332FED5D313001140623222635343633321607342623220615141633323603BCE8A9 +A9E8E8A9AAE7A58666668689636686045CA8E8E7A9A8E8E8A8668B8B6668898C0002009F +FE97046005C3001C0023007B40553C0A3F2030224B0A4F2040225A0153116C0164117901 +7611791F76230E1D1E180D3F134F130213130D1747060C030F0505201C301C401C031C18 +471C05030F251F2502130021202F090109001D0C0F1804031E09062F33ED1739322F5DED +2F3C5D002F3333ED2F5D2F3F123939ED33332F5D2F11393931305D250E01071123112600 +353400371133111E011715232E0127113E01373305110E01151416046047B46876E3FEFB +010BDD7668BA410B37AE7378AD330BFE2787A2984A1E2F03FE9D0167150120FAF2012B16 +0163FEA1032C1FCB2C5209FCB90A552985034214D2BDB5D2000100890000048B05EE0021 +00774050201D3415321D03031E151E251E410E530E5B16630E7302730E091B1805460F08 +1F084F0803081010144908010C0202204A01080F231F23021F02181B20080519060F0605 +190F040220004000020000022F332F5D1217392F2F2F2F33FD3211395D003FFD323F1239 +ED332F2F5DED393931305D015D2901353E01352335331134123332161715232E01232206 +1511211521151406071521048BFBFE7667B0B0FDCD6998400A3E98568C8B019FFE617C62 +0345CF20BDB98A0136C801012211CE2A30A590FEDD8A3D7EBB390B00000200ACFE7F0468 +05EF0043006100A9407F05050A2714051D273E2030424D104F20433240425C105E165132 +63096E106A2B63321152055F205F255F275B2D5B3950426B1F6A20653D654061427C097C +10742B7431107B50745F0218075F50293A062F0D3333373F2F021111153F0F0D1F0D020D +181B5F045607333A1B50262911471A1129330704221000010000561A222FED332F5D1217 +39ED2F2F3939ED2F2F123939ED002F5DFD322F3FFD322F111217395D31305D015D011406 +07151E01151406070E012322262735331E01333236353426272E01272627263534363735 +2E01353436373E013332161715232E01232206151416171E0117161716033E0135342627 +2E01272E01270E01070E01151416171E01171E01173E01046876636158424148C27C57A7 +5C0A4FB46C86A2272D299052D6525372666554404340C78057A85B0A3ABD797FA92B2B2B +845BC85A59F71C1E211D1C4E2C275D46123E1618261F1D1B512C266043144202596AA237 +072E915A4D8A3238361B1FC2253261573841191725143451518162A93907309259518334 +323A1C1DC21B3C5C573947171725152E4F4FFEAB21413A334617181F0C0B1514092D181A +563132461817200B0A18130B2F00000100B9012103A4040B000B0013B703030900000688 +0C10F6322F002F332F313001140623222635343633321603A4DC9A9ADBDB9A9ADC02969A +DBDB9A9ADBDB00010089FE95045205D1000D003B40245308610802010F0501054F060106 +0602AA0C030F0F1F0F020529040402290F0D010D0D092F332F5DED332FED5D003FED332F +5D2F5D3C31305D012311231123112E013534243321045294D695CEFC0104F301D2FE9506 +BAF94603BC05F8CCCFE8000100B9FFE8048D061E0036006D4048052E152E2E132C343913 +39343736490E4636532166217B1B0C3433143D151E3C15032D0007070B3D03092608181B +303400140C061C060206111B000614300325009038251A26883710F6ED10E611173910ED +2F5D2F12392FED003F3FFD322F3F1239ED2FED39393130015D0114002322262735331E01 +333236373E0135342623353236353426272E01232206070E01151123113436373E013332 +1615140607151E01048DFEF1DB2C73240A2A63384A6E21231FD3C69D9A161E1B583D395C +28252DBC48403CB35EB7E58E71A4BE01E1D6FEDD0F0DA518123A31347F4CA6A996778123 +421F1D231D2724845FFBC104387CB73E3A3BAE9770B2200925DF0004009FFF2E076105F0 +000B00170028003700AD407A7C0D7C11701370177A1A74277336070D1A04231E1A122314 +282C0E231022142C16211824233F1936234919472252186B0E641064146B166A19151A19 +2A182818292A25252818311B2A001D101D4F1D0318001D01901D011D0CAD1D06000012AD +06281AAA31311E19401D011D30AA1E15501D1E0903030F500902003FED332F123939ED2F +ED2F5D3C12392FED39012FED332F1239ED2F5D71335DFD3C2F39392FED8710FDC0313001 +5D005D011000212000111000212000031000212000111000212000072301231123112132 +16171E0115140607373426272E012B0111333236373E010761FE05FE9AFE9AFE0501FB01 +66016601FB74FE49FECAFECAFE4901B70136013601B7C0DFFEB5A2A501385E7A3B3F3B71 +63201C211F4635957F3E5A1D1F19028FFE9AFE0501FB0166016601FBFE05FE9A013601BC +FE44FECAFECAFE4401BC820163FE9D0393101F226149618126FD243812110AFECB131719 +3C000003009FFF2E076105F0000B001700330096406D7C0D7C117013701779197223062C +0E231022142C1633183324332A332E44184124442A442E54185424542A542E6B0E641064 +146B1662186A1D642417257F1801182C2A181E0CAD1E06000012AD06103320330233332F +521B1F252F2502252529522115501B210903030F500902003FED332F123939ED2FFD322F +5D2FFD322F5D012FED332F1239ED2F33ED2F5D3C3130015D005D01100021200011100021 +2000031000212000111000212000050E012322243534003332161715232E012322061514 +1633323637330761FE05FE9AFE9AFE0501FB0166016601FB74FE49FECAFECAFE4901B701 +36013601B7FE72569F4EE3FEF8010DDE59AC3E1036A9598E9F9994539D4810028FFE9AFE +0501FB0166016601FBFE05FE9A013601BCFE44FECAFECAFE4401BC572727F6EAE1010230 +1CB52846ABA59FAE3A34000200AA031106F105D1000E0016005240217B0478057A060379 +0C010B0C0D01030406080815121210135015030D280B0F370BB8FFC440110B0F37022800 +000728090FAE102814AE132FE4FDE42FED332FED2B2B003FFD3C332F1217395D3130005D +0123112303230323112311331B0133052311231123352106F17C14ED4FEF197BEEBFBFE3 +FC02E57FE5024903110269FE3D01CAFD9002C0FE82017E75FDB5024B75000001021D0516 +03C3068C000300244016470156006600760004500360037003030303010000022F332F00 +2F332F5D3130015D0901231303C3FEEF95B3068CFE8A01760002015A051803BE05DB0003 +000700264015020644016005010500140F010101041401000501052F5D33ED2F5DED002F +5D3CFD3C3130012335330523353303BEC7C7FE63C7C70518C3C3C300000100F5001B0597 +04FD0013008840541612010C0B080704030E111201020D80029002A002B0020402290303 +0C030D030112045307110E08530D070F0B010B40150130154015020407080B0112110E08 +030D0309030D1004062F004000020000400601062F5D332F5D1217392F2F1217395D5D00 +2F5D3333ED39392FED3939322F2F3130018710FD5D87C0C0C0C010C0C0C0C0C0015D0121 +0323132135211321352113330321152103210597FDA0689968FE5701DA54FDD2025E6999 +6901ABFE2453022F016AFEB1014F9C010C9C014FFEB19CFEF4000002000E0000076D05D1 +000F00130079404F04030B061B041B052A042B053B064A044A054D064D120B1213030414 +05050675057C06020A100E140115730601080B0440000100000F05010564140334130D35 +0A0A13050835123406030E35010508003F3CED3FEDED1239392FED2FED300110F65D322F +5D1739E62FED393931305D8710FDC0C0C0015D2901112103230121152111211521112101 +112303076DFC50FDF4D4CF0252050DFD1302EDFD1302EDFC50DBEF022CFDD405D1B0FE68 +B0FDD702230259FDA70000030073FF6E05DA064B001D002A003700A640850203000B0A0D +0C120F1A051C1103190D1F121F1A151C550254045A08590D59115B135017551C792A140B +090318061B1F0A1F0B1118161B2609272F75037F097F0A7F0B7F0C791270187019701A70 +1B132A2F1E2E043221340C09181B040615023234060A2A2F1E2E04272B15000C09181B04 +0F0073390F39010F391F393F390327150F683810F6ED5D5D10E411173910ED111739003F +ED3F121739FD11173931305D015D011402070E0123222627072313260235341237362433 +3216173733031612012E01232206070E011514161701342627011E01333236373E0105DA +63595CFBA173C94F9F84CD656D605C5801059A76C2528E84BC656FFE6F3990596EB44240 +453B3A035C3C3AFD683C91596EB73E434202E8B8FEDD6165663A37E4012664012CC4B601 +216762683737C9FEF464FED7013A2E2D4D4E4CE5938CE04C01B88BE44BFC432D2E504C52 +E100000300A1009D075F047C00170026003500724054051608311526192F2923262C3B34 +441C4B34510256075F0A5F0E5A1351165918553063026D0A631669236C24642C642D1821 +AF33AF0306120F09092AAF1BAF150F7B18743002272A0030180C0099371E2A0C993610F6 +ED10E411393910ED5D002F3CEDED332F1239393CEDED3130015D011402232226270E0123 +2202353412333216173E01333212052E01232206151416333236373E0125342623220607 +0E01071E01333236075FF5CF85DE454FD38FBFE2FACA86DE444FD58DBFE2FC683FB8608A +9C7F776E7C392225030C807658814A1E33133CBB608A9C0297EFFEF599929794010FD6EE +010C9A919695FEF1947575A79A85A6615E39470186A5477830672C7377A6000100D700B3 +05B505B6000F004540290E03540F010101010D045408AC0A070C401101301140110200AB +0A800D010D2A040105AB07400401042F5D3CF43C10FD5D3CF45D5D3C002F3CE4FD3C322F +5DFD3C31302521352111213521113311211521112105B5FB22021CFDE4021CA6021CFDE4 +021CB39E01A69E0221FDDF9EFE5A000200FE0000058005710006000A0061401605045403 +020306540001002C26012902360139020400B8FFE240240B1837031E0B18370954080303 +00400C01300C400C020504090A040100004001500102012F5D332F1217395D5D002F332F +2FED2B2B31305D4B53588710FD8710FD05C05909013501150901112135210580FB7E0482 +FC870379FB7E0482012F01E37C01E3B7FE96FE96FE1AA0000002010C0000058E05710006 +000A0063401603045405050602540101002C26002906360039060401B8FFE240260B1837 +051E0B1837095408050501400C01300C400C020503090A040100002F013001400103012F +5D332F1217395D5D002F332F2FED2B2B31305D4B53588710FD8710FD05C0590901350901 +350111213521058EFB7E0379FC870482FB7E04820312FE1DB7016A016AB7FE1DFC72A000 +0001006C000004A705D1001000834020300E3F10420E4F10540E5B10650E6A10730E7C10 +0A0020090B371020090B370EB8FFE0B3090B370DB8FFE04033090B374601550F700F0305 +0208320B0B0C010F0005070D0307080F121F1202030A005C0501030F05130D5C0C0A0F08 +BF0802082F5D3333E4ED39323210E42F2F5D003F3F1217392FED393931305D012B2B2B2B +5D090115211521112311213521350133090104A7FE400174FE8EBCFE8E0174FE3DD4014C +015005D1FCC15E8AFE5601AA8A490354FD6D0293000100BEFE640464045D001500384020 +080205140B051042050900080A0C0102131A0092171F176017020D091A0A881610F6FD3C +5D10F4FD3939003F3F3FED3F3C12393931302123270E012322262711231133111E013332 +363711330464B20A3B815B567F42BCBC209B5B5D8536BC76414A4640FDF305F9FCBA2752 +433C034000020095FFE0047905EF00220031006640481502151B162E2904241B310A351B +410A431B560A551A561F5020562A641A661E642A632E751B702E140F06263F0C0C061D19 +19153F1D022C3F060A1A0F232912141A0900002914092FED332F1239ED1139392F003FED +3FFD322F1112392FED123931305D011402070E01232226353400333216173E0135342623 +22060723353E01333216171E01032E01232206151416333236373E0104794E5255CB71C0 +F3010DCA5A9F4F02029E984EB74E0B51C96089CD3E2A1DCB3C98488DA8877080A322060B +0345A4FE987B7C62FDCBE4012134411A3B1AD9CA3F37C22C2D6D7C56CEFEC42F36B6AA91 +99C2BE215000000100BBFF43055905D1000C00A9406A01030F08450B8B03D903D30B0601 +08010B2B033208320B5D03660A600B08030203080908B3040304030B0A0BB30202030302 +03080908B3040304030B0A0BB30202030303610A010A07040304070A04020C0C0203090A +0A6B090109040202040309040B0835050301350B002FED3FED1117392F2F2F5D332F1239 +012F332F1217392F2F2F5D332F313087107AED87C0018710ED8708C00187107AED87C001 +8710ED8708C0015D71052135090135211521011501210559FB6202A1FD69046DFC850288 +FD6603B4BDBF029C0277BCB0FDA748FD730000010090FF3F05FC05D1000B003B40250307 +050009350A0270007F09020414005A6F017F010201010D0514095A00086008700803082F +5DE4ED11332F5DE4ED5D003FFD3C3C2F3C313001231123112111231123352105FCC8C6FD +B0C6C8056C0523FA1C05E4FA1C05E4AE0001007100000541045D000B002B401703070500 +093E0A05041A00B001010D051A09B0100801082F5DE4ED11332FE4ED003FFD3C3C2F3C31 +300123112311211123112335210541CABCFE3CBCCA04D003BFFC4103BFFC4103BF9E0001 +008AFE590490061E0021002C4018000004401E00111115400D0D0F231F2302001000091A +10192F33FD322F2F5D003FFD322F3FFD322F313001232E01232207061511140706232226 +2735331E013332373635113437363332161704900A2073208134356869BC346D310A216C +228135346868BD3A6636055708153D3D95FB9DCE6D6E0B0AB208153D3D950463CC6F6E0B +0A0000020097021303B005F000230030005740370A0A06211B0916212E0925215529600E +6029700E70290B02082552111120081C1C1853200201012E5308061D1125022A1D0B002B +2A000B2F33ED2F1239FD32322F003FED332F3FFD322F1112392FED12393130015D012335 +0E01070E01232226353436373E0137353426272E012322060723353E013332161503350E +01070E0115141633323603B0AA1C312C2D514980AF5D4D4EEF88242122573054A8270E2D +B84DD9BEAA45B736404E5B5E5283022A5E1425131415AA846A8724241F0612354013120A +300EAC0D20A99FFE74F504100F124D444C4C430000020079021303E405F0000B00170031 +40205D015D055207520B046A0F6515020F530902155303060C2A40000100122A00062F33 +ED2F5DED003FED3FED5D31305D0114022322023534123332120734262322061514163332 +3603E4F4C1C9EDEDC9C1F4B687787A86867A78870401EBFEFD0109E5E5010AFEFCEBACAC +AEAAAAADAB000001006B0000062105F00027006240440909090D1A091A0D2C092C0D3403 +300530113413460346136A1A641D64216A24101925140204160B341F0226183501160825 +1202191214081502141C272222290E15171C2FC4ED11332FC4123939ED2FED2FED003F3C +FD3C3FED12173931305D2901113E01373E01353426232206151416171E01171121352135 +26023510002120001114020715210621FDA443842D2F38F8E2E2F83A2F2F7F44FDA401B4 +A8D90172013601360172D9A801B40185275A373A9970C8FDFDC86E9E38395727FE7BAE7C +580132CC0116015AFEA6FEEACCFECE587C0000030068FFE3073F047C00390043005200B9 +40840B190B1D1C192604200D3604320D383D34414204420D4A3D4241520D5237554B630D +6137654B13161D4B2A512E622E7B0D7E137C1E7D24732E73387C4B0B47013C2170430143 +124333033018403D36042C2C283F30040B0B073F0F0A5041180A433A011A474412213304 +00470F2D012D0C0C3A1A00472D1B008F544054014D1B001B855310F632ED5D10E4113939 +10ED332F2F5D2F1217392FFD1139003FED3FED332F3FED332F3FED111217392F5D33FD32 +31305D015D01211416171E013332363733150E01232226270E01070E0123222635343637 +362437353426272E012322060723353E01333216173E0133321215272E01272E01232206> +<07032E01350E01070E01151416333236073FFCCD3C37348E566FD5420C4ED56DA6ED4C15 +5C323F947396D36C655F0124A22E2928703C4FB35A0D37CE659FD33945CA7DD9FBB60525 +20226D4F85B41991141569C0524F61747663C1022F72A234302D5334CD233B686713501C +242FC2987C992A271C033D41551717112A24BF0F265D5B5268FF00FB3E446625272C968C +FE6B35844B030915145B535F5C560003005DFF6C047104D900170021002B007840560008 +0F140A19292604001800250200180025020914001800253D1D322B4D1D422B0721261825 +04291B3E0609121504030F04293E030A21261825041E221B0009061215040C00902D0F2D +1F2D3F2D6F2D041E1B0C852C10F6ED5D10E411173910ED111739003FED3F121739FD1117 +3931305D5D5D015D011000232226270723132E01351000333216173733071E01252E0123 +22061514161701342627011E013332360471FEE8EB548F3B856EAB4B530117ED578E3674 +6F9B4C54FEBC2563379BAA222302442322FE40275F3B96AE022EFEEFFEC42A27C601004D +E2930111013D2C23ACE74CE0DC1D1DDCD2619436012B619836FD611F1ED900020071FFE2 +03BE05D100030020006D404C0F221F2202131E231E3A053A144B05400D400E400F43165C +05520F6F05650E651A7A057A0910127F1301131007120155030320201C34070A022B0303 +101F70130113130A200401041915040A2F33ED2F5D12392F5DED332FED003FFD322F3FED +331239395D2F31305D015D01233533130E01232226353436373E01373533110E01070E01 +151416333236373302C8CCCCF653BA70D7F9453B3A9D44B33C9E2E3644997967C5390A04 +FED3FA571E28D1AB62963E3E6529E1FECF2161282F7C4E716F4225000002012300000203 +05D1000300070027401707070055030305080F0901045D032B055D0F02200202022F5DE4 +FDE45D003F3FED332F3130012335331323133301F9CCCC0AE01AAA04FED3FA2F04370001 +00D2003905B002FA000500294018000002540F0401044007013007400702012A40000100 +00042F332F5DED5D5D002F5DFD322F313025231121352105B0ABFBCD04DE390221A00001 +0086FF6906C906FC0008004A402C15073307440772070407070806140302030207090829 +08590869080408000100010100040351060607080208002F2F1239392FED012F2F332F31 +308710DD5DC0C08710FD08C0005D09012301233521090106C9FC9066FE80ED0189013902 +DA06FCF86D03E18BFCCB065C0001FFDCFF37050005EF002B0077404D070B001F2E08270C +270F2E212925350D300F400E410F59226607660C0E0C0B0807201D1E21221D220F2D1F2D +020920201D2209041600160B081E462121281200000449280216161A4900120112002F5D +FD322F3FFD322F1112392FED393930012F2F1217392F2F5D8710C0C0C0FDC0C0C0313001 +5D01232E012322060F01211521030E01070E012322262735331E01333236371323353337 +3E01373E013332161705000A1D7229797E232A0141FEA3671D5C4041985C2950340A215E +2C7F812367D9F52A1A5C3E3E99573A4F3405290A1A77A0C28AFE1686B034352A0709B40E +1480A701EA8AC67BA833332C0A08000200F300CA0598045000190033006D40490A010606 +050E08130A1B06200528082D5B0452115B1E522B680B6432790B743210272730541D1A23 +541D1A002A012A0D0D1654030009542A0300101929000033291A0C290D26291A272F33ED +3CED2FED332FED002F333333ED2F2FED332F2F5D3333ED2F2FED332F31305D010E012322 +26272E0123220607233E01333216171E0133323637130E01232226272E0123220607233E +01333216171E0133323637059714B69E4D8C3841682C4B541C9B17B39F488E3B3D6B2D4C +59139E19AEA348903927802E4E56149D13B79E4D8A3A237C364B541B0450C2C64B2D3437 +607CB6C44A2E303B6D7DFDFCB8C34B2D1F4C6E7CC0C84A2E1C4F637A000200320000059E +05D100030006004F403148024703025A056A050205041A000003061A010102390236036B +0264037B02750306020305030000080105010203065401002FED3F1239012F11332F1739 +5D31308710FD8710FD04C0005D015D290101210902059EFA94023201080127FE50FE5105 +D1FAD7047BFB8500000200A600A2047A04760006000D005940107305730C0204400C1037 +0B400C103706B8FFC0B30C10370DB8FFC0401B0C103703000300070A0A07040500010100 +000C0B084007010707082F332F5D123939332F332F123939002F332F1239392F2F31302B +2B2B2B015D2501350115090105013501150901047AFDF00210FE9B0165FE52FDDA0226FE +8D0173BF01A35501A2BCFEEFFEEFD901BE5901BDC4FEDAFEDA00000200AE00A204820476 +0006000D005740107C037C0A0204400C10370B400C103702B8FFC0B30C103709B8FFC040 +1A0C10370C080C080505010403014000010000010A0B08070107082F33332F1239392F33 +2F5D123939002F332F39392F2F31302B2B2B2B015D090135090135010501350901350104 +82FDDA0173FE8D0226FE3CFDF00165FE9B02100260FE42C401260126C4FE4357FE5DBC01 +110111BCFE5E000300B2000005DA00DF00030007000B0025401405010206040A55090800 +2B0101042B0505082B092FED332FED332FED003FED173931302123353305233533052335 +3305DACCCCFDD2CCCCFDD2CCCCDFDFDFDFDFFFFF001A0000055E08010236002400000117 +004300640175000BB602000C0E050025012B3500FFFF001A0000055E07C8023600240000 +011700D700330175000BB60200180B050025012B3500FFFF0073FFE105DA07C802360032 +0000011700D7008B0175000BB6020031240F0325012B3500000200780000081C05D10016 +002500554039001C0022301C3022401C40227204720A721C741D72230B14351111011834 +10350D0317341535010811141417170E1203070073271F1507682610F6ED10E61117392F +FD32003FEDED3FEDED12392FED3130015D29012224272602353412373E01332115211121 +152111210511232206070E01151416171E0133081CFBCEC4FEFD6791B3AE984FF9E8042E +FD0502FBFD0502FBFC407A92B55F7481716D5BD09236415B0146CFD7013C603344B0FE68 +B0FDD7040479203642F8ABABEE4439280003006AFFE10776047C0024002B00370094406C +2604200D3204300D32293B2E323032343B364004400D40294D2E403040344D36530D5314 +5C165C1A531C5322620D621C6222700D72221B013C2B121E2B030F283D21042F3F1B040B +0B073F0F0A353F150A1E122B011A7F2C012C0C0C251A002C18008F393F3901321B188538 +10F6ED5D10E4113910ED332F2F5DFD323939003FED3FED332F3FED3FED1217392FED3130 +015D01211416171E013332363733150E01232226270E01232200111000333216173E0133 +321215272E012322060F0134262322061514163332360776FCDC3C34348D526DCD460C62 +BF69A8E84A45D183E9FEEF0117E38CC84447D78FE1ECB703918D8BAF10B8A49399A0A792 +92A5021B689831312F4F38CD2A347A686F78013C01110115013979726A81FEF4EF2A9B9B +A4927DD7D5E0CCD4D7D500010099023C047D02DC00030018400C0154020000050F051F05 +02022F5D11332F002FED313001213521047DFC1C03E4023CA00000010099023C076702DC +00030011B6015402000005022F11332F002FED3130012135210767F93206CE023CA00002 +FFED03E503160614000300070052B502180D103701B8FFE8B3090C3700B8FFE840090910 +3706180D103705B8FFE8B3090C3704B8FFE8401309103701000501050502060100B10202 +04B1062FED332FED003F3C332F5D3C3130012B2B2B2B2B2B0123013303230133031686FE +F1F0EF86FEF1F003E5022FFDD1022F000002009603E503BF0614000300070050B90004FF +E8400E0D10370518090C37061809103700B8FFE840200D10370118090C37021809103701 +000501050503070100B1020204B1000601062F5DED332FED003F3C332F5D3C3130012B2B +2B2B2B2B090123132301231303BFFEF186A5A4FEF186A50614FDD1022FFDD1022F000001 +FFED03E5018606140003002EB502180D103701B8FFE8B3090C3700B8FFE8400D09103701 +00010101020100B1022FED003F335D2F3130012B2B2B0123013301868AFEF1F403E5022F +000100A003E5023906140003002FB90000FFE8401A0D10370118090C3702180910370100 +010101030100B1000201022F5DED003F335D2F3130012B2B2B090123130239FEF18AA506 +14FDD1022F00000300D2000705BA051100030007000B00414029000B010B5608AC045407 +0F0101015602AC0F070107400D01300D400D0204AB000B2D05AB01400A010A2F5D3CE4FD +3CE45D5D002F5DF4ED5D10FDF4ED5D313001231133012135210123113303BDEEEE01FDFB +1804E8FE03EEEE03FE0113FD2BA0FD2B0113000200ACFFC805E00554000300070057403B +4804470658045706680467067F047006087F057007020705000301000330036003900304 +03B200023002600290020402B220010406020002000201192F3333182F2F123939002F1A +19FE5DEE5D11173931305D015D090705E0FD66FD66029A01BDFE43FE4301BD028EFD3A02 +C602C6FD3A01DDFE23FE2300FFFF003DFE64047F05DB0236005C00000116008EDD000016 +400F02100E600E700E0301000E0B040025012B355D35FFFF0006000004E607500236003C +00000117008EFFED01750019401302000E400E500E600E700E0501000E090500252B355D +35000001FF9A0000034B05D10003001D401138034803680065016903050100030000022F +332F003F2F3130015D09012301034BFCF4A5030C05D1FA2F05D100010000FFE504CA05EC +003300CC408758040102B52F0103B81D010237184718571867187718E718F71807013A00 +4A005A006A007A00FA0006032C06502998090109230F5020F71201081218122812581204 +00121203151827190119191D341502002833010133332F34030A272001022320292C0400 +0F12090604260C082A182A282A03002A21210C18007135103407073426150C683410F4ED +12392F103C10F63C11392FC45F5D111217391117395F5D003FED332F5F5D333FED332F5D +331112392F5F5D5D3CFD3CDD5D3CFD3C5F5D5F5D5F5D5F5D31305F5D250E012322000323 +37332E013534363723373312003332161715232E01232204072107210E01151416172107 +211604333236373304CA6CB97EF3FE8331862C4B02020202772C5D3A0174F38DBF541050 +C67C9DFF003001DB2CFE3C02030202017C2CFEC4310108969DB2440F3E3326012E010476 +152F161A34187601010128292DD1413DCFB17618341A172E1576B6D13F3D000100BA00AC +02E0046C0006002C400972050104400C103706B8FFC0400C0C1037030300040501000001 +2F332F123939002F332F31302B2B015D2501350115090102E0FDDA0226FE8D0173AC01B4 +5901B3C7FEE7FEE7000100C200AC02E8046C0006002C40097D030104400C103702B8FFC0 +400C0C10370505010403010000012F332F123939002F332F31302B2B015D090135090135 +0102E8FDDA0173FE8D02260260FE4CC701190119C7FE4D000002004400000453061E0003 +001E005B40370B103A10601A741A04014402031515193F1100070A3E1D0D050509080B14 +0160051A006004140A0492201D071A0B0D0A400D10370A891F10F62B3232FD3210E61139 +10E4FDE42F2F003F3C3F33FD323FFD322F3FED3130015D01233533032311211123112335 +333534363332161715232E012322061D01210453D0D011BCFDF9BC7F7FC8B73E65290A1C +6A22796A02C90518C3FA2503C2FC3E03BF9E31C1CF0D07AA08146B8C2800000100440000 +0447061E001A004E402D6C077A0702191A191A053E16000C0F3E091205010E08100A011A +000A0F00921C090C1A10120F400D10370F891B10F62B3232FD3210E6113910ED2F2F003F +3C3F33FD323FED33332F2F31305D2123112E012322061D01211521112311233533353436 +33321617370447BC2B8B35A2850149FEBDBC7F7FE9DE45902CBC056D080C6C8C2C9EFC41 +03BF9E31BFD10E040800000100BB007C045B06140013005740390B0E0F1011080609AA0A +0712130001040605AA060A060C030C010F151F150210630063020407080B0C0D0E111201 +0A022803090563700301032F5DF63C10ED173910E6E65D003F2F1239392FED17392FED17 +3931300125132313053505110535050333032515251125045BFE6D058405FE6D0193FE6D +01930584050193FE6D019301FB05FE7C018405810501A20581050184FE7C058105FE5E05 +000100FD01FF01EC031A00030016400C02560108002D2F013F0102012F5DED003FED3130 +0123113301ECEFEF01FF011B0001FFF6FEEC018F011B0003002EB90000FFE840190D1037 +0118090C370218091037010F0301011F03010300B1022FED002F5D335D2F3130012B2B2B +09012313018FFEF18AA5011BFDD1022F0002FFF6FEEC031F011B000300070051B90004FF +E8400E0D10370518090C37061809103700B8FFE840210D10370118090C37021809103701 +0005010505030F071F07020700B1020204B1062FED332FED002F5D3C332F5D3C3130012B +2B2B2B2B2B0901231323012313031FFEF186A5A4FEF186A5011BFDD1022FFDD1022F0007 +0095FFE30B9305ED000B000F001B00270033003F004B00C640900908060A0918061A083C +073E1808170A1818171A193C163E2908260A2918261A283C253E460D480F560D580F680E +17791F7625792B7631794376490625512F034F030203031F5109020F030E08432B513D20 +19401902191949315137130A4F0C400E020C0E462A003A013A402A3A003401342E2A0016 +01163416282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D12 +3939ED33332F5DED2F5D33ED2F5DED2F2F5D003F3CFD3C332F5D3CFD3C3F3F3FED332F5D +ED5D3130015D011406232226353436333216250123090114062322263534363332160134 +262322061514163332360134262322061514163332362514062322263534363332160734 +262322061514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6 +BAFABB596466585866645904935964665858666459043EBEB2B5BABDB2B6BAB259646658 +586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADCDDE0DADA01B8AC8888ADAD8787 +FE17AC8888ADAD8787AEE0DADCDDE0DADADFAC8888ADAD878700FFFF001A0000055E0801 +023600240000011700D600280175000BB602000F0B050025012B3500FFFF00C80000049D +0801023600280000011700D600260175000BB60100100C020325012B3500FFFF001A0000 +055E08010236002400000117008DFFF80175000BB602000C0C050025012B3500FFFF00C8 +0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500 +FFFF00C80000049D080102360028000001170043003C0175000BB601000D0D020325012B +3500FFFF0089000002D508010236002C00000117008DFF120175000BB601000D0D040925 +012B3500FFFF005D0000030808010236002C0000011700D6FF270175000BB60100100C04 +0925012B3500FFFF007E000002E207500236002C00000117008EFF240175001940130200 +104010501060107010050100100D0409252B355D3500FFFF0089000002D508010236002C +000001170043FF3E0175000BB601000D0D040925012B3500FFFF0073FFE105DA08010236 +003200000117008D00780175000BB6020025250F0325012B3500FFFF0073FFE105DA0801 +023600320000011700D6008F0175000BB6020028240F0325012B3500FFFF0073FFE105DA +08010236003200000117004300AA0175000BB6020025250F0325012B3500FFFF00B2FFE1 +052908010236003800000117008D006E0175000BB60100201F0D1D25012B3500FFFF00B2 +FFE105290801023600380000011700D6005B0175000BB60100221E0D1D25012B3500FFFF +00B2FFE1052908010236003800000117004300AA0175000BB601001F1F0D1D25012B3500 +000100BB00000177045D0003001E4011020501087F05010592001A7F010101880410F65D +FDE65D003F3F3130212311330177BCBC045D00010136051103E1068C0006003A40275905 +5606690566067A0573060601020350056005700503050560030103500060007000030000 +042F332F5D002F5D332F5D1239393130015D01230B0123133303E19FB9B89BE4E3051101 +00FF00017B00000100ED051D042C06530019003940233902350E4902450E04190D190952 +0F101F1002101652100D600301031928000C28000D2F33ED2FED002F5D3333ED2F5DED33 +2F2F31305D010E01232226272E0123220607233E01333216171E0133323637042C0B846F +365C292F412734340483088E67325D2A2F49213339030653989A27252B2B5A4C979A2724 +29295C4600010118053703FE05D10003001440090253100101010000022F332F002F5DED +31300121352103FEFD1A02E605379A0000010113050E0402068C000D0056403A6508650C +7508750C040D5006600670060306060AAA094003F00302D19003E003029003E003028B00 +03018950030150030159030D2A00072A00062F33ED2FED002F5E71725E5D5E5D715E5D5E +ED332F5D3C31305D010E0123222627331E013332363704020AC5A9A9C509A60C6B5B596B +0E068CA8D6D6A8847878840000010221051802F505DB0003000EB50244010015012FED00 +2FED31300123353302F5D4D40518C3000002012D050903E907B1000B00170045402E0F51 +090009300902313009015009600970090309091551030C29200030000200003000600003 +D0000100001229062FED332F5D7172ED002FED332F5D725E715EED313001140623222635 +343633321607342623220615141633323603E9CC9290CECC9293CB917558587576575875 +065E8FC6C5908FC4C48F567776575776760000010161FE59037000140014002440150B02 +1B012B013901041207070B53030D0E2A0000062F332FED003FFD322F2F31305D05140623 +22262735331E0133323635342627331E010370B79225742D091A58326862060399020659 +A2AC0E0CA00A1A4E581D491913340002015605160477068C000300070042B54500450402 +00B8FFE8B30E103704B8FFE840190E10370750036003700303030305019F000100000204 +0204062F33332F2F332F5D002F33332F5D333130012B2B5D09012313230123130477FEFE +8BA9B0FEFE8BA9068CFE8A0176FE8A0176000001019FFE5F037C000A0014002440150E04 +1E042B043B04040A14141053030D000D2A00062F33ED2F003FFD322F2F31305D010E0123 +222635343637330E011514163332363733037C344B2A8BA90D069B0606535A24511108FE +790E0C9E8F263E1A1B3C1E524E1B080000010132051103DD068C0006003A402754015902 +64016B0274017B020606050250036003700303030360020102500060007000030000032F +332F5D002F5D332F5D1239393130015D01032303331B0103DDE4E3E49FB9B8068CFE8501 +7BFF00010000000100180000048005D1000D0047402A3B0B4B0A5A0A7A0A04020B050804 +090309090106030C3501080A030A00000F0F0F01080B140503026C0E10F63232FD325D11 +332F392F2F003FED3F12392F2F12173931305D29011107353711331101150111210480FC +52BABAC6015DFEA302E8021798A395031AFD78011BA3FEE8FE0700010018000002360614 +000B003D4023490559056905030407010A040B05050B0B030801030800050D92000A011A +050704880C10F43232FD3232E62F2F003F3F12392F332F12173931305D01071123110735 +37113311370236B5BCADADBCB5037A91FD1702608D9F8A0318FD7194FFFF0086FFE50502 +0801023600360000011700DF004D0175000BB6010034311A0025012B3500FFFF006EFFE5 +03D7068C023600560000011600DFAE00000BB601003734180025012B3500FFFF007E0000 +050808010236003D0000011700DF00320175000BB601000D0A020625012B3500FFFF005D +000003E3068C0236005D0000011600DF9400000BB601000D0A050625012B35000002017A +FE780228061400030007002940160F094F090201060106050201050B00041F014F050105 +2F5D3CFD3C003F3F1239392F2F3130015D01231133112311330228AEAEAEAE02F6031EF8 +64031E000002000E000005BC05D100120025005240333816481666026811041B1E083C0B +0B071A340C031F3407087600011D1D0713150074270F274027602703091B1E140B09076C +2610F63232FD322F5D10F6ED12392F5D003FED3FED12392FFD393931305D011402070E01 +23211123353311213204171612073426272E012B011121152111333236373E0105BCB193 +66FBCDFE88C4C40174DA01025898AACF7A7958C68ABC0169FE97BC8FD5596F6F02E7CBFE +B65B3F3802E48F025E3F375FFEC4D6AFF0453227FE4C8FFDC62A3947E8000002006AFFE1 +0471061E001F00310084405B190D290D32013420392B362D45014C0D44204A2B442D5A2B +542D6F05741E7421100C03293F090F121A1D041B10100903161B1B3F164F160216022F3E +030A1C111A1D1C030011120F0C26051F162F160216231316090000092C14062FED11332F +1239ED2F5D17391217392F2F003FED3F5D332F111239392F1217392FED123931305D0110 +00232200353400333216172E01270527372E012735211E01173717071612013E01353426 +272E012322061514163332360471FEE4F1E5FEEB0112CA6C9B56208757FEF842ED54905D +0127236225D242BA99A6FEDE313403024BA55693A9A98F427B027DFEBCFEA8010EF5E201 +08353570D64AA2618E43512F1019431A80616D93FE9BFD8A3BA99620371E2D2BAF98B4AE +2C00FFFF0006000004E608010236003C00000117008DFFE40175000BB601000B0A050025 +012B3500FFFF003DFE64047F068C0236005C00000116008DDD00000BB601000A09040025 +012B3500000200C80000049605D100120021005C403E391F491F551180108011051B3400 +0701071A34200C010C0C07090A0309080F231F23021315200030004000700004006F230F +233F23020C1B071400096C2210F632FD32325D10F65DED5D003F3F1239392F5DED2F5DED +3130015D011406070E012B011123113311333216171E01073426272E012B011133323637 +3E010496463C4EDB97C6C6C6CD85C243535ECE343830805AC4A777982F2C2903135CA939 +4B48FEBE05D1FEF22D2C35AA7D486B231E19FDCD292D2966000200B9FE64049006140013 +0020004D4035320239153220430249154220561267127E087C1C0A0E0906174211040C01 +1E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED +3F3FED12393931305D011406070E012322262711231133113E0133321203342623220607 +111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F51A44B5073499DB0023C +88E14E4A512628FE2C07B0FDD43F55FECFFEECCAC84639FD87241AD4000100DC023C05B0 +02DC0003001E401100540F02010240050130054005020000012F332F5D5D002F5DED3130 +0121352105B0FB2C04D4023CA000000101230069056904AF000B00264017D702D80802A7 +0201D705D80B02A80B0105840294020202192F5D002F3130015D71005D71250709012709 +01370901170105696FFE4CFE4C6F01B8FE486F01B401B46FFE48D86F01B8FE486F01B401 +B46FFE4801B86FFE4C00000101230236039205D5000F002E4018055006060C030E03AA01 +0E0505020F0F0C0E2A02100301032F5D33ED39322F2F332F003FFD323F332FED31300121 +35331123353236373E01373311330392FD99EAF22D6C1E252C0387DD02367A0238700D0C +102C28FCDB00000100CF023603C705EF001D0045402D24152518361535184C105E106D10 +651866197D1075180B0F0F0B521302021C52010E00001C02082A16101610022F33332F2F +ED1239332F003FFD323FED332F3130015D0121353E01373E013534262322060723353E01 +333216151406070E01072103C7FD0864A733834A6B5A59AC300D47AF57B4BB6173379B42 +022002369C3E6E29676754454C3D1FB41A239D7D63975A2B6629000100CF020F03BC05F0 +002E007740162A033903450C4A1F540C5C1F6B0864237D0874230A27B8FFC040390B0E37 +2C2B15520F16010F161F164F165F16CF16FF16061621211D52160625020A0A0E52060F1A +2A281622112A2216282C04091000010000092F332F5D121739ED2F2F2FED003FED332F3F +1239ED332F2F5D71ED393931302B5D011406070E012322262735331E013332363534262B +01353332363534262322060723353E0133321615140607151E0103BC42383994595EA54A +0E29C35D648576708F80706B63684DC32C0E4AAD5AAFC16E595F8303314B712223211E1C +B3243B474B553C8D4D443D473E24B21B23886A59721A08116F00FFFF00AB000007A305D5 +0036023B9200003700BB023700000117023C0404FDC300204015020E08020E400E600E02 +010B2B0B5B0B6B0B7F0B045D11355D1135003F35FFFF00AB0000074105D50036023B9200 +003700BB023700000117023E0384FDC3002640190302100803020E1F0E5F0E7F0E03010B +2B0B5B0B6B0B7F0B045D11355D113535003F3535FFFF008C0000077905ED0026023DA600 +002700BB029100000107023E03BCFDC30036402603023608030236103630367F36030131 +003134314B315F316B317B3106000900093F094F09035D11355D11355D113535003F3535 +0001003C0000047405D10011005840330C0F09512F063F060206060B02344F0501050510 +0B01341003200301080803032F00010000130E01050A140F0E2F0B3F0B020B2F5D3333FD +32322F11332F5D332F392F5D003FED2F12392F5DED12392F5DED39393130012111211521 +1121152111231123353311210474FD3E028AFD76014AFEB6C0B6B603820526FE55ABFEEF +8BFECC01348B0412FFFF0073FFE305A208010236002A0000001700D900CF0175FFFF006C +FE590443068C0236004A0000011600D9FE00000BB6020037311A2325012B3500FFFF0089 +000002D507500236002C0000011700DAFF240175000BB601000D0C040925012B35000001 +0086FE59050205EC004700C240990B0B0A1F0036003A1B0B1B1F13362F0B2A1F292F2436 +24463F0B391F3427392A34363441481F4427482A43364B3E44415F035A05523257365544 +6B026F046A30643264366642604679057A2D703670377541754486292B20400E10371F40 +0E10371A060028313F06341D38383C343402212125341D0A101014530C0D0F0F172A0937 +3F153128150031371D0904200074490F49704902206A4810E65D10E611173910ED2FED2F +2FED332F003FFD322F3FED332F3FED332F1112173931302B2B5D011406070E01071E0115 +14062322262735331E01333236353426270E012322242735331604333236353426272E01 +272E013534243332041715232624232206151416171E01171E01050251492C683E0303B3 +9A25742D091A523868620302142515A1FEFF850E71012882B8CD61634BAF62C6BF013CF3 +9D0106650E55FEEB919FC1607940EC52A6A801A957AA3B233711162C199DB10E0CA20A1C +4E5818291201023C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E +28152CB20001006EFE5903D70478004A00AA40810820090C37090204321902173224202B +3B34203A3B43204B3B5A1C5C2D5237534652496B1C6B2D6237624662497C1C7C28743779 +3F74428B0188248531873F1D170300252F4006351A80390139393D3E35041E1E223E1A09 +0D0D1153090D0C0C142A0638401B2F251B002F381A06041D008E4C0F4C1F4C3F4C5F4C7F +4C051D864B10E65D10E611173910ED2FED2F2FED332F003FFD322F3FED332F3FED332F5D +1112173931305D2B011406071E011514062322262735331E01333236353426270E012322 +262735331E0133323635342726272E01272E01353436373E013332161715232E01232206 +15141716171E011716171603D77F6F0205B79225742D091A5832686203021528177CCF46 +0A59DA647C8C26266C288135937B393A38AD6B64CD440A48CE63678E2B2A5E34812B8347 +4701426BA32A13361AA2AC0E0CA00A1A4E58182D0F02023B23D3434F5056422222180918 +0E27976E457A302F373123C935494F4E452323160C180A1E494AFFFF0073FFE505460801 +0236002600000117008D006E0175000BB601002D2C0C1525012B3500FFFF0069FFE703F3 +068C0236004600000116008DCE00000BB601002423090F25012B3500FFFF0073FFE50546 +0801023600260000011700DF00A80175000BB601002E2B0E1525012B3500FFFF0069FFE7 +03F3068C023600460000011600DFF600000BB601002522090F25012B35000002006CFFE1 +04FB0614001B0028006F404A3B05380C3C2232243E284B054A0C4E2245244F2859086908 +70120D0114511A17171018011304072041100403082642070A160088011617131C041A1A +01922A1F2A3F2A02231B010A852910F632ED5D10F632FD3232323210E42F003FED3F3FED +1239393F12392F3CFD3C31305D01231123350E01232202113436373E0133321617352135 +213533153301112E0123220615141633323604FBB8BC4DAD6EC6ED524444B66059864CFE +95016BBCB8FE8C4F73499CB2879750A404F4FB0C754252012E01118EDB4D4C4F2427CE86 +9A9AFB9902792218D6CCC3CD47000001FFFC0684051A06FC00030011B601500200000502 +2F11332F002FED313001212721051AFAE705051E06847800000100FD01FF01EC031A0003 +0016400C02560108002D2F013F0102012F5DED003FED31300123113301ECEFEF01FF011B +FFFF001A0000055E0801023600240000011700D900310175000BB60200110B050025012B +3500FFFF0068FFE1041D068C023600440000011600D9D600000BB602003A340B2625012B +35000002001AFE5F062B05D1001B001E00C840900F051F052E053E05401D700806381C4A +0E450F590E570F051D1E1D1C0A77098709020914100F101D1E0B770C870C020C140D0D0E +570E580F7D0E730F040B34301E401E701E031E091E1D030D0E031B1B1753030D107A0D01 +0D080000142A060F20010E0F1D06040D0C102410391042105A106A1074100710106E200F +20010A0D2B0D360D4D0D550D650D7C0D070D641F10E65D5D10F42F5D1217395D2FED332F +003F5D3C3FFD322F3F1217392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D +005D010E012322263534363703210323012101230E0115141633323637330902062B344B +2A8BA91E0679FD7C92C9021E0108021E610607535A24511108FD91FEFBFEFAFE790E0C9D +90406A150154FE6105D1FA2F1B351B524E1B08033102DBFD250000020068FE5F052E0478 +003A00470099406A0B11052B1A12162B2A0544225F25544065166C2562407B127B1D7F25 +703F0F0C041B04390559166916053A3A3653030D0A103C3D301940190219192810242420 +3F28044541100A3009080000332A060F25012506193B091A2F25132F91490F491F493F49 +03421B13854810F6ED5D10E4113910FD3232322F5D2FED332F003F3C3FED3FED332F1112 +392F5DED12393FFD322F31305D015D010E0123222635343637350E01070E012322263534 +3637362437353426272E012322060723353E01333216171E011511230E01151416333236 +373301110E01070E01151416333236052E344B2A8BA90D041955282F7A5297D26D656601 +1EA42D2A28703D4AB6610A37D06576AF403F421D0607535A24511108FE3456E944516474 +7763A4FE790E0C9E8F263B1377113D12171FC89B7F9D2D2D20081D40541817102725BF0F +24272F2E926CFD0A1B321E524E1B0801FB013705141317615560614DFFFF00C8000005B2 +0801023600270000011700DF00280175000BB60200211E080F25012B35000003006CFFE1 +062706140003001700240072B90000FFC0404A0E10370118090D3702180910373D073D1E +34203B244D074F1E45204B245A0A6A0A70140B02020316011506091C4112040508224209 +0A0000021618061A02041F263F26021F1B040C852510F632ED5D2F33FD32322F332F003F +ED3F3FED1239393F33332F31305D012B2B2B010323130123350E01232202113436373E01 +33321617113303112E012322061514163332360627FA7F98FEFDBC51B067C8EB514544B5 +6158884BBCBC4C78479EB0889650A40614FE0701F9F9EC75464E013401118EDE4E4C5025 +2701E4FAFF0281221ADCCAC7CF47FFFF000E000005BC05D1021600E70000000100C8FE5F +04CD05D10020005C40390C041C042D043D04041235000F100F020F0F090E350B03133516 +090820201C53030D00192A0006060C10030A1473220F22010F1314140A6C2110F432FD32 +5D10E61117392F33ED2F003FFD322F3F3CED3FED12392F71ED31305D010E012322263534 +3637211121152111211521112115230E01151416333236373304CD344B2A8BA90B06FDC7 +03D5FCF1030FFCF1030FFE0607535A24511108FE790E0C9E8F24331D05D1B0FE68B0FDD7 +B01B351B524E1B080002006AFE5F0460047C002C0033007B40560D1E1A1E2604290D2B1E +34043A0D3C1E3B3244044B0D4B32590D502A6C0D602B790D783212191915531D0D013C33 +3323303D29040F230B0B073F2309122A20201A1A0C0C2D1A008F350F351F353F35033301 +1B26853410F6FD325D10F4ED332F3C11332FED003FED332F12393FED12392FED3FFD322F +31305D01211416171E013332363733150E01070E011514163332363733150E0123222635 +343637260011100033321215272E01232206070460FCC93E36348F5672E7310A4A9B5102 +03535A24511108344B2A8BA90604F8FEEB012BF4E2F5B701939697B30C021B6799313030 +5B2CCD1F3109143012524E1B089F0E0C9E8F18321212012A010401120142FEF8F32A94A2 +B284FFFF00C80000049D0801023600280000011700DF00220175000BB601000F0C020325 +012B3500FFFF006AFFE60460068C023600480000011600DFFD00000BB602002320120025 +012B3500FFFF00C80000047608010236002F00000117008DFEC00175000BB60100080702 +0325012B3500FFFF00AB0000025108010236004F00000117008DFE8E0175002FB5700270 +030203B8FFC0B3090C3702B8FFC04011090C3701044F049F040201000605020325012B35 +005D11352B2B5D00000200C80000047606140005000900464016070C0B0D370808090102 +030435010800000B0F0B0106B8FFEA40110E1037080C0B1037060608041408016C0A10F6 +32ED2F332F2B2B5D11332F003FED3F3F332F3130012B2901113311210B0123130476FC52 +C602E8C3FA7F9805D1FADF0564FE0701F900000200BB000003540614000300070042400D +010C0B0D370202030601050800B8FFEA40190E1037020C0B103700000F021F0202020204 +1A7F050105880810F65DFD322F5D332F2B2B003F3F33332F3130012B0103231303231133 +0354FA7F98FCBCBC0614FE0701F9F9EC0614000200C80000047605D1000500090036401E +07562F0801080801020304350108062D07070100000B0F0B010414016C0A10F6ED5D1133 +2F12392FED003FED3F12392F5DED3130290111331121032311330476FC52C602E89CE9E9 +05D1FADF0157010B000200BB00000362061400030007002D401A05560606010201010807 +2D6F067006020606001A7F010101880810F65DED332F5DED003F3F12392FED3130212311 +33012311330177BCBC01EBE7E70614FBF4010900FFFF00C8000005380801023600310000 +0117008D00780175000BB601000C0B050925012B3500FFFF00B90000045F068C02360051 +00000116008D0000000BB6010019180E1625012B3500FFFF00C800000538080102360031 +0000011700DF00A20175000BB601000D0A050925012B3500FFFF00B90000045F068C0236 +00510000011600DF1C00000BB601001A170E0225012B3500FFFF0073FFE105DA08010236 +00320000011700DD008C0175000DB703020029260F0325012B353500FFFF006AFFE10471 +068C023600520000011600DDD800000DB70302001D1A060025012B353500FFFF00C80000 +059808010236003500000117008DFFF60175000BB602002221060B25012B3500FFFF00B9 +00000372068C0236005500000117008DFF380000000BB6010015130A1225012B3500FFFF +00C8000005980801023600350000011700DF000A0175000BB602002320060B25012B3500 +FFFF009200000372068C023600550000011700DFFF600000000BB6010016130A0325012B +3500FFFF0086FFE5050208010236003600000117008D00140175000BB6010033321A1F25 +012B3500FFFF006EFFE503D7068C0236005600000116008D9400000BB601003635063225 +012B350000010000FE5904EE05D1001B0048402E0C071C072C073C07040C0C1053080D01 +18351A030216080B0B132A050F1D1F1D4F1D03005B050114185B4F1901192F5DF4FD32E4 +5D2FED332F003F333FFD323FFD322F31305D0121111E011514062322262735331E013332 +3635342627231121352104EEFDEC0309B79225742D091A58326862050332FDEC04EE0521 +FB04144822A2AC0E0CA00A1A4E581E36170521B00001003EFE5902FD059E0030006F4046 +0C080D1A19081E1A2B082F1A3C08070D0D1153090D20251C3E22201F0503171830302C3F +18094F327F32020C0C142A06182306031C008C321D22251A1F1D4F1C7F1C021C883110F6 +5D3232FD322F10E61117392FED332F5D003FFD322F1239393F3333FD322F3FFD322F3130 +5D250E01071E011514062322262735331E01333236353426272322263511233533113311 +211521111416171E01333236373302FD0C1C100204B79225742D091A58326862030214AB +B27F7FBC0184FE7C0818164D4F2E64160A0A030703122C18A2AC0E0CA00A1A4E58172F10 +B7CB02529E0141FEBF9EFE0358632B28251B0900FFFF0000000004EE0801023600370000 +011700DFFFEE0175000BB601000B08060725012B35000002003EFFEA037A0705001B001F +0073404C0B041C042A042A1D2A1E3A1D3A1E4A1D4A1E551C641C691E741C791E0E1F1F1E +0B10073E1E0D0B0A051B1B173F03094F217F21021C1C1E1E100E008C21080D101A0A0800 +4F077F070207882010F65D323232FD322F10F63211392F332F5D003FFD322F3F333333FD +322F2F332F3130015D250E012322263511233533113311211521111416171E0133323637 +331303231302FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A7DFA7F980A0E12B8 +CB02529E0141FEBF9EFE0358632B28251B090652FE1101EFFFFF00B2FFE1052908010236 +00380000011600DB63500079405B02010900210140215021A02103EF102101902101BD00 +210150218021028B10214021702103B021C021F021039021C02102599021C021E0210310 +21602190210331002101E021010F211F214021502180210521020100241E0D1D25012B35 +3500115D71725E71725E5D71725E5D725E5D725E5D715E353500FFFF00B1FFE1045707B1 +023600580000011600DB0000000DB70201001D17091625012B353500FFFF00B2FFE10529 +0801023600380000011700DD00780175000DB7020100241F0D1D25012B353500FFFF00B1 +FFE10481068C023600580000011600DD0A00000DB70201001D18091625012B353500FFFF +007E0000050808010236003D00000117008D00070175000BB601000B0D050625012B3500 +FFFF005D000003E3068C0236005D00000117008DFF680000000BB601000B0D050625012B +3500FFFF007E0000050807500236003D0000011700DA00390175000BB601000B0A050625 +012B3500FFFF005D000003E305DB0236005D0000011600DA9200000BB601000B0A050625 +012B3500000100C80000048A05D10005001F401003013504030000070F07010214036C06 +10F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D100030073 +FFE105DA05F0001700230027006D404F040004060B0C0B1217001706190C191257015705 +53075F0B580D58115F13531710253560260126260976097915021B3415022134090A2726 +27260F18150373290F29010F291F293F29031E150F682810F6ED5D5D10F6ED1239392F2F +003FED3FED5D12392F5DED3130015D011612151402070E01232224272602353412373624 +33321613100023220011100033320003213521051E5B6163595CFBA19DFEFF5A5A61605C +5801059AA0FF47FEFCE1E3FEFD0108DEDE0107ACFD8D0273052664FEDEB8B8FEDD616566 +6863630120B9B6012167626869FD610122013BFEC5FEDEFEDBFEC901370106B300030069 +FFF0062405E1001D002A00370058403624182C321525062B32091509081603082A1E2532 +65006A0F041E150032150F00072B1518250407140F080839381F393F396F399039045D11 +12392FC4ED173910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01 +071523352E01272E01353436373E01373533151E01171E01073426272E0127113E01373E +0101110E01070E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F +4B57CE403B3A8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A +524AD88C88CC4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01 +363737AA6170B63A2D3C0002006CFFE10443047C00130020005740162A032A203C1A301C +38204F1A421C4820580668060A10B8FFC040230B1037120502110518410E0401081E4205 +0A1114021A0092221F223F22021B1B08852110F6ED5D10F6FD3232003FED3F3FED123939 +3F31302B5D2123350E01232202113436373E0133321617353303112E0123220615141633 +32360443BC51B067C8EB514544B56158884BBCBC4C78479EB0889650A475464E01340111 +8EDE4E4C502C2734FCB6027C221FDCCAC7CF47000002006AFFE104730614001900280086 +4029031C0520171526153B0A3A0E3A1C3E214C0A490E4A1C4F2153176B0E7B0E7A207B21 +1136264626021DB8FFE04034121C371D180A11371D171D0C050F133E1001263F030A1111 +001D0C0F1A1B00140F00902A0F2A1F2A3F2A6F2A040F0F231B06852910F6ED332F5D10E4 +113910ED11393911332F003FED3FFD323F33332F2B2B5D31305D01100023220011343637 +3E01372E012735211521151E01171E01073426270E01070E011514163332360473FEEBEE +F1FEEB564045B45C4CB466032AFDCF44DE5D9676C26E6E4291423F55AA9C99A60227FEF0 +FECA012F01068DC5404852113F8748B39E0A2E9C5488FBA487E45608303532AE7FC9D0D3 +0001006DFFE603EE0478003D007C40432612263B363B49014418590154186A016F0B6418 +79017A0B7418792274350F0C2C3F2B2B03161A1A1E3E16043D3D393F0309192B40090C37 +2B241B10100C2B19040900B8FFC0401009143700003F7F3F803F02331B09863E10F6ED5D +11332F2B1217392FED2F2B2F003FED332F3FED332F1112392FED3931305D250E01232226 +272E0135343637352E01353436373E013332161715232E01232206070E01151416171E01 +3B0115232206070E01151416171E01333236373303EE6BCE734FA446455771795B6C5F41 +40A24F62A45A0D42C3642D4E2A233338302D68356F9E3E642A2931342925653866E8470D +40302A2028277F5E6090260718845C5975222120211CCF33380B140F432C3D440F0E03A6 +0911114A3B354A151314483E0002006AFFE1050F047C0011001D004D40163A15351B4A15 +451B040E3F0D05153E09041B3F030A0FB8FFC040190B0D370E0E090C0F0306121B00901F +1F1F6F1F02181B06851E10F6ED5D10F4ED121739332F2B003FED3FED3FED5D3130011000 +232200111000333216172115211E010734262322061514163332360471FEE7E9F1FEEC01 +1AED376A1D01E0FEE03E44C2A49AA1A4A79C98A8022EFEE7FECC013C01110113013B1609 +A549C27FD7D6E0CDD1DAD7000001000A000003EE045D0007003840230301043F06054000 +4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32 +2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A50002 +0068FE6405EA047A001D0024007840163515740F022110090C37213E1A040F0522037717 +0117B8FFF0400F090C37173E0609050C75147A1E0211B8FFC040250D103711112217041A +05050C1E1B3A0001008F260F261F264F266026040F2601141B0C852510F6ED5D5D10F45D +ED12392FED3939332F2B5D003F3FED2B5D39393F3FED2B31305D011000051123112E0127 +2E01353412373315060215141617113E0133200003342623113E0105EAFEA9FEF3BB82DD +51555E7685E58894E1BD214B270130015DC3E0C1CED30240FEFDFEC40FFE72018E065145 +4AC4869F01128A1163FEF6A7BDE60603E80201FED5FEFBB8DBFCB20AE8000002FFFCFE59 +051AFFAE000300070020400F02500101080650050D0400000905022F3311332F33003FED +12392FED31300521352111213521051AFAE2051EFAE2051ECA78FEAB7800FFFF01230000 +03DC05D10036000400000117000401D90000001E40140302200D5F0D6F0D030D01000005 +10057F0503052F5D35352F5D35350001009A022A03C605F00016004DB90014FFE0B3090C +3715B8FFE0B3090C3713B8FFF84017171B370110130D0D085313020E03012A000018100B +2A0DB8FFC0B3090A370D2F2BFD3211332FED003F3FED332F1239332B31302B012B012311 +3426272E012322060711231133153E013332161503C6AC0E15164D40418D41ABAB4BA254 +9AA6022A0215466A2424234332FD4503AB683E45B9AB000200C8FFE508CA05D1004E005D +00E240210B18044D19012E18204D55316A186631654D791375487952735A0D05200E1037 +3DB8FFE040310E103711001A46043B033F400B0D373F3F433E3B4F3501353B351E37213E +34243134032C573450290129292B56342C0307B8FFC0403C0B0D3707070E3E0309202B3A +4F4A4F0237341F1A20201A330606461A381D3E1A3E1A3E111A00005F0F5F014F13225F33 +7F33023333572A13702B012B2F5DFD32332F5D39ED5D11332FED33332F2F123939ED332F +1112392FED39395D002F2F3FED332F2B3FED12392F5DED1217392FED393933332F5D2FED +332F2B1112173931302B2B5D0114062322262735331E01171E01333236353426272E0127 +2E013534363723112311230E01070E012B01112311333216171E011733353315213E0133 +32161715232E01232206151416171E01171E01013426272E012B0111333236373E0108CA +E2BE6ABA3D0917472D356145667943552A62377E6E0F12DDB57C0C3B2F4DCCA030BCF486 +B44847580A78B5017F24733155B53E0940B15B59723B562E642E7284FA5E36372F83572E +1178962F2F2701429BC23C22D31331161A1E4C5A4844160B131026956E254426FC4E03B2 +45792F4D4DFDD505D12D302F9364DCDC12183024C935494E4F4648170C180C1E8E024F4D +75241F1DFDA32D2F306DFFFF0089FFEB063E05D10036002C00000117002D035400000005 +B20F23015D00FFFF00AFFE59043D05DB0036004C00000117004D02280000001840115023 +60237F23030302500C600C7F0C030C2F5D35355D000200000000052706140016001A0065 +B90017FFE8403F0D10371818090C3719180910370315161575150318181701100D084213 +040E05010D08171740190119100B1A19300D500D700DAF0DCF0D050D0D021A00911C10F6 +ED332F5D33FD322F5D332F003F3C3F3FED12393F332F31305D012B2B2B2123113426272E +012322060711231133153E0133321615090123130527BC1218195E4B4DA84DBCBC58BC63 +B5BEFC72FEF18AA5027C4D87262A294C3BFCBE045D7C4952DACD033FFDD1022F000100D5 +0366028705D100030027B90000FFE840140D10370118090C3702180910370101030300B1 +022FED003F332F3130012B2B2B090123130287FED688C205D1FD95026B00000200D50366 +041805D1000300070050B90004FFE8400E0D10370518090C37061809103700B8FFE84020 +0D10370118090C37021809103746000101050503070304B13F0601060600B1022FED332F +5DED003F3C332F3C3130015D2B2B2B2B2B2B09012313210123130287FED688C20281FED6 +88C205D1FD95026BFD95026B00040095FFE3080705ED001B001F002B003700CA400C471D +481F561D591F681E050BB8FFE040160E103701200E10371F1D1C071D171D021D291E1E1F +29B8FFF44012090B37230C090B374F0D401B7A2F75350417B8FFE8404A0E103711180E10 +371F031B1B17512F034F0302030D030D115109022F51202940290229293551230A1E0840 +1E011C1E322A00260126262C2A1C1E062020390F39010D2000010000142A062FED332F5D +335D11332F123939ED332F5DED2F2F5D003F3FED332F5DED3FED33332F2F5DED332F3F2B +2B5D2B2B3130018710ED5D87C0002B2B015D010E012322263534363332161715232E0123 +220615141633323637330901230901140623222635343633321607342623220615141633 +3236032D1E934EC0D9DDBC417F3F0E3C73396D7F7B71497A250E02F5FCF4A5030C028ABE +B2B5BABDB2B6BAB2596466585866645902BE1232E6D2C9F22121AD3233959C9698422302 +68FA2F05D1FBCCE0DADCDDE0DADADFAC8888ADAD87870002000FFFE8028605D3001B002B +006E400D531D621D701C0316180B113705B8FFF040310B0F37001A010B1C051B1B051612 +120F5216092550050347080112121F2908401114372F0801081C1B001A0008030B2A01B8 +FFC0B3101437012F2BED17332F33322F5D2BED332F5D003FED3FED332F1112392F17392B +2B31305D13371134363332161514020711141633323637150E012322263D0107133E0135 +3426272E01232206070E01150FB17B6F607C78A51D1B1A44693771395C6B4FF8622F0D0D +0A190F0F19060B0C01A6EB01C7E299826D5CFEF7E6FE61592B214AA22C2B727FE162022B +A980371E30110C0D0C0E156E5800000200920000044203B0000300070025401507CB0101 +05CB0307CB010105CB00031003300303032F5DED332FED002FED332FED31301321112113 +1121119203B0FC504C031803B0FC500364FCE80318000001008301BD0252038C00030017 +400B02020300000002300202022F5D332F002F332F3130011121110252FE31038CFE3101 +CF000002008301BD0252038C000300070023401306CB020205CB0304CB000006CB000230 +0202022F5DED332FED002FED332FED313001112111052111210252FE310183FEC9013703 +8CFE3101CF4CFEC9000100B10088042203F9000B0021401409090F032F034F0303030606 +00009000A00003002F5D332F002F5D332F3130133400333200151400232200B10102B7B6 +0102FEFEB6B7FEFE0240B70102FEFEB7B6FEFE0102000002007001AA026603A0000B0017 +0065400B06102326370610171A3700B8FFF0B323263700B8FFF04015171A3712CB06060C +CB000910171A3709100B0E3703B8FFF0B3171A3703B8FFF040130B0E3715CB03030FCB00 +0920093009600904092F5DED332FED2B2B2B2B002FED332FED2B2B2B2B31300132161514 +06232226353436172206151416333236353426016B689393686893926949666748486766 +03A093686893936868934C674849666649486700FFFF001A0000055E073C023600240000 +011700D80031016B000AB602000C0B0607252B35FFFF0068FFE1041D05D1023600440000 +011600D8D900000AB6020036371D26252B35FFFF0073FFE5054608010236002600000117 +00D600A90175000AB601002F2B0F15252B35FFFF0069FFE703F3068C0236004600000116 +00D6F4000011400C014026502602002622060F252B5D3500FFFF0073FFE5054607500236 +00260000011700DA00A80175000AB601002C2B0F15252B35FFFF0069FFE703F305DB0236 +00460000011600DAF5000011400C012024302402002425060F252B5D3500FFFF00C80000 +049D073C023600280000011700D80033016B000AB601000E0F0203252B35FFFF006AFFE6 +046005D1023600480000011600D8F700000AB6020022231200252B35FFFF00C80000049D +0801023600280000011700D900400175000AB60100120C0203252B35FFFF006AFFE60460 +068C023600480000011600D9FE00000F400A027026010026201515252B5D3500FFFF00C8 +0000049D0750023600280000011700DA004F0175000AB601000E0F0203252B35FFFF006A +FFE6046005DB023600480000011600DA0000000AB6020022231218252B35FFFF0073FFE3 +05A208010236002A0000011700D600D00175000AB601002925070F252B35FFFF006CFE59 +0443068C0236004A0000011600D6FB000011400C0230354035020035311A23252B5D3500 +FFFF0073FFE305A207500236002A0000011700DA00CE0175000AB601002728070F252B35 +FFFF006CFE59044305DB0236004A0000011600DAF5000011400C0250336033020033341A +23252B5D350000010073FE5905A205EC0038009540200906060E07261D06130E210E350E +4901410E510E6506650B630E740E741C0F2CB8FFE04043090C37323236532E0D28032235 +40230123230C03101017340C021D34030A3131002A0F2B1F2B022B760901221022042B27 +040910216C25753A0F3A403A021A1509683910F4ED5D10F4ED331217392F2F5D2F5DED33 +2F003FED3FED332F1112392F5DED12393FFD322F3130012B5D0534262722242726023510 +002132041715232E01272E012322001110002132363711213521110E01071E0115140623 +22262735331E0133323603820302ADFEE066677001A1016C7F010999121F763945AF6FFA +FEDD0130010660BF48FE7102535AD45E0103B79225742D091A583268626B152B0F5F6061 +0123C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAEFD8129460F0E2516 +A2AC0E0CA00A1A4E0003006CFE590443068C002300300034009F406F243234320233200D +10373D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C057020 +112F343F344F3403343433331E220512211528401E0407070B40030D2E41150731315033 +603302333300180F0601062124121A0006180092361F363F36022B1B18853510F6ED5D10 +E4113910FD32322F5D1112392F5D332F003FED3FED332F3FED1239393F11332F332F5D31 +305D012B5D2510002122262735331E01333236373E013D010E01232202113436373E0133 +321617373303112E01232206151416333236130323010443FEFEFEF459A9520A2EC86460 +7E23231E559B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A534B3F301117FFE +E4FEF61917C012352E29276E446644430121010790D14C474F272830FCD60261221DD0C6 +BCC23F058EFE8A017600FFFF00C80000053B08010236002B0000011700D600760175000A +B60100100C060B252B35FFFF00B90000045F08010236004B0000011700D600220175001A +4012014F1B6F1B9F1B031B112601001B170808252B35002B5D3500020020000005E305D1 +001300170060403D0E1201160408520B400C0F370B0B0C05350017101702170B10170304 +070C03070000120F150303140278190F19401950190309090B0E16030614076C1810F6ED +1739332F5D10F6ED1739332F002F3F1217392F71ED12392F2BED17393130012311231121 +11231123353335331521353315330135211505E3A8C6FD19C6A8A8C602E7C6A8FE92FD19 +0455FBAB02D9FD2704558CF0F0F0F0FEA8CCCC00000100130000045F0614001E00504030 +031D161D751D0317140E51111112180D08421B041201010D08150F021A0091201F206020 +02141517030B1A110F0D881F10F63232FD17325D10F6ED2F2F003F3C3F3FED123912392F +ED393931305D2123113426272E0123220607112311233533353315211521113E01333216 +15045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC63B5BE027C4D87262A294C3BFCBE +04F4869A9A86FEED4952DACD0002002C0000033307C8000B0025006DB9001BFFD040400B +10370E300B10370C0C15520F1C1F1C021C191C192252700F010F0F09043206030A033201 +0825280F0C1F0C020C1828190C276D080B5A0A1405025A19036D2610F432ED32FDED32E4 +332FED2F5DED003FED323FED32332F5DED33332F2F5DED332F31302B2B29013533112335 +2115231133130E01232226272E0123220607233E01333216171E013332363702D5FDB4C3 +C3024CC3C35E077D663453262D3C20302D0288037E683351282A431D2E31019804A19898 +FB5F0730989724262B2A5B4B88A6242528295B470002FFF200000241063C0003001D0054 +40347C0673130204040DAA1440090C37141114111AAA0707020501081DAD0440090F3704 +10AD117F1F011F9204001A117F010101881E10F65D32FD32ED5D2FED2F2BED003F3F332F +ED33332F2F2BED332F31305D21231133131406232226272E012322061523343633321617 +1E01333236350177BCBCCA6750283A1E202D17232170684E2F3220212C162421045D01DF +81821A202322454181821B1F2322483E0002005F000002FF073C000B000F004D40150E32 +0D0D09043206030A033201082F0F3F0F020F0EB8FFC040150B0D370E0F116D0A080B5A0A +140305025A0E036D1010F632F43210FDF43210E6332F2B2F5D003FFD323FFD32332FED31 +302901353311233521152311331321352102D5FDB4C3C3024CC3C32AFD6002A09804A198 +98FB5F060A9A0002FFFC0000023605D1000300070032401D025301010605057F00700202 +00027F0901099200041A027F050105880810F65D32FD32E65D2F2F5D002F3F332FED3130 +01213521032311330236FDC6023ABFBCBC05379AFA2F045D00020080000002DF07D3000B +00190059401F0C701201121216AA0F0F09043206030A0332010819290C400B0E370C1329 +12B8FFC040130B0F37120C1B6D080B5A0A1405025A12036D1A10F432ED32FDED32E4332F +2BED2F2BED003FED323FED32332FED332F5D333130290135331123352115231133131406 +232226353314163332363502D5FDB4C3C3024CC3C30A939C99979E454D49489804A19898 +FB5F073BA8CFCFA886726E8A00020001000002300668000D0011004840150006060A5003 +0310050F0D2900400B103700072906B8FFC040130B1037067F13011392000E1A067F0F01 +0F881210F65D32FD32E65D2F2BED2F2BED002F3F332FED332F3331300114062322263533 +1416333236350323113302308B8C8A8E924145414427BCBC06689AC0BE9C7A6B6283F998 +045D00010089FE5F031C05D10020004F402D1C20090C3709043206030A03320C01081717 +13531B0D1818102A1E1E0B02226D0A080B5A0A140305025A036D2110F4F43210FDF43210 +E61112392FED332F003FFD322F3F33FD323FFD3231302B21233533112335211523113315 +230E011514163332363733150E012322263534360174EBC3C3024CC3C3C2060942582141 +1309245122879A099804A19898FB5F981C29265150130B9E0A0BA08C22350002008EFE5F +024605DB0003001B0056401C0820090C371B1753070D014402400B0D3702030E050D1104 +04142A0AB8FFC040170B17370A0A0E7F1D011D9200600F1A01607F0E010E881C10F65DE4 +FDE4E65D11332F2BED332F002F333F3F2BED3FFD3231302B01233533130E012322263534 +3637113311230E0115141633323637330183D4D4C3245122859C2508BC3C060742582141 +13090518C3F8990A0B9E8E3F6F19040BFBA31A361B5150130B00FFFF002CFFEB034D0801 +0236002D0000011700D6FF6C01750014B1011AB8FFC040090B0E37001A160415252B2B35 +0002FFC2FE5902AF068C0015001C005540340A011C0102551B651B751B0318161A1B1B1A +1A123E150507070B40030D1A1A4F1301137F06010616121A1306160370150115921E10F4 +5D1732ED2F2F5D2F5D332F003FFD322F3FED332F332F1239395D31305D05140623222627 +35331E01333236373E01351123352137230B012313330209C8A828832C0A1C5F2D485816 +160DE901A5A69FB9B89BE4E31BC4C8100CB30B1C282828715103849EB40100FF00017B00 +FFFF00CDFE59057505D10236002E0000011600DCFB00000AB601001A0C0500252B35FFFF +00C1FE5904AF06140236004E0000011700DCFF7C00000011400C01301A401A02001A0C05 +0A252B5D3500000100C1000004AF045D000B007D40512802D801DB090309010F0D1F011D +021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A0802 +050A0507050105080B02600A700A020A0A00000D200D400D0208031A05890C10F4FD325D +11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0015D +7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B045DFDD102 +2FFDFC00000100C8FE59047605D1001A003F40240C20090C37111115530D0D0203043507 +01081010182A0A0A0105051C0F1C010414016C1B10F4ED5D11332F12392FED332F003F3C +ED3F3FFD322F31302B29011133112115211E011514062322262735331E01333236353426 +02BFFE09C602E8FEE30204B79225742D091A583268620605D1FADFB0122F18A2AC0E0CA0 +0A1A4E581E3E00010005FE5901E906140018003D40240A20090C370F0F13530B0D020104 +01080E0E082A1616017F1A011A92041A7F010101881910F45DFDE45D12392FFD322F003F +2F3F3FFD322F31302B2123113311331E011514062322262735331E013332363534260149 +8EBC6C0105AE8525642809184E285E52010614FA00123724A2AC0C0CA00B174F57153300 +FFFF00C8FE59053805D1023600310000011600DCFE000013400E01201630164016030016 +0A0400252B5D3500FFFF00B9FE59045F047C023600510000011600DC8B000013400E0100 +2310232023030023170D00252B5D3500000100C8FE59053805D10016009D401F00076107 +7107A107040C070B0C1B0736074607540765077507B001B0070A07B8FFC040510B113776 +06010F0102061F01150626013601340646014406560153066006790170060E0406015A01 +550602111115530D0D0207040806030A0104080110100A06010207130A78180F18401802 +0213046C1710F4ED5D10F4FD11393911332F2F003F33333F3C1239393FFD322F31300172 +715D5D002B5D71043501112311210111331114062322262735331E0133320480FD01B901 +330284B9CEB42751250B163A1E7F948A053EFACC05D1FBA00460FA18BFD10806A8050A00 +000100B9FE59045F047C00260045402B03150C191615751504100D084213040E050D081E +1E22531A0D1D1D021A1791281F28602802100B1A0D882710F4FD325D10F6ED332F003FFD +322F3F3F3FED123931305D0435113426272E012322060711231133153E01333216151114 +062322262735331E01333236373603A31218195E4B4DA84DBCBC58BC63B5BECCB4274E26 +0B163C1A4C6117162556024B4D87262A294C3BFCBE045D7C4952DACDFD0FBFCC0706A805 +0A262626FFFF0073FFE105DA0746023600320000011700D8009B0175000AB6020026270F +03252B35FFFF006AFFE1047105D1023600520000011600D8E300000AB602001A1B060025 +2B35FFFF0073FFE105DA0801023600320000011700D9009C0175000AB602002A240F0325 +2B35FFFF006AFFE10471068C023600520000011600D9E400000AB602001E180600252B35 +FFFF00C8FE59059805D1023600350000011600DCF600000AB602002420050D252B350001 +001BFE590372045D002700574034000D100D200D032120090C370C090F131317430A0F05 +1C090826260253220D25251F2A05050913132940297029020C1B1A09882810F4FD325D11 +332F11392FFD322F003FFD322F3F2F3F3CFD322F11123931302B5D1E0133323635342627 +231133153E013332161715232E012322060711331E011514062322262735333C4E285E52 +0102A6BC70AB59312C2C0A2A4F3657A24B840105AE8525642809FA174F57153323045DA5 +5A4B0507C10A094D3DFCFB123724A2AC0C0CA000FFFF0086FFE505020801023600360000 +011700D6004A0175000AB6010035311A00252B35FFFF006EFFE503D7068C023600560000 +011600D6AF00000F400A017F38010038341A00252B5D350000010000000004EE05D1000F +004140250D0A003203030F09043506030F0F111F114F11030B020B085B090D0009140204 +5B4F0501052F5DF432ED393910E4332F2F5D002F3FFD3212392FED393931300121352111 +21352115211121152111230214FEB4014CFDEC04EEFDEC014CFEB4C602E48F01AEB0B0FE +528FFD1C0001003EFFEA02FD059E0023006E40210420090D37181507510A0A0E030F140B +3E110F0E0523231F3F03094F257F250216B8FFC0401E090B3716160713008C250909070C +0A0E111504181A0C07400D103707882410F62B32ED17392F12392F10F63211392F2B5D00 +3FFD322F3F3333FD322F1112392FED393931302B250E012322263D012335331123353311 +331121152111211521151416171E01333236373302FD357D31ABB27F7F7F7FBC0184FE7C +012DFED30818164D4F2E64160A0A0E12B8CBA88601249E0141FEBF9EFEDC865358632B28 +251B0900FFFF00B2FFE1052907C8023600380000011700D700610175000AB601002B1E0D +1D252B35FFFF00B1FFE104570653023600580000011600D70600000AB601002417091625 +2B35FFFF00B2FFE105290746023600380000011700D800630175000AB6010020210D1D25 +2B35FFFF00B1FFE1045705D1023600580000011600D80100000AB60100191A0916252B35 +FFFF00B2FFE105290801023600380000011700D900630175000AB60100241E0D1D252B35 +FFFF00B1FFE10457068C023600580000011600D90100000AB601001D170916252B350001 +00B2FE5F052905D1003400634044231223183D093D2139224C094C214B22771377170A33 +20090C372E2E2A53320D1C24060D031534060A2F2F272A00060023030C1B141E76360F36 +1F364036030F140C6B3510F4ED5D10F6ED1217392FED332F003FED3F1239393FFD322F31 +302B5D053436372206232226272E01351133111416171E01333236373E01351133111406 +070E01070E011514163332363733150E012322260314050509190F8CD0475147C621272C +976A6B962D2721C647512D683D0405535A24511108344B2A8CA8741A271601494852E8A9 +037BFC7B798C394142414239936D038AFC85A2F1502C3B10143C17524E1B089F0E0C9F00 +000100B1FE5F0567045D002A005C40220B0619077A07032720090C370205150905114205 +0A010822221E53260D23231B2A29B8FFC04015091037292914021A17922C1F2C602C020B +1A08872B10F4ED5D10F4FD32322F2BED332F003FFD322F3F3FED3F3C123931302B5D0437 +350E01232226351133111416171E0133323637113311230E011514163332363733150E01 +23222635340395065FAE69B0C4BC101A1B565249AD4BBC1E0607535A24511108344B2A8C +A81D1D7C4B50D7D002D5FD8455792B2C284C3B0342FBA31B351B524E1B089F0E0CA08D24 +FFFF005C0000078D08010236003A0000011700D601690175000AB60100110D0600252B35 +FFFF005600000636068C0236005A0000011700D600BB0000000AB60100110D0600252B35 +FFFF0006000004E608010236003C0000011700D6FFEE0175000AB601000D090500252B35 +FFFF003DFE64047F068C0236005C0000011600D6DD00000AB601000C080400252B350001 +00B900000308061E0010002440140000043F0D0009080000081A6F097F090209891110F6 +5DED332F003F3FFD322F313001232E012322061511231134363332161703080A1F642679 +67BCC2BF3F652A055E09136B8CFB7D0482C2DA0C08000004001A0000055E08000012001E +00210025013F40862B20372040205A18551A501E55206918651A651E0A180B170D4A0646 +125906561278027703082020211F02370187010201140012002021033704870402041405 +05060606091226062912370638124606491258127A0675120B24240C702501251651A00C +F00C02060C160C3F0CF00C040C03340F2170210221212006120405201C401C020C1CB8FF +C0406C393937501C701C021C01050824400E10370F242F240222222440090D372413290F +0F2F0F4F0F8F0F9F0F050F19290009200940098009900905090F270106090F122405050C +0024003A0042005A006A0074000700006E270F27010A052B0535054D05550565057B0507 +05642610E65D5D10E62F5D1217395D2F5DED2F5DED2F2B332F5D2B003F3C2F5D2B335D12 +17392F5DED2F5D72ED2F5D12392F3130015D8710FD5DC0C0C08710FD5DC0C008C0015D00 +5D212303210323012E013534363332161514060727342623220615141633323613090207 +2337055ED394FD8094C901F83139A17373A039302A47393948493838487DFEFEFEFD021D +F39595019FFE6105571F65406D90906D40651FC4364B4A37394B4CFC6602CBFD3505B7CD +CD0000040068FFE1041D07330032003F004B004F00D6B50C0A190A0230B8FFC040880B0E +37590E51215C38690E63216F397B0A7A1474207B380A0208343D3011401102111149084F +4F4E4E43AA062916299F290329400B0D37292F0123494F1F011F291F184149043D41080A +01084E400D10374C4C4E40090C374E4E2640292F2C3F2C022C2C26297F468F4602464600 +0F1F011F1134021A001F0B0091510F511F513F51033A1B0B855010F6ED5D10E6113910FD +32322F5D12392F5DED332F5DED12392F2B332F2B003F3FED3FED33332F5D123911392F2B +5DED332F332F1112392F5DED123931305D012B5D2123350E01070E012322263534363736 +2437353426272E01232206070E010723353E01372E01353436333216151406071E011503 +110E01070E0115141633323603342623220615141633323613032313041DBB1955282F7A +5297D26D6566011EA42E29296D3F3A692A3150130A2369311C259F73739E2E237D87BB56 +E9445164747763A443473939484938384895F3959577113D12171FC89B7F9D2D2D20081D +4156171811140B0D1D07BF0914081E532E6D90906D335B1F22AA9AFE1D01370514131761 +5560614D042C364B4A37394C4D0262FEEE011200FFFF000E0000076D0801023600900000 +0117008D01DE01750011400C020F164F16020016140607252B5D3500FFFF0068FFE3073F +068C023600A000000117008D01690000000AB6030055541B00252B35FFFF0073FF6E05DA +08010236009100000117008D007801750013400E03303A403A603A03003A3B0F00252B5D +3500FFFF005DFF6C0471068C023600A100000116008DE2000011400C03302E402E02002E +2F0C00252B5D35000001015A03400249045D00030014400A01560205032D000201022F5D +ED003FED3130012311330249EFEF0340011DFFFF005C0000078D08010236003A00000117 +004301730175000AB60100100D0600252B35FFFF005600000636068C0236005A00000117 +004300C30000000AB60100100D0600252B35FFFF005C0000078D08010236003A00000117 +008D01690175000AB601000F100600252B35FFFF005600000636068C0236005A00000117 +008D00BF0000000AB601000F100600252B35FFFF005C0000078D07500236003A00000117 +008E016C01750020B10213B8FFC040120D10370F13010100135F13020013100600252B5D +355D2B35FFFF00560000063605DB0236005A00000117008E00BF0000001EB10213B8FFC0 +40100D10370F1301010013010013100600252B5D355D2B35FFFF0006000004E608010236 +003C000001170043000A01750014B1010AB8FFC040090D1037000A0A0500252B2B35FFFF +003DFE64047F068C0236005C000001160043FF000015401001200B300B600B700B04000B +090400252B5D35000001FFED03E40186061300030032B90003FFE4B70D10370101030100 +B8FFAEB30D103700B8FFE840090A0C3700007F0201022F5D332F2B2B003F332F3130012B +010323010186A5F4010F0613FDD1022F0001FFD00685051606FD00030011B60150020000 +05022F11332F002FED3130012135210516FABA0546068578000100890000048B05EE0028 +00934063411253125B1A6312730273129024B603B6240923200551000810082008030808 +1F1C09510F0C1F0C3F0C4F0C040C141418490C01100202284A01080F2A1F2A022327021C +1F20050C08215F1D6F1D7F1D031D0A061306081D13040220004000020000022F332F5D12 +17392F2F332F5D332F3333FD321139395D003FFD323F1239ED332F2F5DED3939332F5DED +393931305D2901353E0137233533352335333534123332161715232E012322061D012115 +21152115210E01071521048BFBFE67620E9DA4A4A3FDCD6998400A3E98568C8B016CFE93 +016DFE8F0F705A0345CF1B817B868C86A7C801012211CE2A30A59094868C86659F2C0B00 +000200B1FFE60511053200180022005F4013380D391C491C580D6A217A21060C100B0D37 +07B8FFF0402A090A37191F290F2615690F790F05013222220F1F32150B0B07330F090C0C +1913260001000024220114122FFD3211332F5DED332F003FED332F2FED12392FED5D2B2B +31305D01211416171E013332363733150E0123200011100021320011272E01272E012322 +06070511FC66423C3AA3607AEA590D82C07FFEC9FEAD01420113FF010CBE02262928875A +9FD50D027884B53E3C3B5648D53637015B0141013A0176FECDFEE92A549133333AD4B100 +FFFF00ABFFE1078305D50036023B9200003700BB023700000117024103F2FDC60016400C +040302100A010B400B7F0B025D1135003F353535FFFF008CFFE107A405ED0036023DA600 +003700BB02910000011702410413FDC600384026040302360A0403023900392039403980 +39FF3905013100315B317B3103000900093F094F09035D11355D11355D11353535003F35 +3535FFFF008AFFE107A405DA0036023FA400003700BB02910000011702410413FDC60038 +4026040302320A040302350035203540358035FF3505012D002D5B2D7B2D03000900093F +094F09035D11355D11355D11353535003F353535FFFF0099FFE1076F05DA00360240A600 +003700BB023100000117024103DEFDC6003640240403020E0A040302116F118011FF1103 +01092B093B0944095B097F0905000400043F04025D11355D11355D11353535003F353535 +00010061FE5901FA00880003002CB90002FFE840170D10370318090C3700180910370F01 +010101000D0202002F332F003F332F5D3130012B2B2B1B01330161A5F4FEF1FE59022FFD +D10000010161FE59037000140014002440150B021B012B013901041207070B53030D0E2A +0000062F332FED003FFD322F2F31305D0514062322262735331E0133323635342627331E +010370B79225742D091A58326862060399020659A2AC0E0CA00A1A4E581D491913340001 +0212050C0305068C000300144009030302002D100301032F5DED002F332F313001032303 +0305319131068CFE8001800000030100050C0418068C00030007000B003F401506050AAF +090902000002072B0640090A37060A2B0BB8FFC0400C090B370B06002D0B100301032F5D +33FD322F2BED2F2BED002F332F12392FED3939313001032303012335330523353302FD31 +803101FDBFBFFDA7BFBF068CFE800180FE8CC3C3C300FFFF00070000055E05D102360024 +00000117019DFDF5FF450012400A020E03020E1F0E4F0E025D1135003F35FFFF00000000 +059005D10037002800F300000117019DFDEEFF4500204014010F030F111011401103011F +0C010C00400101012F5D352F5D355D003F35FFFF00000000062E05D10037002B00F30000 +0117019DFDEEFF4500204014010F030F112011401103011F0C010C00400501052F5D352F +5D355D003F35FFFF0000000003C805D10037002C00F300000117019DFDEEFF4500244018 +010F03011F0C010C00400201020F111F11401150116011055D2F5D352F5D35003F35FFFF +0000FFE1069905F00037003200BF00000117019DFDEEFF45002240150227030F29010227 +1F270101000F000F100F700F035D1135355D11355D003F35FFFF00000000060105D10037 +003C011B00000117019DFDEEFF45002440180109030F0E1F0E2F0E03011F090109001F04 +4004700403042F5D352F5D355D003F35FFFF0000000006D705F0003701BB00B700000117 +019DFDEEFF45002A401E012B03011F2B012B00001C101C201C031C0F2D202D502D602D70 +2D8F2D065D2F5D35115D35003F350004FFCB00000267068C00030007000B000F005C401D +0A090FAF0C0C06070706060205010B2A0A40090F370A0A0404000E2A0FB8FFC04015090F +370F0F0707017F11011192001A7F010101881010F65DFDED5D11332F332F2BED11332F33 +2F2BED002F3F332F332F12392FED39393130212311331303230301233533052335330177 +BCBC0438543801B0ABABFE0FABAB045D022FFE800180FE8CC3C3C300FFFF001A0000055E +05D1021600240000FFFF00C80000052B05D10216002500000002001A0000058605D10003 +00060058403C49056A050205041A000003061A01010215001A0125002A0145004A014B02 +4403590256036B0264037B0275030E020305030000080105010203065401002FED3F1239 +012F11332F17395D31308710FD8710FD04C0005D2901012109020586FA94023201080127 +FE50FE5105D1FAD7047BFB85FFFF00C80000049D05D1021600280000FFFF007E00000508 +05D10216003D0000FFFF00C80000053B05D10216002B0000FFFF0089000002D505D10216 +002C0000FFFF00CD0000057505D10216002E00000001001A0000056205D10006006C404E +0902390258020378017703020203020114000600020314040405490546067C0573060405 +030405002400390042005A006A007400070000080F08010F08010A042B0436044D045504 +65047B0407042F5D5D5D11332F5D002F3F3130015D8710FDC08710FD08C0015D005D2123 +09012301330562D5FE2CFE2CCB022CF00505FAFB05D1FFFF00C8000005F605D102160030 +0000FFFF00C80000053805D102160031000000030072000004BF05D100030007000B0047 +40130535060609013502030A350908054009133704B8FFC0401609133704050504030204 +0908720D0F0D1F0D0209680C10E65D10E41117392F2F2B2B003FED3FED12392FED313001 +213521032135211321352104BFFBB3044D34FC1B03E534FBB3044D0521B0FD08B0FC77B0 +FFFF0073FFE105DA05F0021600320000000100C80000053B05D100070027401703350603 +010501140078090F0940095009030414056C0810F6ED5D10F6ED002F333FED3130212311 +2111231121053BC6FD19C604730521FADF05D100FFFF00C80000049605D1021600330000 +000100760000050005D1000C00EB404709040908450B540B6409640A660B9309930A960B +A409A30AA70B0D0608060B1608160B28032708340A340B430A430B5903550B670B760B8B +0399049908B804B808EB04EB08150BB8FFC0B32529370AB8FFC0B325293709B8FFC0B325 +293708B8FFC04030262937030203080908B3040304030B0A0BB302030264048D02020403 +0203080B3501083505030403A009B009D0090309B8FFC04023191E371009200960097209 +D009E00906090703040B0908070602000010000200000E022F11332F5D1217392F2F5D2B +71332F003FED2FED11173931305D011087ED87C01087ED8708C0012B2B2B2B5D71290135 +090135211521011501210500FB76026CFDA80448FCC0024AFD8A039AB80258020EB3B0FE +061AFDA3FFFF0000000004EE05D1021600370000FFFF0006000004E605D10216003C0000 +FFFF00440000053805D10216003B0000000100B30000064405D10023006240402515251E +021B067518011834380948096F090309192209030810030822142311141023071B180714 +108008A008B0080320255025702503080825240F253F25025D1112392F5D5DC4ED393910 +C42FED2FED002F3F1217392F5DED5D393931305D011406070E01071123112E01272E0135 +1133111416171E01171133113E01373E013511330644514D50E197C59AE24B4E51C63B34 +359A62C5619C353836C6038E9DD74345460AFEBE01420B484245D69C0243FDA66D8E2C2D +2F0703E4FC1C082D2E318571025A0001006C0000062005F00027007D40125B195B256C1A +641D64216C24791A79240821B8FFC0B3090B371DB8FFC0403B090B373002301440024014 +041925140204160B341F02261835011608251202191214081502141C272222290F29010F +291F299029A029040E15171C2FC4ED5D5D11332FC4123939ED2FED2FED003F3CFD3C3FED +1217395D31302B2B5D2901113E01373E01353426232206151416171E0117112135213526 +023510002120001114020715210620FDC03C772C2D34FEDCDCFE342D2D763CFDC0019A9D +CB0177013101310177CB9D019A01832658393B9F6ACEF9F9CE6A9F3B395826FE7DAE7C5A +0138C20114015EFEA2FEECC2FEC85A7CFFFF007E000002E207500236002C00000117008E +FF240175001940130200104010501060107010050100100D0409252B355D3500FFFF0006 +000004E607500236003C00000117008EFFED01750019401302000E400E500E600E700E05 +01000E090500252B355D3500FFFF006CFFE10443068C0236012E00000116019DE200000A +B6020024210800252B35FFFF006DFFE603EE068C0236013000000116019DCC000013400E +014041504170410300413E1219252B5D3500FFFF00B9FE64045F068C023601C600000116 +019D1D00000AB601001A170E16252B35FFFF00A000000193068C023600D500000117019D +FE8E0000000BB601000704020325012B3500FFFF00B1FFE2045C068C023601D100000116 +019EFB00000F400903020100221F0717252B35353500000200B9FE64048D061400180037 +0077404F16200D1037070F4A1B4326433756267929062E200D0F3733200D103705200D10 +371615203E5F21012121032B3E0C0135400309080C15120F200120281B12122008191B00 +90391F390132071A08883810F6FD325D10F6ED1239392FED2F5D1239003F3FED3FED1239 +2F5DED393931302B2B2B5D012B011400232226271123113436333216171E011514060715 +1E01073426272E012B0135333236373E01353426232206070E0115111E01333236048DFE +F3CD4FB03FBCFDDF5A953B39448B7F9FBCC2453A3B924924244282272E2D8A6D49682120 +1E42964895A101BCCAFEF82C2AFE2405D2E0FE2B2E2B8A5B7FBD25111AC797596F1F2016 +A01D1E2262557074352C2C753EFCA2261F9D0001003DFE64047F045D0008006940497507 +01070607081A00010007061A04050505030C0A001A002A004A0059006900750007000505 +15052505450556056605730507050001011A059004A0040204040A091F0A4F0A5F0A035D +1112392F5DC4ED10C42F5D2F5D003F3F31300187FDC08710FD08C0005D09011123110133 +0901047FFE37BCFE43CC0157015A045DFBDBFE2C01D40425FCC4033C0001006CFE6403D6 +0614002F0058401D4600570065287F1178207D21061D1A3E1B012D3F0F070C1A1A19121C +07B8FFE04018090C37000701071C070BB40303310F313F3102231B12853010F6ED5D1133 +2FED33332F5D2B2F1239392F003F2FED3FED3931305D251E011514060723353E01353426 +2B012226353412373E013735213521150E01070602151416171E01171E013B013216039A +201C5A43B35A4C3D2F91E5DE5C4E4BC56CFE3402E875E55A5972060C0A31272479385647 +664B285B2854A93F0E4F7745394CE8E58C01007770CD5E099E874ECE7875FEE88F224828 +264B18160534000100B9FE64045F047C00160038402303151615731503100D084213040E +05010C0D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3F3F3FED12 +3931305D0123113426272E012322060711231133153E0133321615045FBC1218195E4B4D +A84DBCBC58BC63B5BEFE6404184D87262A294C3BFCBE045D7C4952DACD0000030089FFE1 +04750614001700240031006CB9002FFFD6B30A0D3729B8FFD640400A0D37212A0B0D371B +2A0B0D37662C01263E0F241F24022424061E3E3A124A120212012C3E3506450602060A25 +181A0000331F333F330224261A800C900C020C2F5DFD325D11332FFD32003F5DED3F5DED +12392F5DED5D31302B2B2B2B011406070E01232226272E01353412373E01333216171612 +072E01272E01232206070E010705211416171E01333236373E0104752E243AD29898D23A +252D2D2639D39797D339252EBD043120296C4F4F6C29222F040272FD8E2E2428704F4F70 +28242E0300BEFD548789898754FDBEAE010753828A8A8254FEFA548FD6364639394637D5 +8FA18EE93E453E3E453EE900FFFF00BB00000177045D021600D50000000100C1000004A8 +045F001800D3403B0601060216182618451856186618071C023A0169027A029701A602A6 +18C70208020203C60101860101011A001800090801F90801080B0A03090109B8FFEE4040 +10183709B402181703177F0301091808020305010C1010143F0C05060505011A172A1736 +178017A417051517251777179417E917F917060917180201050F0F00B8FFF04013090E37 +00001A0F1A1F1A3F1A0308031A05891910F6FD3C5D11332F2B332F17395D71002F2F3F3F +FD322F111217395D3130018710C0C07AF52B7118C0C004C07172018710FD5D7108C0015D +71212301071123113311013E013332163315232E01232206070304A8F8FE3D70BCBC0180 +487F3F1C3C070B102F0D2F4D1DFB01E96DFE84045DFDDA01A14F3802A602022F21FEF100 +0001003D0000047F061400070085401305040502020306011A07000002031A04040505B8 +FFF0401C0C10372B002604200703050402030601000806680701070506030400B8FFC040 +260910370C001C004B005A006A00790006008D090F090103041304440455046504760406 +04820810E65D5D10F65D2B1117395D2F003F3F17393130015D2B8710FDC01087FDC008C0 +08C0012123090123010333047FCDFEB8FE97C401D1D7D3033DFCC3042001F400000100B9 +FE640465045D00150046402C12200B0D3703200B0D37080205140B051042050900080A0C +0102131A0092171F1760179017030D091A0A881610F6FD3C5D10F6FD3939003F3F3FED3F +3C12393931302B2B2123350E012322262711231133111E013332363711330465BA4A874E +4B7854BCBC209E5B5D8836BC764E3D3650FDF305F9FCBA2752433C034000FFFF003D0000 +047F045D02160059000000010068FE64041106140046008A403C0F020F06090E1B0E241E +24283415361E36284428473C562D563C691779170F1918333F32320C24213D22013F3F0C +030C191C3232232121122B1B1C04B8FFD6400E090C37040408B4231C1280000100B8FFC0 +400B090C370000483A1B12854710F4ED11332F2B5D123939ED332F2B2FED12392F2F332F +1239003F2FED3FFD3212392FED393931305D0514060723353E013534262B012226272E01 +353436373E0137352E01353436373523352115212206070E01151416171E013B01152122 +06070E01151416171E013B013216171E0104115B42B45C4B3A2E8C8CB93F424532302C89 +4C7D96575AE40338FF00446D302D3641332D7650AAFED942692F2B334B403F995A1C4467 +211F226055A83F0E4F7844374E36393C97584E84353145130B1CA56853873A069A9E1D22 +2066434F621A1716A52827256A3B66721919072F25235F00FFFF006AFFE10471047C0216 +00520000000200B9FE640494047C0011001E0042402C3A17351E4A17431E560D05060315 +3E0F041C400309080C121B3A004A00020090201F206F200219071A08881F10F4FD325D10 +F65DED003F3FED3FED123931305D011000232226271123113436373E0133320003342623 +220615111E013332360494FEEBDE41A348BC47423EBB66F30100C2A0929E8D49774BA2B0 +0241FEFEFEAB242BFE2B04227BB9423E42FEDAFEDFDACCC0B6FE6D221DDE00010069FE64 +03FA04770029005C40120C020C06201325233614362340237A1F0817B8FFE040140E1037 +3F194F190219191D3F1504030C263F0B04B8FFD64011090C370418180408B400002B201B +12852A10F4ED11332FED33332F2F2B002FED3F3FED332F5D31302B5D0514060723353E01 +3534262B012226272E013510002132161715232E01232206151416171E013B01321603FA +5E3EB1564D3C2D5C75C64B49530137010354A0430C5E9D44A6BD393232814B64738E6057 +AA3B0E4B7947364F3C4342D092010E0144251BD33E32EEC1708E2D2C2799000100B1FFE2 +045C045D00170030401F1607050F3E0903560366037903880305030A151A0091191F1901 +091A06871810F6ED5D10F6ED003F5DED3F333130011406232226351133111416171E0133 +3236373E01351133045CF4E2DFF6BC14201F6B5C56731E1D15BC0197DADBD7DE02C6FD7F +5D782E2B2B2C2C2C7B5A028100010030FE640488045D000B00A240492A02250839023408 +4B02440879020710091A0A0B0A071A060506011A000B00031A04050402050B080A000606 +0A0405064A0445066A0465067A04770608040C0605080B050204040A00B8FFE040100A10 +3700000D2F0D010604200A1037042F2BC45D11332F2BC4121739003F3F5D111739313001 +8710ED8710ED8710ED8710ED4B535840140B030A070002030A0601080409070005040906 +010F0F0F0F59005D0123090123090133090133010488D5FEA6FEA2CB01BCFE4FD5014F01 +53CBFE4FFE64026BFD95030202F7FDA80258FD11000100B0FE6405E3045D0023006B4047 +1B062618751802183D39094909020919220903081005080C221A3F237F230223111A3010 +7010021023071B18071A109008C008025025602502080825240F25010F251F253F25035D +5D1112392F5D5DC4ED393910C42F5DED2F5DED003F3F1217392F5DED5D39393130011406 +070E01071123112E01272E01351133111416171E01171133113E01373E0135113305E360 +4F52C873BB73C753505FBC4B34388643BB4386383B44BC01BE72A835373705FE68019806 +343936A772029FFD9C718723261E0403C7FC39051C27287B7802640000010071FFE20611 +045D003D0079402D361F3632441F4432551F55326804680F691A69377D1A7D370C283B28 +0903061605210D303E060A3A400C0E3718B8FFC040240C0E37361B001B1B13003A29090A +291A18139028A028C0280328283F3E1F3F3F3F6F3F035D1112392F5DC4C4ED393910C4C4 +2FED2FED2B2B003FED39393F1217392F31305D011406070E0123222627230E0123222627 +2E013534123733150602151416171E01333236373E01371133111E01171E01333236373E +01353402273533161206112F33379D7360A2250627946671A333332F7290E4879F101E1A +5D47334714161D06BA091C1518393A465E1B19169D89E4907201F760C14B505963434462 +5D4C4CBF61AA0115A7116CFECCB742713F37491911122C0F0248FDB8112C111316473937 +7A41B601346D11A7FEEBFFFF00050000022D05DB021600770000FFFF00B1FFE2045C05DB +023601D100000116008EFB000015400F02301D501D601D0301001D180717252B355D3500 +FFFF006AFFE10471068C0236005200000116019DE200000AB602001B180600252B35FFFF +00B1FFE2045C068C023601D100000116019DFB00000AB601001B180717252B35FFFF0071 +FFE20611068C023601D400000117019D00B60000000AB60100413E1300252B35FFFF00C8 +0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500 +0001FFFF0000060705D1002500614025652476240216341F1F061E1A351B03093506182F +073F074F077F0704070717590F010F1500B8FFC04014090D370000270F27011A1F1D011D +1D1F17141A182F33FD32322F5D2F5D11332F2BED5D12392F5D002F2FED3FFD3212392FED +31305D011406070E012B0135333236373E01353426272E01232111231121352115211121 +3216171E010607534957AF8A6E5D5B782F38343135329583FEEBC6FE520468FE0C015398 +BF554C4901CC6CB13A4530B11022286F4E4B73232213FD220521B0B0FE6824423BAEFFFF +00C80000048A07ED023601EB00000117008D003501610015401001300840086008700804 +0008070405252B5D350000010073FFE5053905EC002A006A400C3A1C491C58057606790C +0511B8FFE040370A103701200A103720341D1D0F032A2A26340309131317340F021E1E13 +000010000200002C0F2C010F2C1F2C2F2C3F2C041D206C09682B10F6FD325D5D11332F5D +33332F003FED332F3FED332F1112392FED31302B2B5D250E012322242726023534123736 +243332161715232E01232206070E01072115211416171E013332363733053963EC91A9FE +EE61616969625F0112A98CF65F104EF98D6DAE4846580F0334FCC258474AC4708AF75010 +4127356863630120B7AF011F66626C3427DF40523A3B3BAD72AD8BD94648494A4300FFFF +0086FFE5050205EC021600360000FFFF0089000002D505D10216002C0000FFFF007E0000 +02E207500236002C00000117008EFF240175001940130200104010501060107010050100 +100D0409252B355D3500FFFF002CFFEB02EA05D10216002D000000020012FFFD08A205D1 +000E003D0066B3460C0130B8FFACB30A10371EB8FFC0401D0B0E37073437371618353503 +28282C352408341637081416163500150FB8FFF440110E11370F713F2F3F011813003501 +3535282F332F5DED5D10F62BFD11392FFD32002FED2FFD322F3FED12392FED31302B2B5D +013426272E01232111213236373E01371406070E01232111210E01070602070E01070E01 +2322262335331E01333236373612133612372111213216171E0107D33235379083FEEC01 +0F858F363834CF554754C098FDEEFDF0030B0308251D1D492F306544153C0C0E0A1E0F24 +401647430E050B040391015298C0554C4901C94B72232510FDCB1A252769556CB0374238 +052171D955D6FEEC595A6B2B2C2603C001021617470146012D62014487FDB823423BAE00 +000200C80000088305D1000E002700554020171E07342121161F1B030834161A560F0120 +1F081400166F160216161900150FB8FFF4400F0E11370F71294029011D19141A6C2810F6 +FD325D10F62BFD11392F5DED39395D002F2FED3F3312392FED39393130013426272E0123 +2111213236373E01371406070E0123211121112311331121113311213216171E0107B432 +35379083FEEC010F858F363834CF554754C098FDEEFD65C6C6029BC6015298C0554C4901 +C94B72232510FDCB1A252769556CB037423802DEFD2205D1FDB80248FDB823423BAE0001 +FFFF000005FD05D1001D00504032000E48175817600E620F700E700F0708011A350B0B01 +07033504031301131412121F5F067F0602060306070014037F0101012F5D33FD32322F2F +5D11332FED002F333FFD3212392FED123931305D2123112135211521113E01333216171E +01151123113426272E01232206070273C6FE520468FE0C5FF66765AA3D3D45C6161E2079 +646AC3660521B0B0FE2D1F33323534A373FE11018C4A8C2B2E312622FFFF00CD00000575 +07ED023601F200000117008D003C01610010400A01702301002321050025012B5D350002 +0006FFF904E6078F001A002800AF405A29033801461955140419191A1814171617161716 +191A130001001617181A010500070B0B0F35071B0F21702102212175250125AA0F1E011E +1E0003281A1B221A702101211B2100700A010A360156016501760104160A01031700B8FF +E0401409103700002A502A012A400910371720091037172F2B2B5D11332F2B1217395D2F +5D1139392F5DED2FED003F332F5DED5D332F5D332FED322F11121739018710FDC008C001 +8710FD08C03130005D09010E01070E012322262735331E01333236373E013F0101330901 +030E0123222627331E013332363704E6FDCA225D3634612D2872100E0F462D14481C203F +1624FDD6DB01B301862105C9A8A8C905B602605E5F5F0205D1FB1B4C621B19110801B902 +09060B0C34324F044FFC92036E01BEA6A8A8A67063627100000100C8FEAF053B05D1000B +0032401C060203043409000B0913000002061407780D400D700D020314026C0C10F6ED5D +10F6ED12392FED002F2F33ED3F33313029011133112111331121112302A4FE24C602E7C6 +FE24BB05D1FADB0525FA2FFEAF00FFFF001A0000055E05D1021600240000000200C80000 +052C05D100120021003E40256311011A340C0C070B3508031B3407080A0A131556000100 +71230F234023020C1B14076C2210F6FD325D10F45DED332F003FED3FED12392FED31305D +011406070E0123211121152111213216171E01073426272E01232111213236373E01052C +554754C098FDE403E5FCE1015C98C0554C49CF3235379083FEE20119858F36383401CD6C +B037423805D1B0FE6823423BAE724B72232510FDCB1A25276900FFFF00C80000052B05D1 +021600250000000100C80000048A05D10005001F401003013504030000070F0701021403 +6C0610F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D10002 +000AFEAF059E05D1000D00130049402A09121A124A110310340A030C1307340301051013 +0A0A070E140C0C0113200001000015131307070413052FED392FED11332F5DED392FED12 +392FED002F332FFD32323FED31305D01231121112311333612112111332111210A010705 +9EBCFBE4BC78829B03728DFEADFE0E0E9476FEAF0155FEAB0201D602B1019AFADF0475FE +9BFDAFBFFFFF00C80000049D05D102160028000000010020000007A805D1003700C7402E +093318332933401D40244135541D54247518711D73240B27133333351A130E0C0E020116 +09103701130037000708B8FFEA405A091037081309090A271F1A032C223237070A0C0E33 +35072C02142D350409021521052C03002F0A20375F0A50376F0A6037062C2C0137022733 +350600C5220414051515080A070C0E1A0609C51F0505393810393F395F397F39045D1112 +392F33F41739322F10FD32F41739322F5D002F3F1739FD322F121739FD111739018710FD +2BC08710FD2BC08710FD8710FD3130005D21230123112311230123012E01272E01272E01 +2B0135333216171E01171E01171133113E01373E01373E013B0115232206070E01070E01 +0707A8F2FDF469C46BFDF4E6025158682013251C1B533C3C47A7B23D0B1E0F2C8F56C45C +912E121D093CB5A5473C424B1E1D25132A7D3E02A9FD5702A9FD5702FE3A9C693D571C1B +18B17FAD1E5824696608029DFD610663702C5519AC80B1171C1B5B3A8587270000010051 +FFE5048505EC0040007F40145401583B6701693B7F0B7F0C7031703274380932B8FFE040 +3F0B10370B200B10373E3D1D3420200934703001303029343402100D7F0D020D0D113409 +0A3D1E0B0D37171E0B0D37236C3A1E1E3D3A030C171503734231310C2F332F10F6ED1217 +392F2FED2B2B003FED332F5D3FED332F5D1112392FED393931302B2B5D011E0115140607 +0E012322262735331E01333236373E01353426272E012B0135333236353426272E012322 +06070E010723353E01333216171E0115140607151E010416303F5B4650E68593FB4A0F63 +F97148A83436313C33339159C9B3ADD2352E2D6F4C4E843B3064170D4BF87E7BB14B4E52 +A37D347602CD2A816669AA3C4444371EDE3B4B2A292D6F454F651F1E1BA97F7836521818 +151E1411340DDB2036272C30885A7FB01B0F092F000100C80000053905D1000900644023 +0B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D07B8 +FFE840240B0F3702100C0F3707060102040308030308030807021400780B0F0B400B0207 +14046C0A10F6ED5D10F6FD113939003F3F1217392B2B31305D7121231101231133110133 +0539C5FD1CC8C502DBD104A9FB5705D1FB690497000200C800000539078F000900170093 +40320B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D +0A0F10701002101014AA0F0D010D0D07B8FFE840330B0F3702100C0F3707060102040308 +030308171A500A600A020A111A100A10000403080702140078190F194019020714046C18 +10F6ED5D10F6ED113939111239392FED2F5DED003F3F1217392B2B332F5DED332F5D3331 +305D7121231101231133110133030E0123222627331E01333236370539C5FD1CC8C502DB +D1B505C9A8A8C905B602605E5F5F0204A9FB5705D1FB69049701BEA6A8A8A67063627100 +000100CD0000057505D1002000AF407909011F01290127203A0137204B0147205C016500 +6720760074200D1F200A0D370C200A0D370202038801C8010201B30020001E661B861B02 +1B13120D120D121B1E04152002322F08010808000716351503070305000D121B1E200504 +4F150115150F2220003000400004500001006E22402201080414056C2110F6FD325D10F6 +5D5D322F5D121739002F2F3F3FED1112392F5DFD39121739018710FD5DC031300187107A +FD5D1808C0012B2B5D2123012311231133113E01373E01373E01373E013B011523220607 +0E01070E01070575FEFDA387C6C6335A28284E1E0D231245B9B44F53454E1F1D2B17346B +5A02A7FD5905D1FD6401121917553E1B522DA686B1191D1A583B847C2E0000010012FFFD +051805D10021003DB9001BFFACB309103709B8FFC0401A0B0E370335200301131317350F +01140078238F230103132020122F332FED5D10F6ED002FFD322F2F3FED31302B2B212311 +210E01070602070E01070E012322262335331E0133323637361213361237210518C6FDE6 +030B0308251D1D492F306544153C0C0E0A1E0F24401647430E050B04039B052171D955D6 +FEEC595A6B2B2C2603C001021617470146012D6201448700FFFF00C8000005F605D10216 +00300000FFFF00C80000053B05D10216002B0000FFFF0073FFE105DA05F0021600320000 +000100C80000053B05D100070027401703350603010501140078090F0940095009030414 +056C0810F6ED5D10F6ED002F333FED31302123112111231121053BC6FD19C604730521FA +DF05D100FFFF00C80000049605D1021600330000FFFF0073FFE5054605EC021600260000 +FFFF0000000004EE05D102160037000000010006FFF904E605D1001A0080403C29033801 +461955140419191A1814171617161716191A130001001617181A010500070B0B0F350700 +03700A010A360156016501760104160A01031700B8FFE0401409103700001C501C011C40 +0910371720091037172F2B2B5D11332F2B1217395D2F5D003F2FFD322F11121739018710 +FDC008C0018710FD08C03130005D09010E01070E012322262735331E01333236373E013F +010133090104E6FDCA225D3634612D2872100E0F462D14481C203F1624FDD6DB01B30186 +05D1FB1B4C621B19110801B90209060B0C34324F044FFC92036E00030069FFF0062405E1 +001D002A00370058403624182C321525062B32091509081603082A1E253265006A0F041E +150032150F00072B1518250407140F080839381F393F396F399039045D1112392FC4ED17 +3910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01071523352E01 +272E01353436373E01373533151E01171E01073426272E0127113E01373E0101110E0107 +0E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F4B57CE403B3A +8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A524AD88C88CC +4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01363737AA6170 +B63A2D3CFFFF00440000053805D10216003B0000000100C8FEAF05BE05D1000B0032401C +0602030B08043501080514080800130D40090B370A0A0D0414016C0C10F6ED11332F2BED +392FED003FFD322F3F3331302901113311211133113311230502FBC6C602DDC68DBC05D1 +FADD0523FADDFE010001008E000004EA05D10019003B40243511451154116C0974160502 +0C1435050500180C030017011400781B0F1B010D140C6A1A10F6ED5D10F6FD32002F3F33 +12392FED123931305D2123110E01232226272E01351133111416171E0133323637113304 +EAC681DD6463AC3F3F47C6142323726B71D652C60276282A313535A47201FCFE67577930 +2F2F281E02B1000100C80000077605D1000B003640200A06020308043401091400C60814 +05041401C605050D0C1F0D3F0D500D700D045D1112392FF4ED10FDF4ED002FFD323F3333 +31302901113311211133112111330776F952C6022EC6022EC605D1FADB0525FADB052500 +000100C8FEAF080305D1000F004140260A0602030C080434010F0D13000009140CC60814 +05041401C6050511101F113F1150117011045D1112392FF4ED10FDF4ED332FED002F2FFD +32323F33333130290111331121113311211133113311230747F981C6022EC6022EC68DBC +05D1FADB0525FADB0525FADBFE0300020000000005F405D1000E00210046401D07341B1B +1618351903083416560F011B08144F167F160216161900150FB8FFF4400A0E11370F7123 +0F2301192F5D10F62BFD11392F5DFD325D002FED3FED12392FED3130013426272E012321 +11213236373E01371406070E0123211121352111213216171E0105253235379083FEEC01 +0F858F363834CF554754C098FDEEFE660260015298C0554C4901C94B72232510FDCB1A25 +2769556CB03742380521B0FDB823423BAE00000300C80000069505D1000E001F00230055 +4016440D0107341919161703083416220321560F0100150FB8FFF4B30E11370FB8FFC040 +150C10370F0F21142078250F25702502190814166C2410F6FD325D10F6FD322F2B2BED5D +002F3F2FED3F12392FED31305D013426272E01232111213236373E01371406070E012321 +113311213216171E010123113304533235379083FEEC010F858F363834CF554754C098FD +EEC6015298C0554C490173C6C601C94B72232510FDCB1A252769556CB037423805D1FDB8 +23423BAEFDC505D1000200C80000052205D1000E001F003C401007341919161703083416 +560F0100150FB8FFF440110E11370F71210F21402102190814166C2010F6FD325D10F62B +ED5D002FED3F12392FED3130013426272E01232111213236373E01371406070E01232111 +3311213216171E0104533235379083FEEC010F858F363834CF554754C098FDEEC6015298 +C0554C4901C94B72232510FDCB1A252769556CB037423805D1FDB823423BAE0000010061 +FFE5052905EC002A0070400A3A1C491C640676060426B8FFE0403E0A10370B200A103718 +34191928092424203428020D0D11340909060316035603031A24171403732C0F2C010F2C +1F2C2F2C3F2C04241824180F0C1F0C020C2F5D33332F2F5D5D10F6ED11395D003FED332F +3FED332F1112392FED31302B2B5D0116121514020706042322262735331E01333236373E +01352135212E01272E012322060723353E0133320404616068696366FEEFA38DFE571051 +F78D7BCC444849FCD303230E5C4747B46689F057115DFE85AC010F052C60FEE4C2ACFEDF +676A6B3625DB414D574B50C980AD77AF3939374D43DC27356000000200C8FFE107D305F0 +000B001E006240427814010903060915161A1C5616591C7916761C080C34131E1314031C +03341602100309341C090F13190615180C3F0C580C6F0C040C0C0F0015197320120E140F +6C1F10F6FD3210F6ED12392F5DED1239002F3FED3F3FED1217392FED5D31305D01100023 +2200111000333200012311231133113312002120001110002120000705FEFFDBDDFEFE01 +03DCDB0101FB79F0C6C6F924016A0113013F016CFE90FEC5FECCFE9102E801280135FECC +FED7FEDBFEC90136010EFD3005D1FDAC012D0146FE63FE95FE93FE6601890002002C0000 +04DE05D10010001F0066400C28033506471C5A0759170504B8FFE8403209103703041305 +0506060F113440030103030012340F03000519150904060309045F050105120114007821 +0F2140216021035D10F6FD322F5D17392FED002F2F3FED12392F5DED12393130018710FD +C02B005D212311210123012E01353436373E0133210311212206070E01151416171E0133 +04DEC6FEBFFE43EE01DE96A55F4E47BE7301EAC6FED256682B2E3425292D82560250FDB0 +026E33D5B372A5373228FD240232161D1F7043506A292C1EFFFF0068FFE1041D04780216 +0044000000020074FFE1047C061D00270039006440160C1F35043D29303940044B294039 +6512751273330A33B8FFC0402B0B0D3722062B41002510250225250619411800373F060A +223118180C281B03903B1F3B3F3B02311B0C863A10F6ED5D10F6ED12392F1239003FED3F +ED12392F5DED123931302B5D011E01151400232226272602353436373E01373E01373E01 +37150E01070E01070E01073E01333216133426232206070E01151416171E0133323603EE +4648FED4DB6CB640504F0E19144D3548EBC24F883642814080CF303535084BB3655EAE0F +B29257A04802033A352E6C3E97AA03B846C786FAFEB6494C5F0121D04B9B6C5DAC354959 +11070904AD0408060B3E3135AB4D36493EFE22B9B7372E19431CAED840362DDA000300B9 +00000453045D0015002400330061400C0A0305141A0315147623050CB8FFD6402F090C37 +12112C3C4F1E011E1E071D3D08052D3D0708161B122C0F0F07251B00100D10370090350F +35011E2C1A07883410F6FD325D10F42BED12392F1239ED003FED3FED12392F71ED393931 +302B5D011406070E01232111213216171E0115140607151E01033426272E012B01113332 +36373E01133426272E012B0111333236373E010453413940977BFE3201B07D7F383F3B5E +4A6381FD1F202A694DC4EB4A4724261D3B243D26584EF1B270792C2C2B0152517E2A2F2A +045D111D216A48537A220A1889017D243A101505FECE0B161841FE4237451D1207FE930F +19194800000100B9000003BB045D0005001F4010013F040503700001000007021A038806 +10F6ED11332F5D002F3FED313001211123112103BBFDBABC030203B8FC48045D00020009 +FEF404AF045D000D00130053401C3B124A12020105103E0A050C13073E0310C90A0A070E +1A0C0C01C900B8FFC040120B0E370000152F153F1502131A070704C9052FED392FED5D11 +332F2BED392FED12392FED002FFD32323FED2F3331305D01231121112311333612112111 +3321112106020704AFAFFCB8AF79757302BE87FEBDFEAF0D8053FEF4010FFEF101ACC101 +F90103FC43031FFBFE628600FFFF006AFFE60460047C0216004800000001003400000632 +045D003100D840123A0E3A2D4A0E4A2D5F0C5F2F6F0C6F2F0826B8FFE0B3090B3715B8FF +E0401A090B3724B42D2D2F17B40E0C0E020116091037011A0031000708B8FFEA405E0910 +37081A09090A241C1703291F3C31070A0C0E2F2D072902112A3F040902121D052905002E +0A21315E0A51316F0A60317F0A7031082929013102242D2F0600C71F041A051212080A07 +0C0E170609C71C0505333210333F334F336F33045D1112392F33F41739322F10FD32F417 +39322F5D002F3F1739FD322F121739FD111739018710FD2BC08710FD2BC08710FD8710FD +3130002B2B5D21230123112311230123012E01272E012B0135333216171E01171E011711 +33113E01373E01373E013B0115232206070E01070632E3FE9A5BBA51FE8AD901AF314B1F +1B4A5435457C962D091B0A216740BA4069210B1B082C947D4535554B191C4D2D01FEFE02 +01FEFE0202491A60615542A2647D1A43174C3F0401E4FE1C04404B1942197B66A2465159 +631900010041FFE603C20478003D007FB7263475127D3C032FB8FFE0404C0D103708200D +10373B1B3FAF1CBF1C021C1C06313F2D902DA02D032D2D293E3104200A300A020A0A0E3F +06091C2E231B372E1C373B0409141B00903F7F3F803F02800990090209400B0F37092F2B +5D5D10F6ED1217392FED2F2F003FED332F5D3FED332F5D1112392F5DED3931302B2B5D01 +1406070E012322262735331E01333236373E01353426272E012B0135333236373E013534 +26272E012322060723353E01333216171E0115140607151E0103C2574444A45274D2660D +49E26A326A272A32312A297430A371288128343D3024255B2366C5430D53BE5F4E9B4342 +546D5C677A01395E822827242C2ECE4046131518433A3C48121208A2060D113E442F3D11 +110C3734CF1B221C2222755658851D071989000100B900000466045D00090044402D0B02 +0407020D030103380B103702380E10370706010204030805030808021A00920B1F0B600B +0203071A04880A10F6ED395D10F4FD39003F3F12173931302B2B5D712123110123113311 +01330466BAFDB7AABA0243B00347FCB9045DFCC5033B000200B900000466061500090017 +0073404C0B020407020D030103380B103702380E10370A0F1001101014500D0D07060102 +04030805030817C91F0A2F0A020A11C900101010201003100A100408021A0092191F1960 +190203071A04881810F6ED395D10F6FD391239392F5DED2F5DED003F3F121739332FED33 +2F5D3331302B2B5D7121231101231133110133030E0123222627331E01333236370466BA +FDB7AABA0243B06B05B1A9A9B105AB015B58595A010347FCB9045DFCC5033B01B894A6A6 +94695E5C6B00000100C1000004A9045D001A0093404D0120090E371B02271A360E321635 +1A0502011A001A000A1B0F2B0F020FB41618160A0F181604121A023C2F08010808000713 +3F12050705010508561A9600961AB600B61A05021A181604121200B8FFC04011090E3700 +001C0F1C1F1C0208031A05891B10F6FD325D11332F2B332F17395D003F3C3F3FED111239 +2F5DFD39121739018710FD71C03130018710FDC0015D2B2123012311231133113236373E +01373E013B0115232206070E010704A9F6FE3066BCBC5D72280E1B0D349C9256534F5924 +2859320200FE00045DFE1E434A1B3D1C7170A243545E5D180001001DFFFE043E045D0021 +003FB9001BFFACB30D103709B8FFC0401C0D1037023E2105001313173F0F011A00922303 +1A20203020022020122F332F5DED10F6ED002FFD322F2F3FED31302B2B212311210E0107 +0E01070E01070E012322262335333216333236373E01373E013721043EBCFE5F03060307 +201A183B2222533111410A0A081E0A183312333E0A040703030103BF539A3EA7C7423E4D +1F1E1E02A4020E1332EEE152E166000100B9000004D9045D000C0078401335093A0B4503 +4A0470037F04060B400D103709B8FFC0403D0D10377B027B05790A030A2A090B37050A02 +030904400E103704200D0F373F04010404070B09050107090A0B0305021A00920E0F0E20 +0E02051A07880D10F6ED5D10F6ED111739002F333F3312392F5D2B2B1217393130002B5D +012B2B5D2123110123011123113309013304D9BAFEEA8CFEECB0E301300126E70372FDC2 +023EFC8E045DFD8F0271000100B900000460045D000B0032401C033F0808050A07050105 +0809021A00920D1F0D600D0208031A05880C10F6FD325D10F6FD32003F333F3312392FED +31302123112111231133112111330460BCFDD1BCBC022FBC01F7FE09045DFE3C01C4FFFF +006AFFE10471047C021600520000000100B900000460045D000700254015033F06050005 +011A0092091F09600902041A05880810F6ED5D10F6ED002F333FED313021231121112311 +210460BCFDD1BC03A703BBFC45045D00FFFF00B9FE640490047C0216005300000001006A +FFE703FD04770021005A40430F234F235F23032B01220E2A1624183A01350E3A16351849 +014F0A440E4F1641185901550E6901650E7A01730E131010143F0C0421211A3F03090F00 +0023171B09852210F6ED11332F3C003FED332F3FED332F31305D015D250E01232226272E +013510002132161715232E01232206151416333236373E01373303FD73A5527ACC494951 +0128010161BB4E0B5DB555A7B7B6A83B75302651100B463629474848DC93010B013F3627 +D14744E0C7C7DC1E1813350D0001000A000003EE045D0007003840230301043F06054000 +4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32 +2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A5FFFF +003DFE64047F045D0216005C00000003006FFE64064B061400230030003D007A40105622 +011D011B1E0C09040627353F2118B8FFF040400E0F3718043B2E3F0F06100E0F3706090B +0C392436384924463804241B00C809311B1E2B04091A0C381B12C8800C900C020C0C3F3E +0F3F1F3F3F3F503F803F055D1112392F5DFDED10ED173910FDED5D003F3F2B33FD323F2B +33FD321217393F31305D011406070E01232226271123110E01232202113436373E013332 +16171133113E0133321203342623220607111E0133323605112E01232206151416333236 +064B4C3F3EA259436327BA3D4F54C1F04E3F3DA5523C6331BA2E7C3FC6E2C18888374A3F +2F3F3A8D9BFD7627503187A18F87355B024C95E54A4A4E2E13FE3301CD1E23012E010D8D +DD4B494D251E01E1FE1F1B28FED5FEECBFDE1219FD171619D9AA02E91219CED2C3E01D00 +FFFF003C00000480045D0216005B0000000100B9FEF404DE045D000B0041400F0602050B +08043F01051A080800C90AB8FFC04015090D370A0A0D0D40090E378F0DAF0D02041A0188 +0C10F6ED5D2B11332F2BED392FED002FFD322F3F33313029011133112111331133112304 +2FFC8ABC0226BC87AF045DFC4503BBFC45FE52000001008E0000041F045D0016003C4025 +0C061C062C06750E040209113F0505001509050014011A0092183F18010A1A0009100902 +092F5DED5D10F6FD32002F3F3312392FED123931305D2123110E01232226351133111416 +171E01333236371133041FBC5BA662B4BEBC101A1A5E5445A23CBC01AD1C22B1A70196FE +CA40652524261B12021D000100B900000649045D000B003D40260A06020508043F010809 +1A00CA081A05041A01CA8005A0050205050D0C0F0D200D500D700D045D1112392F5DF4ED +10FDF4ED003FFD323F333331302901113311211133112111330649FA70BC01AEBC01AEBC +045DFC4503BBFC4503BB000100B9FEF406D0045D000F004A402E0A0602050C08043F0108 +0E0DC90000091A0CCA081A05041A01CA80059005A00503050511100F111F113F116F1104 +5D1112392F5DF4ED10FDF4ED392FED002F3FFD32323F3333313029011133112111331121 +1133113311230621FA98BC01AEBC01AEBC87AF045DFC4503BBFC4503BBFC45FE52000002 +000A000004C4045D000E0021004A4015750D01073D4F1B9F1B021B1B16183F1905083D16 +0FB8FFF04016090B371B081A161619001B0F8F230F231F232F2303192F5D10F6FD11392F +FD322B002FED3FED12392F5DED31305D013426272E012B0111333236373E01371406070E +0123211121352111333216171E01040223282A6B64B0AC646E282925C24138429676FE55 +FEB80204F47E8B453A3A0157334D18190AFE8411181A473A518429322A03B8A5FE4D1A33 +2B86000300B9000005A2045D000E001F0023005A4016200523073D4F199F190219191617 +05083D167900010FB8FFF04022090B37001B500F600F700F030F0F231A2292250F253025 +402570250419081A16882410F6FD325D10F6FD322F5DED2B5D002FED3F12392F5DED2F3F +3130013426272E012B0111333236373E01371406070E012321113311333216171E011333 +1123036923282A6B64B0AC646E282925C24138429676FE55BCF47E8B453A3ABBBCBC0157 +334D18190AFE8411181A473A518429322A045DFE4D1A332B8602B1FBA300000200B90000 +0435045D000E001F00424013073D4F199F19021919161705083D167900010FB8FFF04013 +090B37001B0F8F210F212F210219081A16882010F6FD325D10F6ED2B5D002FED3F12392F +5DED3130013426272E012B0111333236373E01371406070E012321113311333216171E01 +037323282A6B64BAB6646E282925C24138429676FE4BBCFE7E8B453A3A0157334D18190A +FE8411181A473A518429322A045DFE4D1A332B8600010053FFE703F604770021007DB532 +0442040210B8FFD640090B0D37152A0B0D371DB8FFD6403F0B1037082A0B1037123D1313 +061F1B1B173E1F049F0A010A0A0E3E0609141C111A0390232340090D371C2F133F134F13 +03131C1380099009020940090C37092F2B5D33332F5D2F2B10F6ED1139003FED332F5D3F +ED332F1112392FED31302B2B2B2B5D011E011510002122262735331E0133323637213521 +2E012322060723353E01333216035D4950FEC9FEFC66BF430D3CC66D9DC40CFDCC023314 +BE8E5BB4570D3FC2677CC803ED46D290FEEAFEB8301BCE2F49C0BA979E9F3D43CE193A44 +000200B9FFE1064C047C000B001E005640363A0335094A034509040C3E131E1314031C03 +3F16041005093F1C0A0F1319061A2F0C010C0C0F001B1990202F203F2002120E1A0F881F +10F6FD325D10F6ED12392F5DED1239002F3FED3F3FED1217392FED5D3130013426232206 +15141633323625231123113311333624333200111000232200058AA69399A1A89292A7FC +D3E8BCBCED190111C7E70112FEF2EBDEFEF5022ED7D5DFCDD4D7D5A2FE06045DFE3BE7FD +FEC4FEEEFEF1FEC201200002004300000413045D0010001F0069B3721C0104B8FFE8403D +0910370304B4050506060F113C030300123D0F0500050909190902191B70090109040603 +09040A051A054A055A0580059005060512011A0092210F21015D10F6FD322F5D17392F5D +ED5D002F2F3FED12392FED12393130018710FDC02B015D212311230123012E0135343637 +3E0133210311232206070E01151416171E01330413BCDDFEA6DD01789186503D3C9C5C01 +AEBCED4D442827251724256A4101BBFE4501CD28A586597C27261BFDF201780A16164B2C +37441E1D1500FFFF006AFFE6046005DB0236004800000116008EF9000014400D03302560 +250202002520120025012B355D3500010013FE6D046206140035006A4044051C1E261E28 +59056905721D0617140E51111112180D08421B0412012F3E2A2A012A0D150F5F2E6F2E7F +2E032E2E0D001A2191371F37603702141517030B1A110F0D883610F63232FD17325D10F6 +ED12392F5D2F2F002F2F5DED3F3FED123912392FED393931305D0026272E01272E012322 +0607112311233533353315211521113E01333216171416151406070602070E01232A0127 +35333236133E013503A501010113191A594650AC4CBCA6A6BC0141FEBF58C162B1BB0303 +020103544746B96A17182A44BB9C09010102064B2B5080292B294D3AFCBE04F4869A9A86 +FEED4952DEC92F6B4B3A703AB0FEFF50504E029EF60150224B2EFFFF00B9000003BB0682 +0236020B00000116008D9AF6000AB6010009070405252B350001006AFFE7040A04770021 +006EB53B0A4B0A021BB8FFD640090B0D37162A0B0D370EB8FFD640340B1037012A0B1037 +193D1818030C1010143E0C0421211D3E03092018301840180318171810031A008E232340 +090D371A1A09852210F6ED2B10E61117392F5D003FED332F3FED332F1112392FED31302B +2B2B2B5D250E01232226272E013510002132161715232E01232206072115211E01333236 +3733040A4E9F7B7DD14C4C52012B010D68BB450C40C2658FC719023CFDC10AC4A46CBD3E +0C302029474849DC92010501453620CB324E9CA197B2C8443200FFFF006EFFE503D70478 +021600560000FFFF00AF0000018305DB0216004C0000FFFF00050000022D05DB02160077 +0000FFFFFFC2FE59021505DB0216004D00000002001DFFFE06F4045D000E003D0072B900 +30FFACB30D10371EB8FFC0401D0D1037073D4F379F3702373716183E350528282C3F2409 +3D167900010FB8FFF0401E090B3737081A161635001B890F010F8F3F0F3F0118C9203530 +35023535282F332F5DED5D10F45DFD11392FFD322B5D002FED2FFD322F3FED12392F5DED +31302B2B00353426272E012B01113332363736371406070E01232111210E01070E01070E +01070E012322262335333216333236373E01373E01372111333216171E01063223282A6B +64B0AC646E2829E74138429676FE55FE5F03060307201A183B2222533111410A0A081E0A +183312333E0A0407030301F47E8B453A3A012037334D18190AFE8411181A81518429322A +03BF539A3EA7C7423E4D1F1E1E02A4020E1332EEE152E166FE4D1A332B86000200B90000 +06F4045D000E0027005D4017171E073D4F219F21022121161C20051A083D167900010FB8 +FFF0401F090B37211E081A16161A001B890F010F8F290F292F294F29031D191A1A882810 +F6FD325D10F65DED11392FED39392B5D002FED2F3F3312392F5DED39393130013426272E +012B0111333236373E01371406070E0123211121112311331121113311333216171E0106 +3223282A6B64B0AC646E282925C24138429676FE55FDF3BCBC020DBCF47E8B453A3A0157 +334D18190AFE8411181A473A518429322A0210FDF0045DFE4D01B3FE4D1A332B86000001 +00130000045F0614001E00504030031D161D751D0317140E51111112180D08421B041201 +010D08150F021A0091201F20602002141517030B1A110F0D881F10F63232FD17325D10F6 +ED2F2F003F3C3F3FED123912392FED393931305D2123113426272E012322060711231123 +3533353315211521113E0133321615045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC +63B5BE027C4D87262A294C3BFCBE04F4869A9A86FEED4952DACDFFFF00C1000004A90682 +0236021200000116008DF9F60011400C01001D401D02001D1C0611252B5D35000002003D +FE64047F06150007001500BD404C04063406440650066006700606090307051903170546 +0149035800570179030902071A000100051A0403044900460402080F0E010E0E12500B0B +0003020405020C15C908400B0E37080FC90EB8FFC040110B0E370E080E04026801010102 +03030400B8FFC040220910370C001C004A006A007A0005008D170F170103041304450465 +0475040504821610E65D5D10F65D2B1117395D2F1139392F2BED2F2BED003F3F12393933 +2FED332F5D333130015D8710FD8710FDC0015D005D0901231301330901130E0123222627 +331E0133323637047FFD74C9D0FE43CC0157015A0805B1A9A9B105AB015B58595A01045D +FA0701D20427FCC4033C01B894A6A694695E5C6B000100B9FEF40460045D000B003F4027 +0A060520030103083E00050802C93F034F037F0303030305091A00920D1F0D600D02081A +05880C10F6ED5D10F6ED12392F5DED003F33ED2F5D3F3331302901112311211133112111 +330460FE84AEFE83BC022FBCFEF4010C045DFC4403BC000100C80000048A076B0007002B +B90006FFC040140D10370606003503030205130606090114026C0810F6ED11332FED002F +3FED332F2B31300111231121113311018EC60308BA0521FADF05D1019AFDB600000100B9 +000003BB05CE00070033B90006FFC0401A0E10370606003F03050205C97006010606090F +0901011A02870810F6ED5D11332F5DED002F3FED332F2B313001112311211133110175BC +0254AE03B8FC48045D0171FDEA00000100CB023C073502DC00030011B601540200000501 +2F11332F002FED3130012135210735F996066A023CA0000400C8000008B905ED00090015 +0021002500A7403E080718073A014901440646075801540656076F0160067F0170060D09 +0D0613190D16137A19751F0625533F224F220222221F401214371F51300D010D0D19B8FF +C040321214371951130202030807040106030100220F2302232223220A1CC910100A0006 +0102071300000416C90A0A270213046C2610F6ED11332FED12392FFD1139391112392FED +1239392F2F5D002F3F1217393FED2B332F5DED2B332F5DED5D3130015D21230111231121 +0111330114062322263534363332160734262322061514163332360121152104FFF5FD72 +B401330250B403BABDB2B6BABEB2B5BAB25865675757676558FE6201B8FE480534FACC05 +D1FB4004C0FE63E0DADADFE0DADCDDAC8888ADAD8787FDE89E00000100B900000460045D +000700254015033F06050005011A0092091F09600902041A05880810F6ED5D10F6ED002F +333FED313021231121112311210460BCFDD1BC03A703BBFC45045D00000101190235028F +05D5000800214011035004040703010E0307002A03000101012F5D33ED392F003F3F332F +ED3130012311233532363733028FA5D1667E0989023502A9752C5600000100EF023D039F +05ED001D0043B90011FFE040250D10370F0F0B521302021C51010E00001C01082A261636 +166616761604160F160F000101012F5D33332F2F5DED1239332F003FFD323FED332F3130 +2B0121353E01373E013534262322060723353E01333216151406070E010721039FFD505B +86276D40584C468F290F41974D9DA9526A318D3701F2023D94456825676D52464A3C20B3 +1B229E7A5D945E2B6A29000100E6021C037305ED002E0074400F6C096C227E097E220455 +0C5A1F0226B8FFE0403B0B0E3703200B0D372C2B15510F16010F161F164F165F16CF16FF +16061621211D51160625020A0A0E51060F1A2A281622112A2216282C04090000092F332F +121739ED2F2F2FED003FED332F3F1239ED332F2F5D71ED393931302B2B5D015D01140607 +0E012322262735331E013332363534262B01353332363534262322060723353E01333216 +15140607151E0103733C30357B4F528F4111259A4F546E645B8C7D575F52574299251140 +964F98AA614D5075033A47702225201E1CAF233B4948533B8B4C423C473E23AF1B228C62 +57711A08106D000200B3023D03BD05ED000A000D003A401E6D067E06020609010D51050C +05030702030E00070B042A09000D060101062F332F12393333FD39392F003F3F1239392F +ED3939323130015D012315233521350133113321110103BDA396FE2F01D295A3FECBFE9F +0319DCDCB9021BFDB10190FE7000000100E6021C037505DA002A004840176F087F08021D +1D1A5125250621511E030A0A0E51060F00B8FFEA400F090C371F21291E1F1E09142A0000 +092F332FED1239392FED2F2B003FED332F3FED12392FFD322F31305D011406070E012322 +262735331E01333236373E01353426272E012322060711211521153E01333216171E0103 +75322F3088574E953C1025924E2C521C1D171F1D1E59353B6C260255FE4814310E547634 +373C0363457A2A2B331C1A9F1436171C1D43272A391415110E0601F08BCF02021722246F +000100F3023503A505DA000600414025560101030100012A020203630073000200000351 +0503020E030002100910370202040000042F332F12392F2B1239003F3FFD322F3130015D +8710ED87C0015D0901230121352103A5FE2AB901F0FDED02B2054EFCE7031A8B000300C5 +021B039105EE001900280037005D40420F0B0F151F0B1F152A022A0439023904492B582B +0A0F251F2526103610042F09261604031D5110023551030F1A2A13202A0D292A090D1316 +04067000010000322A062FED332F5D121739ED2FED2FED003FED3FED1217395D31305D01 +140623222635343637352E0135343633321615140607151E01033426232206151416171E +01173E01133426272E01270E011514163332360391CB9BA7BF5E595246B99095B5505261 +5BBE574F465D302D17482E392618374217582A3A387650516D033579A19F784F78260429 +64476A8D87683F7D2304276B016433483F36263D140A1F0B254FFE79323B1E0A1C0F205D +304A5F4E00020073FFE1068B05F0002800340075400978180176097915021BB8FFC04045 +0910371B694F0001002302031A090A0905151A0915155A095515062C3415023234090A22 +1E2926151B00030F291503360F361F3680369036BF36CF36060F36012F150F683510F6ED +5D5D10D6ED121739D4FDC4003FED3FED5D1239393FDD5DED2B5D31305D011E0115140207 +0E01232224272602353412373624333216171E01173E013534262735331E011514060110 +0023220011100033320005A11F1A63595CFBA19DFEFF5A5A61605C5801059AA0FF591819 +144F43160CA00D0B78FEF9FEFCE1E3FEFD0108DEDE0107044958A663B8FEDD6165666863 +630120B9B6012167626869611B2121044044245B17092F46326C82FE8D0122013BFEC5FE +DEFEDBFEC90137000002006AFFE104C30584001D0029005640391A20090C373A2135274A +21452704151B690D050003213F0904273F030A14102918090C1B03061E1B00902B0F2B1F +2B3F2B6F2B04241B06852A10F6ED5D10F6ED121739DCFDC4003FED3FED12393FFDCD5D31 +302B011000232200111000333216173332363534262735331E01151406071E0107342623 +22061514163332360471FEE8EBEDFEE90117ED33602B5D5A4A160CA00D0B736C4548C2AA +9799A9AA9896AB022EFEEFFEC4013C01110111013D0F104147245B17092F46326A80144D +D98BD9D3D3D9D2D9D700000100B2FFE1067506F8002B004C40342A20090F37252B6A1C03 +0D032615390649067615041534060A2420290F2801281B14002D0F2D402D6F2D7F2D902D +050F140C6B2C10F6ED5D10DEEDD45DFDC4003FED5D3F3FFDC431302B011406070E012322 +26272E01351133111416171E01333236373E0135113332363534262735331E0115140623 +052947514DCE898CD0475147C621272C976A6B962D2721D85A4A160CA00D0BACA00256A2 +F1504C464A4852E8A9037BFC7B798C394142414239936D038A4147245B17092F46328384 +000100B1FFE105A505840025005C403E0B0619077A070323200910371E246A1505020509 +051142050A011D19290F21012114021A40000100270F276F27025F279027A027C027EF27 +050B1A08872610F6ED5D7110D671ED32D45DFDC4002F3FED3F12393FFDC431302B5D2123 +350E01232226351133111416171E0133323637113332363534262735331E011514062B01 +0457BC5FAE69B0C4BC101A1B565249AD4BD05A4A160CA00D0BACA0027C4B50D7D002D5FD +8455792B2C284C3B03424147245B17092F46328384000001020905110342068C00160042 +4029BF0301030606050C50146005010504ADC005D005020540090D370505110940111437 +09290F000100112FDD5DED2B12392F2B5DED002F5DD4ED12392FC55D3130011406071523 +353E013534262322060723353E01333216034242426E2F3026211F251803134926516605 +F8404E1544790C27271827090969060C560000010221FE8202F5FF450003001340090144 +8F0201020015012FED002F5DED31300123353302F5D4D4FE82C3FFFF0154051602FA068C +001600430000FFFF021D051603C3068C0016008D00000002013605110514068C0006000A +004DB90006FFF040100E103705100E10370802010708040305B8FFC040110E1037050560 +0301036007700702070900B8FFC0B50E10370000042F332F2BD6CD5D002F5D332F2B1217 +392F3130012B2B01230B012313332103231303E19FB9B89BE4E30217DA817C05110100FF +00017BFEF6010A0000020003051103E1068C0006000A004AB90006FFF040100E10370510 +0E10370802010809040305B8FFC040180E1037050560030103006F097F0902090704400E +103700042F332BD6CD5D2F002F5D332F2B1217392F3130012B2B01230B01231333012303 +3303E19FB9B89BE4E3FE6181DADF05110100FF00017BFEF6010A00020136051104C00752 +0006001D008EB90006FFF040120E103705100E1037BF0A010A0D0D0C13501BB8FFC0400B +0E10371B0C02010C030305B8FFC0402A0E10370505600301030BADC00CD00C020C400910 +370C0C18104011143710290F07010718400C10371800B8FFC040090E1037000060040104 +2F5D332F2BD42BDD5DED2B12392F2B5DED002F5D332F2B1217392FD42BED12392FC55D31 +30012B2B01230B01231333251406071523353E013534262322060723353E0133321603E1 +9FB9B89BE4E301C342426E2F3026211F251803134926516605110100FF00017B32404E15 +44790C27271827090969060C560000020125051103F307DE000600200064B90006FFF040 +200E103705100E10370710520F171F17A0170317141D520A400D11370A01020305B8FFC0 +40110E10370505600301032029070013291400B8FFC0B40E103700042F332BD6ED2FD6ED +002F5D332F2B123939D62BED3CDD5DED3C3130012B2B01230B01231333130E0123222627 +2E0123220607233E01333216171E013332363703E19FB9B89BE4E3F606865F35491C183A +192B22058C05875F36491C163B192A240405110100FF00017B015289902919162D3E4788 +912A19142E3E47000002014204E703D506FB000D0011003C40251110400F1A3710001006 +0AAA3F030103600E700E020E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D +002F5DEDCD39392F2BCD313001140623222635331416333236353703231303D5B29897B2 +A2555253555EDA817C0646A3BCBCA37C64647CB5FEF6010A0002014204E703D506FB000D +0011003C4025100F400F1A370F000F060AAA3F0301036F107F1002100E0D2A0E0F001F00 +8F000300072A062FEDD45D39ED2FCD5D002F5DEDCD39392F2BCD31300114062322263533 +1416333236350723033303D5B29897B2A2555253555281DADF0646A3BCBCA37C64647C55 +010A0002014204E703D5071E000D002400634040111414131A0F2201221340091A371300 +13060AAA3F0301031213400910371313001F101F201F031F1728500E600E700E030E0D2A +0E0F001F008F000300072A062FEDD45D39ED2F5DEDCD5D392F2BCD002F5DEDCD39392F2B +D45DCD12392FC531300114062322263533141633323635271406071523353E0135342623 +22060723353E0133321603D5B29897B2A2555253551237375C272822191C1E1402103C21 +42570646A3BCBCA37C64647C5B34431238650A2120191D080757060A45000002012504E7 +03F307DE000D0027005840100E17520F1E1F1E021E1B245220110111B8FFC04025090C37 +11006006700602060AAA3F0301031A291B0627290E0D2A0F001F008F000300072A062FED +D45DEDD4ED10D6ED002F5DEDDD5D39D62B71ED3CDD5DED3C313001140623222635331416 +33323635130E01232226272E0123220607233E01333216171E013332363703D5B29897B2 +A255525355C006865F35491C183A192B22058C05875F36491C163B192A24040646A3BCBC +A37C64647C019889902919162D3E4788912A19142E3E47000001020905110342068C0016 +00524035BF0301030606050C50501460147014031409900501C76005010504ADC005D005 +020540091037050511094011143709290F000100112FDD5DED2B12392F2B5DED002F5D5E +5D5ED45DED12392FC55D3130011406071523353E013534262322060723353E0133321603 +4242426E2F3026211F251803134926516605F8404E1544790C27271827090969060C5600 +00020136065403E1080100060020007D404A0702170202141D50200A010A1050076F1701 +0F1770170217010205400D1137050920039003A003B003045910032003C00303C003D003 +0231D003E003025003010F037003020320280700B8FFC040090E10370013281400042F33 +D6ED2F2BD6ED002F5D71725E71725E715ECD2B39392F5D713CEDDD71ED3C31305D012327 +07233733130E01232226272E0123220607233E01333216171E013332363703E1A9AFAEA5 +F8BBEC0B705025491C1B3E141D2806860A6F5227432122301A1B2B0506545959AD010052 +6B190D0D1A202D4E6F17101016232A0000020142064803D50801000D0011005A403E5010 +6010020A50FF03015F030103007F0601060F109F10026F10FF1002106F11010F11701102 +11590E690E720E030E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D002F5D +71DD5D71D45D3CDD7172ED5D313001140623222635331416333236353707233703D5AB9E +9EACA24B5D5A4D4FC681680738589899573058592FC9D8D800020142064803D50801000D +001100644033500E600E020A50FF03015F030103007F0601060F0E9F0E026F0EFF0E020E +6F11010F1170110211561066107D1003100E0D2A0EB8FFC0400F090D370E0F001F008F00 +0300072A062FEDD45D392BED2FCD5D002F5D71DD5D71D45D3CDD7172ED5D313001140623 +222635331416333236350723273303D5AB9E9EACA24B5D5A4D5681C6DF07385898995730 +58592F0FD80000020142064803D50801000D0024008E4062111414131A6F22010F227022 +02223F134F13021340111537130013060A5009900301B0030159700301310F033F037003 +CF0304031213400915371313501F601F701F03001F101F201F301F401F051F17C00E010E +0D2A0E0F001F008F000300072A062FEDD45D39ED2F5DCDCD5D71392F2BCD002F5D5E715E +5D715EEDCD39392F2B712F5D71CD12392FC5313001140623222635331416333236352714 +06071523353E013534262322060723353E0133321603D5AB9E9EACA24B5D5A4D2E2E2E4D +231F1C15191A0E020E321B364A0738589899573058592F612B380F2F54091E1817160805 +4905083900020142064803D50801000D0027009240111B2450DF1101110E17506F1E010F +1E011EB8FFC040520D10371E00060A50099003B00302F0030159200330034003C003D003 +E003066003700302C003D0030231A003B003025003E003020F033F03CF0303031A281B1B +0627280E0E0D2A0F001F008F000300072A062FEDD45DED3C10ED103C10ED002F5D71725E +5D71725E5D715EEDCD322F2B5D71ED3CDD71ED3C31300114062322263533141633323635 +370E01232226272E0123220607233E01333216171E013332363703D5AE9B9BAFA26C3C3C +6BA20B705025491C1B3E141D2806860A6F5227432122301A1B2B050706546A67572E2828 +2EFB526B190D0D1A202D4E6F17101016232A000201360668051008010006001D0088B900 +06FFF0401A0E103705100E1037BF0A010A0D0D0C400E10370C13500F1B011BB8FFC0403A +0D10371B0102030F0570050205050F0301030BADC00CD00C020C400910370C0C18104011 +143710290F07010750006000700003180000600401042F5D332FD45DDD5DED2B12392F2B +5DED002F5D332F5D1239392F2B5DEDC42B392FC55D3130012B2B01232707231333051406 +071523353E013534262322060723353E0133321603E19FB9B89BE4E3021342426E2F3026 +211F25180313492651660668CECE014944404E1544790C27271827090969060C5600FFFF +001AFE82055E05D10236002400000116024B2F00000AB602000D0E0500252B35FFFF0068 +FE82041D04780236004400000116024BBA00000F400A027F36010036370B00252B5D3500 +FFFF001A0000055E080102360024000001170256002F0175001A401202501C0102101C40 +1C701C03001C0B0500252B5D35005D35FFFF0068FFE1041D068C0236004400000116024A +BA000011400C025F457F45021D45340B00252B5D3500FFFF001A0000055E07ED02360024 +00000117024E002F01610011400B0302400F01000F0B0500252B5D353500FFFF0068FFE1 +04F4068C0236004400000116024EE0000013400D030240385038022938340B00252B5D35 +3500FFFF001A0000055E07ED0236002400000117024F002F01610011400B03020F0F0100 +0F0B0500252B5D353500FFFFFFE3FFE1041D068C0236004400000116024FE0000013400D +030240385038022938340B00252B5D353500FFFF001A0000055E08010236002400000116 +025C2F00001740110302400FA00FB00FC00F04000F0B0500252B5D353500FFFF0068FFE1 +04A0075202360044000001160250E0000013400D030240385038022938340B00252B5D35 +3500FFFF001A0000055E0801023600240000011602572F00000CB70302000F0B0500252B +3535FFFF0068FFE1041D07DE02360044000001160251E0000013400D0302403850380229 +38340B00252B5D353500FFFF001AFE82055E07ED023600240000003700D6002F01610116 +024B2F00001840110300141505002502400F01000F0B0500252B5D352B35FFFF0068FE82 +041D068C023600440000003600D6E0000116024BBA00001E4016037F3D01003D3E0B0025 +0240385038022938340B00252B5D352B5D35FFFF001A0000055E08010236002400000116 +02582F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236004400000116 +0252E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000055E08010236 +00240000011602592F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236 +0044000001160253E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000 +055E08010236002400000116025A2F00000CB7030200110B0500252B3535FFFF0068FFE1 +041D071E02360044000001160254E0000011400B0302403A01293A340B00252B5D353500 +FFFF001A0000055E08010236002400000116025B2F00000CB7030200110B0500252B3535 +FFFF0068FFE1041D07DE02360044000001160255E0000011400B0302403A01293A340B00 +252B5D353500FFFF001AFE82055E0801023600240000003700D9002F01750116024B2F00 +001D4013025011011103001B1C0500250200110B0500252B352B3500115D3500FFFF0068 +FE82041D068C023600440000003600D9DD000116024BBA0000184011037F44010044450B +002502293A340B00252B352B5D35FFFF00C8FE82049D05D10236002800000116024B2600 +000AB601000E0F0100252B35FFFF006AFE820460047C0236004800000116024BF900000A +B6021F22231218252B35FFFF00C80000049D08010236002800000117025600260175001C +401401501D0101001D201D501D601D04001D0C0203252B5D35005D35FFFF006AFFE60460 +068C0236004800000116024AF9000018B4026F310131B8FFC040090A1137323120120025 +2B2B5D35FFFF00C80000049D07C8023600280000011700D7002601750012400B01501901 +0100190C0203252B35005D35FFFF006AFFE604600653023600480000011600D7F900000A +B602002D201200252B35FFFF00C80000053A08010236002800000117024E002601750016 +400D0201501001020100100C0203252B3535005D3535FFFF006AFFE6050D068C02360048 +00000116024EF900000CB703021E24201200252B3535FFFF00290000049D080102360028 +00000117024F002601750016400D0201501001020100100C0203252B3535005D3535FFFF +FFFCFFE60460068C0236004800000116024FF900000CB703021E24201200252B3535FFFF +00C80000053608010236002800000116025C26000013400D0201101020100200100C0203 +252B5D353500FFFF006AFFE604B9075202360048000001160250F9000013400D03020024 +2024021E24201200252B5D353500FFFF00C80000049D0801023600280000011602572600 +000CB7020100100C0203252B3535FFFF006AFFE6046007DE02360048000001160251F900 +000CB703021E24201200252B3535FFFF00C8FE82049D0801023600280000003700D60026 +01750116024B2600001D40130110501001020015160203250100100C0203252B352B3500 +5D113500FFFF006AFE820460068C023600480000003600D6F9000116024BF9000014400E +031E292A120025021E24201200252B352B35FFFF0089000002D508010236002C00000117 +0256FF2401750016400E01501101015011010011100409252B5D35005D35FFFF00960000 +01CF068C023600D500000117024AFE8D0000000AB6010009080203252B35FFFF0089FE82 +02D505D10236002C00000117024BFF240000000AB601000E0F0409252B35FFFF00AFFE82 +018305DB0236004C00000117024BFE8E0000000AB602000A0B0203252B35FFFF0073FE82 +05DA05F00236003200000117024B009B0000000AB6020026270F03252B35FFFF006AFE82 +0471047C0236005200000116024BE200000AB602001A1B0600252B35FFFF0073FFE105DA +080102360032000001170256009601750022400B0250340102503470340234B8FFC04009 +090B370034240F03252B2B5D35005D35FFFF006AFFE10471068C0236005200000116024A +E200000F400A02701D01001D1C0600252B5D3500FFFF0073FFE105DA0801023600320000 +0117024E00960175001E401403025028010302202850288028030028240F03252B5D3535 +005D3535FFFF006AFFE104F6068C0236005200000116024EE200001940130302001C201C +501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA08010236003200000117 +024F009601750016400D030250280103020028240F03252B3535005D3535FFFFFFE5FFE1 +0471068C0236005200000116024FE200000CB70302001C180600252B3535FFFF0073FFE1 +05DA08010236003200000117025C009600000015400F0302202850288028030028240F03 +252B5D353500FFFF006AFFE104A2075202360052000001160250E200001940130302001C +201C501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA0801023600320000 +01170257009600000015400F0302202850288028030028240F03252B5D353500FFFF006A +FFE1047107DE02360052000001160251E200001940130302001C201C501C801CB01C0500 +1C180600252B5D353500FFFF0073FE8205DA0801023600320000003700D6009601750117 +024B00960000001D4013025028012803002D2E0F0325020028240F03252B352B3500115D +3500FFFF006AFE820471068C023600520000003600D6E2000116024BE2000014400E0300 +212206002502001C180600252B352B35FFFF0073FFE1068B08010236024600000117008D +007801750014400D025036603602020036360F03252B35005D35FFFF006AFFE104C3068C +0236024700000116008DE200000AB602002B2B0600252B35FFFF0073FFE1068B08010236 +024600000117004300AA0175001A40120250366036020250367036020036360F03252B5D +35005D35FFFF006AFFE104C3068C02360247000001160043E2000011400C02502B602B02 +002B2B0600252B5D3500FFFF0073FFE1068B080102360246000001170256008F01750012 +400B02503A0102003A390F03252B35005D35FFFF006AFFE104C3068C0236024700000116 +024AE200000AB602002F2E0600252B35FFFF0073FFE1068B07C8023602460000011700D7 +008B01750012400B02504201020042350F03252B35005D35FFFF006AFFE104C306530236 +02470000011600D7C400001540100210372037403750370400372A0600252B5D3500FFFF +0073FE82068B05F00236024600000117024B009A0000000AB6020037380F03252B35FFFF +006AFE8204C305840236024700000116024BE200000AB602002C2D0600252B35FFFF00B2 +FE82052905D10236003800000116024B6200000AB6010020210C00252B35FFFF00B1FE82 +0457045D0236005800000116024BFD00000AB60100191A0916252B35FFFF00B2FFE10529 +080102360038000001170256006201750012400B01502301010023220C00252B35005D35 +FFFF00B1FFE10457068C0236005800000116024AFD00000AB601001C1B0916252B35FFFF +00B2FFE1067508010236024800000117008D007C01750014400D01502E602E0201002E2D +0C00252B35005D35FFFF00B1FFE105A5068C0236024900000116008DEE00001840100160 +28010130284028020028290900252B5D35005D35FFFF00B2FFE106750801023602480000 +0117004300AA0175001C401401502D602D0201402D602D802D03002D2D0C00252B5D3500 +5D35FFFF00B1FFE105A5068C023602490000011600430200001840100160270101502760 +27020027270800252B5D35005D35FFFF00B2FFE106750801023602480000011702560062 +01750012400B01503101010031300C00252B35005D35FFFF00B1FFE105A5068C02360249 +00000116024AFD00000AB601002B2A0800252B35FFFF00B2FFE1067507BE023602480000 +011700D70062016B000AB60100392C0C00252B35FFFF00B1FFE105A50653023602490000 +011600D7FD00000AB6010033260800252B35FFFF00B2FE82067506F80236024800000116 +024B6200000AB601002E2F0D00252B35FFFF00B1FE8205A505840236024900000116024B +FD00000AB6010028290800252B35FFFF0006000004E608010236003C000001170043FFE4 +0175001B400A01500A600A0201500A01B8FFD3B40A0A0401252B5D35005D3500FFFF003D +FE64047F068C0236005C000001160043DD000013B5016009700902B8FFDDB40909040025 +2B5D3500FFFF0006FE8204E605D10236003C00000116024BEC00000AB601000A09040125 +2B35FFFF003DFE64047F045D0236005C00000117024B010400000012400D010A0F0A2F0A +4F0A6F0A7F0A055D1135FFFF0006000004E608010236003C000001170256FFEC01750018 +401001500E0101C00ED00E02000E0D0302252B5D35005D35FFFF003DFE64047F068C0236 +005C00000116024AC900000F400A01500D01000D0C0400252B5D3500FFFF0006000004E6 +07C80236003C0000011700D7FFEC01750012400B01501601010016090500252B35005D35 +FFFF003DFE64047F06530236005C0000011600D7DD00000AB6010015080400252B350003 +006CFEBD04FB0614001B0028002C007E40523B05380C3C2232243E284B054A0C4E224524 +4F285908690870120D2AB52B0114511A17171018011304072041100403082642070A2C2B +2C2B010A1600881617131C041A1A01922E1F2E3F2E02231B010A852D10F632ED5D10F632 +ED32323232ED2F111239392F2F003FED3F3FED1239393F12392F3CFD3C2FED31305D0123 +1123350E01232202113436373E0133321617352135213533153301112E01232206151416 +3332361321352104FBB8BC4DAD6EC6ED524444B66059864CFE95016BBCB8FE8C4F73499C +B2879750A4EAFCB4034C04F4FB0C754252012E01118EDB4D4C4F2427CE869A9AFB990279 +2218D6CCC3CD47FDE286FFFF00ED051D042C0653001600D700000002008A009104900498 +0023002F004D40332D290B0802231D1A141108172F0501052729050F1701170F311F3102 +24290B0802231D1A1411080E202001202A29200F0E010E2F5D33ED2F5D121739ED5D002F +5D33ED2F5D121739ED31300107270E01232226270727372E01353436372737173E013332 +16173717071E011514060727342623220615141633323604906EEC2C4A342E5724EC6DE9 +1718161AEA6FEB24572D2C5825EA71EB1818191765694B496B694B496B01016EEA1A1619 +17EC71EA25592B34492BED6EEB17191817EA6DED2653302D5824A949706E4B4A6F6D0000 +0002000000000000FF4C00780000000000000000000000000000000000000000037D0000 +01020103010401050106010701080109010A010B010C010D010E010F0110011101120113 +011401150116011701180119011A011B011C011D011E011F012001210122012301240125 +0126012701280129012A012B012C012D012E012F01300131013201330134013501360137 +01380139013A013B013C013D013E013F0140014101420143014401450146014701480149 +014A014B014C014D014E014F0150015101520153015401550156015701580159015A015B +015C015D015E015F0160016101620163016401650166016701680169016A016B016C016D +016E016F0170017101720173017401750176017701780179017A017B017C017D017E017F +0180018101820183018401850186018701880189018A018B018C018D018E018F01900191 +01920193019401950196019701980199019A019B019C019D019E019F01A001A101A201A3 +01A401A501A601A701A801A901AA01AB01AC01AD01AE01AF01B001B101B201B301B401B5 +01B601B701B801B901BA01BB01BC01BD01BE01BF01C001C101C201C301C401C501C601C7 +01C801C901CA01CB01CC01CD01CE01CF01D001D101D201D301D401D501D601D701D801D9 +01DA01DB01DC01DD01DE01DF01E001E101E201E301E401E501E601E701E801E901EA01EB +01EC01ED01EE01EF01F001F101F201F301F401F501F601F701F801F901FA01FB01FC01FD +01FE01FF0200020102020203020402050206020702080209020A020B020C020D020E020F +0210021102120213021402150216021702180219021A021B021C021D021E021F02200221 +02220223022402250226022702280229022A022B022C022D022E022F0230023102320233 +023402350236023702380239023A023B023C023D023E023F024002410242024302440245 +0246024702480249024A024B024C024D024E024F02500251025202530254025502560257 +02580259025A025B025C025D025E025F0260026102620263026402650266026702680269 +026A026B026C026D026E026F0270027102720273027402750276027702780279027A027B +027C027D027E027F0280028102820283028402850286028702880289028A028B028C028D +028E028F0290029102920293029402950296029702980299029A029B029C029D029E029F +02A002A102A202A302A402A502A602A702A802A902AA02AB02AC02AD02AE02AF02B002B1 +02B202B302B402B502B602B702B802B902BA02BB02BC02BD02BE02BF02C002C102C202C3 +02C402C502C602C702C802C902CA02CB02CC02CD02CE02CF02D002D102D202D302D402D5 +02D602D702D802D902DA02DB02DC02DD02DE02DF02E002E102E202E302E402E502E602E7 +02E802E902EA02EB02EC02ED02EE02EF02F002F102F202F302F402F502F602F702F802F9 +02FA02FB02FC02FD02FE02FF0300030103020303030403050306030703080309030A030B +030C030D030E030F0310031103120313031403150316031703180319031A031B031C031D +031E031F0320032103220323032403250326032703280329032A032B032C032D032E032F +0330033103320333033403350336033703380339033A033B033C033D033E033F03400341 +03420343034403450346034703480349034A034B034C034D034E034F0350035103520353 +035403550356035703580359035A035B035C035D035E035F036003610362036303640365 +0366036703680369036A036B036C036D036E036F03700371037203730374037503760377 +03780379037A037B037C037D037E037F0380038103820383038403850386038703880389 +038A038B038C038D038E038F0390039103920393039403950396039703980399039A039B +039C039D039E039F03A003A103A203A303A403A503A603A703A803A903AA03AB03AC03AD +03AE03AF03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE03CF03D003D1 +03D203D303D403D503D603D703D803D903DA03DB03DC03DD03DE03DF03E003E103E203E3 +03E403E503E603E703E803E903EA03EB03EC03ED03EE03EF03F003F103F203F303F403F5 +03F603F703F803F903FA03FB03FC03FD03FE03FF04000401040204030404040504060407 +04080409040A040B040C040D040E040F0410041104120413041404150416041704180419 +041A041B041C041D041E041F0420042104220423042404250426042704280429042A042B +042C042D042E042F0430043104320433043404350436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D044E044F +0450045104520453045404550456045704580459045A045B045C045D045E045F04600461 +04620463046404650466046704680469046A046B046C046D046E046F0470047104720473 +047404750476047704780479047A047B047C047D052E6E756C6C106E6F6E6D61726B696E +6772657475726E057370616365066578636C616D0871756F746564626C0A6E756D626572 +7369676E06646F6C6C61720770657263656E7409616D70657273616E640B71756F746573 +696E676C6509706172656E6C6566740A706172656E726967687408617374657269736B04 +706C757305636F6D6D610668797068656E06706572696F6405736C617368047A65726F03 +6F6E650374776F05746872656504666F757204666976650373697805736576656E056569 +676874046E696E6505636F6C6F6E0973656D69636F6C6F6E046C65737305657175616C07 +67726561746572087175657374696F6E0261740141014201430144014501460147014801 +49014A014B014C014D014E014F0150015101520153015401550156015701580159015A0B +627261636B65746C656674096261636B736C6173680C627261636B657472696768740B61 +7363696963697263756D0A756E64657273636F7265056772617665016101620163016401 +650166016701680169016A016B016C016D016E016F017001710172017301740175017601 +7701780179017A0962726163656C656674036261720A627261636572696768740A617363 +696974696C646509416469657265736973054172696E670843636564696C6C6106456163 +757465064E74696C6465094F646965726573697309556469657265736973066161637574 +65066167726176650B6163697263756D666C657809616469657265736973066174696C64 +65056172696E670863636564696C6C6106656163757465066567726176650B6563697263 +756D666C65780965646965726573697306696163757465066967726176650B6963697263 +756D666C657809696469657265736973066E74696C6465066F6163757465066F67726176 +650B6F63697263756D666C6578096F6469657265736973066F74696C6465067561637574 +65067567726176650B7563697263756D666C657809756469657265736973066461676765 +72066465677265650463656E7408737465726C696E670773656374696F6E0662756C6C65 +74097061726167726170680A6765726D616E64626C730A7265676973746572656409636F +707972696768740974726164656D61726B056163757465086469657265736973086E6F74 +657175616C024145064F736C61736808696E66696E69747909706C75736D696E7573096C +657373657175616C0C67726561746572657175616C0379656E036D75310B706172746961 +6C646966660973756D6D6174696F6E0770726F647563740370693108696E74656772616C +0B6F726466656D696E696E650C6F72646D617363756C696E65034F686D026165066F736C +6173680C7175657374696F6E646F776E0A6578636C616D646F776E0A6C6F676963616C6E +6F74077261646963616C06666C6F72696E0B617070726F78657175616C09696E6372656D +656E740D6775696C6C656D6F746C6566740E6775696C6C656D6F74726967687408656C6C +697073697306416772617665064174696C6465064F74696C6465024F45026F6506656E64 +61736806656D646173680C71756F746564626C6C6566740D71756F746564626C72696768 +740971756F74656C6566740A71756F7465726967687406646976696465076C6F7A656E67 +650979646965726573697309596469657265736973086672616374696F6E044575726F0D +6775696C73696E676C6C6566740E6775696C73696E676C726967687402666902666C0964 +616767657264626C0E706572696F6463656E74657265640E71756F746573696E676C6261 +73650C71756F746564626C626173650B70657274686F7573616E640B4163697263756D66 +6C65780B4563697263756D666C6578064161637574650945646965726573697306456772 +617665064961637574650B4963697263756D666C65780949646965726573697306496772 +617665064F61637574650B4F63697263756D666C6578064F677261766506556163757465 +0B5563697263756D666C65780655677261766508646F746C657373690A63697263756D66 +6C65780574696C6465066D6163726F6E05627265766509646F74616363656E740472696E +6707636564696C6C610C68756E676172756D6C617574066F676F6E656B056361726F6E06 +4C736C617368066C736C61736806536361726F6E06736361726F6E065A6361726F6E067A +6361726F6E0962726F6B656E626172034574680365746806596163757465067961637574 +650554686F726E0574686F726E056D696E7573086D756C7469706C790B6F6E6573757065 +72696F720B74776F7375706572696F720D74687265657375706572696F72076F6E656861 +6C660A6F6E65717561727465720D74687265657175617274657273056672616E63064762 +72657665066762726576650449646F740853636564696C6C610873636564696C6C610643 +61637574650663616375746506436361726F6E06636361726F6E07646D6163726F6E096F +76657273636F7265066D6964646F74064162726576650661627265766507416F676F6E65 +6B07616F676F6E656B06446361726F6E06646361726F6E0644736C61736807456F676F6E +656B07656F676F6E656B06456361726F6E06656361726F6E064C6163757465066C616375 +7465064C6361726F6E066C6361726F6E044C646F74046C646F74064E6163757465066E61 +63757465064E6361726F6E066E6361726F6E094F64626C6163757465096F64626C616375 +7465065261637574650672616375746506526361726F6E06726361726F6E065361637574 +65067361637574650854636564696C6C610874636564696C6C6106546361726F6E067463 +61726F6E055572696E67057572696E67095564626C6163757465097564626C6163757465 +065A6163757465067A6163757465045A646F74047A646F740547616D6D61055468657461 +0350686905616C7068610564656C746107657073696C6F6E057369676D61037461750370 +68690D756E64657273636F726564626C096578636C616D64626C096E7375706572696F72 +0670657365746102494A02696A0B6E61706F7374726F706865066D696E75746506736563 +6F6E64096166696936313234380961666969363132383906483232303733064831383534 +3306483138353531064831383533330A6F70656E62756C6C657407416D6163726F6E0761 +6D6163726F6E0B4363697263756D666C65780B6363697263756D666C65780443646F7404 +63646F7407456D6163726F6E07656D6163726F6E06456272657665066562726576650445 +646F740465646F740B4763697263756D666C65780B6763697263756D666C65780447646F +740467646F740847636564696C6C610867636564696C6C610B4863697263756D666C6578 +0B6863697263756D666C657804486261720468626172064974696C6465066974696C6465 +07496D6163726F6E07696D6163726F6E064962726576650669627265766507496F676F6E +656B07696F676F6E656B0B4A63697263756D666C65780B6A63697263756D666C6578084B +636564696C6C61086B636564696C6C610C6B677265656E6C616E646963084C636564696C +6C61086C636564696C6C61084E636564696C6C61086E636564696C6C6103456E6703656E +67074F6D6163726F6E076F6D6163726F6E064F6272657665066F62726576650852636564 +696C6C610872636564696C6C610B5363697263756D666C65780B7363697263756D666C65 +7804546261720474626172065574696C6465067574696C646507556D6163726F6E07756D +6163726F6E065562726576650675627265766507556F676F6E656B07756F676F6E656B0B +5763697263756D666C65780B7763697263756D666C65780B5963697263756D666C65780B +7963697263756D666C6578056C6F6E67730A4172696E6761637574650A6172696E676163 +757465074145616375746507616561637574650B4F736C61736861637574650B6F736C61 +7368616375746509616E6F74656C65696106576772617665067767726176650657616375 +746506776163757465095764696572657369730977646965726573697306596772617665 +067967726176650D71756F74657265766572736564097261646963616C65780961666969 +303839343109657374696D61746564096F6E656569676874680C74687265656569676874 +68730B66697665656967687468730C736576656E656967687468730B636F6D6D61616363 +656E7410756E646572636F6D6D61616363656E7405746F6E6F730D646965726573697374 +6F6E6F730A416C706861746F6E6F730C457073696C6F6E746F6E6F7308457461746F6E6F +7309496F7461746F6E6F730C4F6D6963726F6E746F6E6F730C557073696C6F6E746F6E6F +730A4F6D656761746F6E6F7311696F74616469657265736973746F6E6F7305416C706861 +04426574610544656C746107457073696C6F6E045A6574610345746104496F7461054B61 +707061064C616D626461024D75024E75025869074F6D6963726F6E0250690352686F0553 +69676D610354617507557073696C6F6E0343686903507369054F6D6567610C496F746164 +696572657369730F557073696C6F6E64696572657369730A616C706861746F6E6F730C65 +7073696C6F6E746F6E6F7308657461746F6E6F7309696F7461746F6E6F7314757073696C +6F6E6469657265736973746F6E6F7304626574610567616D6D61047A6574610365746105 +746865746104696F7461056B61707061066C616D626461026D75026E75027869076F6D69 +63726F6E0372686F067369676D613107757073696C6F6E0363686903707369056F6D6567 +610C696F746164696572657369730F757073696C6F6E64696572657369730C6F6D696372 +6F6E746F6E6F730C757073696C6F6E746F6E6F730A6F6D656761746F6E6F730961666969 +313030323309616669693130303531096166696931303035320961666969313030353309 +616669693130303534096166696931303035350961666969313030353609616669693130 +303537096166696931303035380961666969313030353909616669693130303630096166 +696931303036310961666969313030363209616669693130313435096166696931303031 +370961666969313030313809616669693130303139096166696931303032300961666969 +313030323109616669693130303232096166696931303032340961666969313030323509 +616669693130303236096166696931303032370961666969313030323809616669693130 +303239096166696931303033300961666969313030333109616669693130303332096166 +696931303033330961666969313030333409616669693130303335096166696931303033 +360961666969313030333709616669693130303338096166696931303033390961666969 +313030343009616669693130303431096166696931303034320961666969313030343309 +616669693130303434096166696931303034350961666969313030343609616669693130 +303437096166696931303034380961666969313030343909616669693130303635096166 +696931303036360961666969313030363709616669693130303638096166696931303036 +390961666969313030373009616669693130303732096166696931303037330961666969 +313030373409616669693130303735096166696931303037360961666969313030373709 +616669693130303738096166696931303037390961666969313030383009616669693130 +303831096166696931303038320961666969313030383309616669693130303834096166 +696931303038350961666969313030383609616669693130303837096166696931303038 +380961666969313030383909616669693130303930096166696931303039310961666969 +313030393209616669693130303933096166696931303039340961666969313030393509 +616669693130303936096166696931303039370961666969313030373109616669693130 +303939096166696931303130300961666969313031303109616669693130313032096166 +696931303130330961666969313031303409616669693130313035096166696931303130 +360961666969313031303709616669693130313038096166696931303130390961666969 +313031313009616669693130313933096166696931303035300961666969313030393809 +616669693030323038096166696936313335320270690C6F6E656E756D657261746F720C +74776F6E756D657261746F720E74687265656E756D657261746F720D666F75726E756D65 +7261746F720D666976656E756D657261746F720E736576656E6E756D657261746F720E65 +696768746E756D657261746F7210446F6E74436F6D707265737348544D5808676C797068 +35373908676C79706835383008676C797068353831054F686F726E056F686F726E055568 +6F726E0575686F726E0D686F6F6B61626F7665636F6D620C646F7462656C6F77636F6D62 +096772617665636F6D62096163757465636F6D6208676C79706835393008676C79706835 +393108676C79706835393208676C79706835393308676C79706835393408676C79706835 +393508676C79706835393608676C79706835393708676C79706835393808676C79706835 +393908676C79706836303008676C79706836303108676C79706836303208676C79706836 +303308676C7970683630340941646F7462656C6F770961646F7462656C6F770A41686F6F +6B61626F76650A61686F6F6B61626F7665104163697263756D666C657861637574651061 +63697263756D666C65786163757465104163697263756D666C6578677261766510616369 +7263756D666C65786772617665144163697263756D666C6578686F6F6B61626F76651461 +63697263756D666C6578686F6F6B61626F7665104163697263756D666C657874696C6465 +106163697263756D666C657874696C6465134163697263756D666C6578646F7462656C6F +77136163697263756D666C6578646F7462656C6F770B41627265766561637574650B6162 +7265766561637574650B41627265766567726176650B61627265766567726176650F4162 +72657665686F6F6B61626F76650F616272657665686F6F6B61626F76650B416272657665 +74696C64650B61627265766574696C64650E416272657665646F7462656C6F770E616272 +657665646F7462656C6F770945646F7462656C6F770965646F7462656C6F770A45686F6F +6B61626F76650A65686F6F6B61626F7665064574696C6465066574696C64651045636972 +63756D666C65786163757465106563697263756D666C6578616375746510456369726375 +6D666C65786772617665106563697263756D666C65786772617665144563697263756D66 +6C6578686F6F6B61626F7665146563697263756D666C6578686F6F6B61626F7665104563 +697263756D666C657874696C6465106563697263756D666C657874696C64651345636972 +63756D666C6578646F7462656C6F77136563697263756D666C6578646F7462656C6F770A +49686F6F6B61626F76650A69686F6F6B61626F76650949646F7462656C6F770969646F74 +62656C6F7708676C79706836343908676C79706836353008676C79706836353108676C79 +70683635320573686576610A68617461667365676F6C0A686174616670617461680B6861 +74616671616D617473056869726971057473657265057365676F6C057061746168067161 +6D61747305686F6C616D0671756275747306646167657368056D65746567056D61716166 +0472616665057061736571077368696E646F740673696E646F7408736F66706173757104 +616C6566036265740567696D656C0564616C657402686503766176057A6179696E036865 +740374657403796F640866696E616C6B6166036B6166056C616D65640866696E616C6D65 +6D036D656D0866696E616C6E756E036E756E0673616D656B68046179696E0766696E616C +70650270650A66696E616C747361646905747361646903716F660472657368047368696E +0374617609646F75626C6576617606766176796F6409646F75626C65796F640667657265 +73680967657273686179696D0D6E657773686571656C7369676E0A7661767368696E646F +740D66696E616C6B616673686576610E66696E616C6B616671616D6174730A6C616D6564 +686F6C616D106C616D6564686F6C616D64616765736807616C746179696E0B7368696E73 +68696E646F740A7368696E73696E646F74117368696E6461676573687368696E646F7410 +7368696E64616765736873696E646F7409616C656670617461680A616C656671616D6174 +7309616C65666D61706971096265746461676573680B67696D656C6461676573680B6461 +6C6574646167657368086865646167657368097661766461676573680B7A6179696E6461 +676573680974657464616765736809796F646461676573680E66696E616C6B6166646167 +657368096B61666461676573680B6C616D6564646167657368096D656D64616765736809 +6E756E6461676573680C73616D656B686461676573680D66696E616C7065646167657368 +0870656461676573680B747361646964616765736809716F666461676573680A72657368 +6461676573680A7368696E64616765736808746176646167657308766176686F6C616D07 +62657472616665076B6166726166650670657261666509616C65666C616D6564127A6572 +6F77696474686E6F6E6A6F696E65720F7A65726F77696474686A6F696E65720F6C656674 +746F72696768746D61726B0F7269676874746F6C6566746D61726B096166696935373338 +380961666969353734303309616669693537343037096166696935373430390961666969 +353734343009616669693537343531096166696935373435320961666969353734353309 +616669693537343534096166696935373435350961666969353734353609616669693537 +343537096166696935373435380961666969353733393209616669693537333933096166 +696935373339340961666969353733393509616669693537333936096166696935373339 +370961666969353733393809616669693537333939096166696935373430300961666969 +353734303109616669693537333831096166696935373436310961666969363331363709 +616669693537343539096166696935373534330961666969353735333409616669693537 +343934096166696936323834330961666969363238343409616669693632383435096166 +696936343234300961666969363432343109616669693633393534096166696935373338 +320961666969363432343209616669693632383831096166696935373530340961666969 +353733363909616669693537333730096166696935373337310961666969353733373209 +616669693537333733096166696935373337340961666969353733373509616669693537 +333931096166696935373437310961666969353734363009616669693532323538096166 +696935373530360961666969363239353809616669693632393536096166696935323935 +370961666969353735303509616669693632383839096166696936323838370961666969 +363238383809616669693537353037096166696936323936310961666969363239353909 +616669693632393630096166696935373530380961666969363239363209616669693537 +353637096166696936323936340961666969353233303509616669693532333036096166 +696935373530390961666969363239363709616669693632393635096166696936323936 +360961666969353735353509616669693532333634096166696936333735330961666969 +363337353409616669693633373539096166696936333736330961666969363337393509 +616669693632383931096166696936333830380961666969363239333809616669693633 +383130096166696936323934320961666969363239343709616669693633383133096166 +696936333832330961666969363338323409616669693633383333096166696936333834 +340961666969363238383209616669693632383833096166696936323838340961666969 +363238383509616669693632383836094F646F7462656C6F77096F646F7462656C6F770A +4F686F6F6B61626F76650A6F686F6F6B61626F7665104F63697263756D666C6578616375 +7465106F63697263756D666C65786163757465104F63697263756D666C65786772617665 +106F63697263756D666C65786772617665144F63697263756D666C6578686F6F6B61626F +7665146F63697263756D666C6578686F6F6B61626F7665104F63697263756D666C657874 +696C6465106F63697263756D666C657874696C6465134F63697263756D666C6578646F74 +62656C6F77136F63697263756D666C6578646F7462656C6F770A4F686F726E6163757465 +0A6F686F726E61637574650A4F686F726E67726176650A6F686F726E67726176650E4F68 +6F726E686F6F6B61626F76650E6F686F726E686F6F6B61626F76650A4F686F726E74696C +64650A6F686F726E74696C64650D4F686F726E646F7462656C6F770D6F686F726E646F74 +62656C6F770955646F7462656C6F770975646F7462656C6F770A55686F6F6B61626F7665> +<0A75686F6F6B61626F76650A55686F726E61637574650A75686F726E61637574650A5568 +6F726E67726176650A75686F726E67726176650E55686F726E686F6F6B61626F76650E75 +686F726E686F6F6B61626F76650A55686F726E74696C64650A75686F726E74696C64650D +55686F726E646F7462656C6F770D75686F726E646F7462656C6F7708676C797068383832 +08676C7970683838330959646F7462656C6F770979646F7462656C6F770A59686F6F6B61 +626F76650A79686F6F6B61626F7665065974696C6465067974696C646504646F6E670974 +696C6465636F6D620863757272656E63790000000000000100000C92000102160C000009 +0084000400B4FF9C000400B6FF9C000A0024FF9C000A0090FF9C000F00B4FF2E000F00B6 +FF2E00100024FFCE0010002CFFE20010002DFF9C00100036FFEC00100037FF6A00100039 +FFCE0010003AFFCE0010003BFFB00010003CFF740010003DFFE200100044FFEC00100059 +FFD80010005AFFEC0010005BFFCE0010005CFFD80010005DFFD800100090FFCE001000A0 +FFEC0011000FFF7E00110010FF60001100B1FF88001100B2FF88001100B4FF2E001100B6 +FF2E001D00B2FF7400240010FFCE00240036FFF600240037FF8800240038FFF600240039 +FFC40024003AFFCE0024003CFFB000240057FFEC00240058FFF600240059FFCE0024005A +FFE20024005CFFCE002400B1FFCE002400B2FFCE002400B3FFCE002400B4FF88002400B5 +FFCE002400B6FF880025000FFFEC00250010000A00250011FFEC00250037FFC4002500AB +FFEC002500B1000A002500B2000A00260010FFCE002600AFFFE7002600B1FFCE002600B2 +FFCE0027000FFFCE00270011FFCE00270037FFCE0027003AFFEC0027003BFFF60027003C +FFEC0027003DFFEC002700ABFFCE0029000FFED400290011FED40029001DFFC40029001E +FFC400290022003C00290024FF9C00290037001E00290044FF9C00290048FFCE00290052 +FFCE00290090FF92002900A0FF9C002900A1FFCE002900ABFED4002900B0FFCE002C0010 +FFE2002C00B1FFE2002C00B2FFE2002D000FFFEC002D0011FFEC002D0024FFF6002D0090 +FFF6002D00ABFFEC002E0010FF92002E0032FFEC002E0044FFC4002E0048FFBA002E0052 +FFBA002E0058FFCE002E0059FFB0002E005AFFBA002E005CFFB0002E0091FFEC002E00A0 +FFC4002E00A1FFBA002E00AFFFEC002E00B0FFBA002E00B1FF92002E00B2FF92002F000A +FF88002F0010FF60002F0026FFEC002F002AFFEC002F002D0064002F0032FFEC002F0037 +FF56002F0039FF92002F003AFF9C002F003CFF60002F0059FF92002F005CFF92002F0064 +FFEC002F0091FFEC002F00AFFFEC002F00B1FF60002F00B2FF60002F00B4FF60002F00B6 +FF600032000FFFE200320011FFE200320037FFCE0032003BFFF60032003CFFEC0032003D +FFEC003200ABFFE20033000FFED400330011FED400330024FFCE0033003C001400330044 +FFCE00330048FFCE00330052FFCE00330090FFBA003300A0FFCE003300A1FFCE003300AB +FED4003300B0FFCE0034000FFFE200340011FFE2003400ABFFE200350010FF9C00350037 +FFC40035003CFFEC00350044FFD800350048FFCE00350052FFCE00350058FFEC0035005C +FFC9003500A0FFCE003500A1FFCE003500B0FFC4003500B1FF9C003500B2FF9C003500B4 +FFBA003500B6FFBA0036000FFFEC00360011FFEC00360024FFEC00360036FFEA00360059 +FFE20036005AFFEC0036005CFFE200360090FFEC003600ABFFEC0037000FFEDE00370010 +FF6A00370011FEDE0037001DFF380037001EFF3800370022003C00370024FF8800370026 +FFD80037002AFFD800370032FFCE00370036FFF400370037FFBA00370044FF1000370046 +FF2400370048FF240037004AFF2E00370052FF2400370055FF3800370056FF4C00370058 +FF3800370059FF380037005AFF380037005CFF380037005DFF5600370064FFD800370090 +FF7E00370091FFCE003700A0FF10003700A1FF24003700ABFEDE003700AFFFCE003700B0 +FF24003700B1FF6A003700B2FF6A0038000FFFEC00380011FFEC00380024FFF600380090 +FFEC003800ABFFEC0039000FFEDE00390010FFCE00390011FEDE0039001DFFB00039001E +FFB000390024FFC400390044FF9C00390048FF9C00390052FF9C00390058FFC40039005C +FFBF00390090FFBA003900A0FF9C003900A1FF9C003900ABFEDE003900B0FF9C003900B1 +FFCE003900B2FFCE003A000FFEDE003A0010FFCE003A0011FF24003A001DFFB0003A001E +FFB0003A0024FFCE003A0044FF9C003A0048FF9C003A0052FF9C003A0055FFC4003A0058 +FFC4003A005CFFBF003A0090FFC4003A00A0FF9C003A00A1FF9C003A00ABFF24003A00B0 +FF9C003A00B1FFCE003A00B2FFCE003B0010FFB0003B0026FFF6003B002AFFF6003B0032 +FFF6003B0044FFCE003B0048FFC4003B0052FFC4003B0058FFE2003B005CFFB0003B0064 +FFF6003B0091FFF6003B00A0FFCE003B00A1FFC4003B00AFFFF6003B00B0FFC4003B00B1 +FFB0003B00B2FFB0003C000FFEDE003C0010FF74003C0011FEDE003C001DFF38003C001E +FF38003C0024FFB0003C0032FFEC003C0044FF74003C0047FF88003C0048FF7E003C004A +FF7E003C0050FF9C003C0051FF9C003C0052FF7E003C0053FF9C003C0054FF7E003C0055 +FF9C003C0056FF92003C0058FF92003C0059FF9C003C0090FFB0003C0091FFEC003C00A0 +FF74003C00A1FF7E003C00ABFEDE003C00AFFFEC003C00B0FF7E003C00B1FF74003C00B2 +FF74003D0010FFC4003D0026FFEC003D002AFFEC003D0032FFEC003D003DFFF6003D0044 +FFCE003D0048FFC4003D0052FFC4003D005AFFD8003D005CFFBF003D0064FFEC003D0091 +FFEC003D00A0FFCE003D00A1FFC4003D00AFFFEC003D00B0FFC4003D00B1FFCE003D00B2 +FFCE00440059FFF00044005AFFF60044005CFFF00045000FFFE200450011FFEC0045005C +FFFB004500ABFFEC00460010FFEC00460037FFC4004600B1FFEC004600B2FFEC00480037 +FF7400490005003C0049000A003C0049000C00640049000D00320049000FFF7E00490010 +FFCE00490011FF8800490022006E0049003F00640049004000640049005CFFF600490060 +0064004900ABFF88004900B1FFCE004900B2FFCE004900B40032004900B60032004B0059 +FFEC004B005AFFF6004B005CFFEC004E0010FF9C004E0048FFEC004E0052FFEC004E00A1 +FFEC004E00B0FFEC004E00B1FF9C004E00B2FF9C00500059FFEC0050005AFFF60050005C +FFEC00510059FFEC0051005AFFF60051005CFFEC0052000FFFE200520011FFEC00520059 +FFF10052005BFFEC0052005CFFF1005200ABFFEC0053000FFFE200530011FFEC0053005C +FFFB005300ABFFEC0055000FFEDE00550010FFEC00550011FEDE00550044FFDC005500A0 +FFD8005500ABFEDE005500B1FFEC005500B2FFEC005500B4001E005500B6001E00570010 +FFD80057005CFFF6005700B1FFD8005700B2FFD8005700B40014005700B600140059000F +FF4C00590010FFD800590011FF4C00590044FFD800590048FFEE00590052FFEE005900A0 +FFD8005900A1FFEE005900ABFF4C005900B0FFF1005900B1FFD8005900B2FFD8005A000F +FFBA005A0010FFEC005A0011FFBA005A0044FFEC005A00A0FFEC005A00ABFFBA005A00B1 +FFEC005A00B2FFEC005B0010FFCE005B0046FFEC005B0047FFF6005B0048FFE8005B004A +FFF6005B0052FFE8005B006FFFEC005B00A1FFE8005B00B0FFEC005B00B1FFCE005B00B2 +FFCE005C000FFF42005C0010FFD8005C0011FF42005C0044FFD8005C0046FFEE005C0047 +FFF6005C0048FFEE005C004AFFF6005C0052FFEE005C0054FFF6005C006FFFEE005C00A0 +FFD8005C00A1FFEE005C00ABFF4C005C00B0FFF1005C00B1FFD8005C00B2FFD8005D0010 +FFEC005D0046FFF6005D0047FFF6005D0048FFF4005D004AFFF6005D0052FFF4005D0054 +FFF6005D006FFFF6005D00A1FFF4005D00B1FFEC005D00B2FFEC00640010FFCE006400AF +FFE7006400B1FFCE006400B2FFCE006F0010FFEC006F00B1FFEC006F00B2FFEC0091000F +FFE200910011FFE200910037FFCE0091003BFFF60091003CFFEC0091003DFFEC009100AB +FFE200A1000FFFE200A10011FFEC00A10059FFF100A1005BFFEC00A1005CFFF100A100AB +FFEC00AB00B4FF2E00AB00B6FF2E00B10024FFCE00B1002CFFE200B1002DFF9C00B10036 +FFEC00B10037FF6A00B10039FFCE00B1003AFFCE00B1003BFFB000B1003CFF7400B1003D +FFF600B10044FFEC00B10059FFD800B1005AFFEC00B1005BFFCE00B1005CFFD800B1005D +FFD800B10090FFCE00B100A0FFEC00B20024FFCE00B2002CFFE200B2002DFF9C00B20036 +FFEC00B20037FF6A00B20039FFCE00B2003AFFCE00B2003BFFB000B2003CFF7400B2003D +FFF600B20044FFEC00B20059FFD800B2005AFFEC00B2005BFFCE00B2005CFFD800B2005D +FFD800B20090FFCE00B200A0FFEC00B30024FF9C00B30090FF9C00B4000FFF2E00B40011 +FF2E00B40024FF9C00B40037006E00B40039006400B4003A003C00B4003C006E00B40056 +FFBA00B40057002800B40090FF9C00B400ABFF2E00B50024FF9C00B50090FF9C00B6000F +FF2E00B60011FF2E00B60024FF9C00B60037006E00B60039006400B6003A003C00B6003C +006E00B60056FFBA00B60057002800B60090FF9C00B600ABFF2E00C30037FF2E00C30039 +FF2E00C3003AFF9C00C3003CFF2E00C40037FF2E00C40039FF2E00C4003AFF9C00C4003C +FF2E0000000000010001000100000001000013FF0000001400000000000013F7308213F3 +06092A864886F70D010702A08213E4308213E0020101310E300C06082A864886F70D0205 +05003060060A2B060104018237020104A0523050302C060A2B06010401823702011CA21E +801C003C003C003C004F00620073006F006C006500740065003E003E003E3020300C0608 +2A864886F70D020505000410503EEC935CE1D8D33511E69A791E4594A0820F3F308202C0 +3082022902141389B4D18AE8A7C4BD35C79B8D88CA1FCA535691300D06092A864886F70D +010104050030819E311F301D060355040A1316566572695369676E205472757374204E65 +74776F726B31173015060355040B130E566572695369676E2C20496E632E312C302A0603 +55040B1323566572695369676E2054696D65205374616D70696E67205365727669636520 +526F6F7431343032060355040B132B4E4F204C494142494C495459204143434550544544 +2C20286329393720566572695369676E2C20496E632E301E170D39373035313230373030 +30305A170D3939313233313037303030305A30819E311F301D060355040A131656657269 +5369676E205472757374204E6574776F726B31173015060355040B130E56657269536967 +6E2C20496E632E312C302A060355040B1323566572695369676E2054696D65205374616D +70696E67205365727669636520526F6F7431343032060355040B132B4E4F204C49414249 +4C4954592041434345505445442C20286329393720566572695369676E2C20496E632E30 +819F300D06092A864886F70D010101050003818D0030818902818100D32E20F0687C2C2D +2E811CB106B2A70BB7110D57DA53D875E3C9332AB2D4F6095B34F3E990FE090CD0DB1B5A +B9CDE7F688B19DC08725EB7D5810736A78CB7115FDC658F629AB585E9604FD2D62115881 +1CCA7194D522582FD5CC14058436BA94AAB44D4AE9EE3B22AD56997E219C6C86C04A4797 +6AB4A636D5FC092DD3B4399B0203010001300D06092A864886F70D010104050003818100 +3A119C85053ED2E980FB7BD5A9F4AC79FC05FC953D7123A92B28DF8C136589FE2C87018F +5A9A62CA11A780F4B7BE14B7D156996B086245C6A2A5DA357F0522DE722D048605A77C09 +16931443F0F7164DD6078E9B106C58FE0A3597CA899FDF04709C2A7D618EC1E80B719AA8 +C76662423D959422329822898AFA640824F5D2FA308202CD30820236021500BD119ADA43 +ED21FB46588489CA46889025EE1460300D06092A864886F70D010104050030819E311F30 +1D060355040A1316566572695369676E205472757374204E6574776F726B311730150603 +55040B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369 +676E2054696D65205374616D70696E67205365727669636520526F6F7431343032060355 +040B132B4E4F204C494142494C4954592041434345505445442C20286329393720566572 +695369676E2C20496E632E301E170D3937303531323037303030305A170D393931323331 +3037303030305A3081AC31273025060355040B131E566572695369676E2054696D652053 +74616D70696E672053657276696365311F301D060355040B1316566572695369676E2054 +72757374204E6574776F726B31343032060355040B132B4E4F204C494142494C49545920 +41434345505445442C20286329393720566572695369676E2C20496E632E311730150603 +55040A130E566572695369676E2C20496E632E3111300F06035504071308496E7465726E +657430819D300D06092A864886F70D010101050003818B0030818702818100AB61EDB4AD +8D904790DCB4115E69DC0A7F62900631CDCEFF889146D7493A94E9D4063F9DADA2785AEC +F9FC63454FB80B6E30EFA236AB2D09DFF16F27AB0D516005354F7FCE544FD0B72C42D80B +D08DB85EFFB680D0E396B47F224942106CD398B00156A3C3CF2E9F3AF47FA858A6D72265 +E58CAB789CBCD94742685B2D7DFDB5020103300D06092A864886F70D0101040500038181 +006D60FB995FA469B3D37B702B62231E442051AF2315C77402F949F2271A5CAC86713508 +2BF68FDEE0B596E88BA74BE373C848099DB0DA8BDA1592CA03E509255606E74EA447A5D1 +5746D43856F521CDC3263B2D2532CE9BE2BF4047EAD86D4776E5C030A30F80CE7FD83B7E +A0F9952A312B15FAC814EDDDB0E9554170462D2C7E308209A63082090FA0030201020210 +7966966E83B0D0B601126E9DC0B46571300D06092A864886F70D01010205003061311130 +0F06035504071308496E7465726E657431173015060355040A130E566572695369676E2C +20496E632E31333031060355040B132A566572695369676E20436F6D6D65726369616C20 +536F667477617265205075626C697368657273204341301E170D39383034313630303030 +30305A170D3939303431363233353935395A3082015D3111300F06035504071308496E74 +65726E657431173015060355040A130E566572695369676E2C20496E632E313330310603 +55040B132A566572695369676E20436F6D6D65726369616C20536F667477617265205075 +626C69736865727320434131463044060355040B133D7777772E766572697369676E2E63 +6F6D2F7265706F7369746F72792F43505320496E636F72702E206279205265662E2C4C49 +41422E4C54442863293936313E303C060355040B13354469676974616C20494420436C61 +73732033202D204D6963726F736F667420536F6674776172652056616C69646174696F6E +207632310B3009060355040613025553311330110603550408130A57617368696E67746F +6E3110300E060355040713075265646D6F6E64311E301C060355040314154D6963726F73 +6F667420436F72706F726174696F6E311E301C060355040B14154D6963726F736F667420 +436F72706F726174696F6E30820120300D06092A864886F70D01010105000382010D0030 +8201080282010100B490D226A864E6EB15C3FF6D7B414F0AF96F2A71CE2E1853A63236E0 +D468E135FD4912D896FC65CF531420BE04C97AF5C9706D94ECCCB3AF2A309A32587CB6A9 +6B256799C0E277EA05E5EFE396F7AD0B19A6AE3C8470E2F86F5C4F7D6F0F52458A15D765 +DC3B2005E33DA16C973A0E0B2513ED21CB208E397A628305C9231AFC529DAC9D4C96D73C +4E583D827BEE093556B568C04245A23B31A3FBD895FB55C72CA8A3C3294FCEF493F0031F +7BF1153AA9F8AA5083056D62F08B138838D9E31C0E73C10640BA28C3EBCD9271C7BE66B2 +A15422D60B677CF8877989AC660AAA51FAFD7221FC865DC6F44A0EEC5861234DD0B13A64 +E0139E5EC8856D4C16AF3D07020103A38205DD308205D930090603551D1304023000300B +0603551D0F0404030205A03081880603551D01048180307E80107B96E4D143FD6898F338 +CC6E3BF20B82A16330613111300F06035504071308496E7465726E657431173015060355 +040A130E566572695369676E2C20496E632E31333031060355040B132A56657269536967 +6E20436F6D6D65726369616C20536F667477617265205075626C69736865727320434182 +0502B400000130210603551D040101FF04173014300E300C060A2B060104018237020116 +0302078000300D0603551D0A040630040302064030820436060A2B06010401823702010A +0101FF048204233082041FA029802768747470733A2F2F7777772E766572697369676E2E +636F6D2F7265706F7369746F72792F435053A18203B8818203B454686973206365727469 +66696361746520696E636F72706F7261746573206279207265666572656E63652C20616E +642069747320757365206973207374726963746C790A7375626A65637420746F2C207468 +6520566572695369676E2043657274696669636174696F6E205072616374696365205374 +6174656D656E742028435053290A76657273696F6E20312E302C20617661696C61626C65 +20696E2074686520566572695369676E207265706F7369746F72792061743A0A68747470 +733A2F2F7777772E766572697369676E2E636F6D3B20627920452D6D61696C2061742043 +50532D726571756573747340766572697369676E2E636F6D3B206F720A6279206D61696C +20617420566572695369676E2C20496E632E2C203235393320436F617374204176652E2C +204D6F756E7461696E20566965772C2043412039343034330A55534120436F7079726967 +6874202863293139393620566572695369676E2C20496E632E2020416C6C205269676874 +732052657365727665642E204345525441494E0A57415252414E5449455320444953434C +41494D454420414E44204C494142494C495459204C494D495445442E0A0A5741524E494E +473A2054484520555345204F462054484953204345525449464943415445204953205354 +524943544C59205355424A45435420544F205448450A564552495349474E204345525449 +4649434154494F4E2050524143544943452053544154454D454E542E2020544845204953 +5355494E4720415554484F524954590A444953434C41494D53204345525441494E20494D +504C49454420414E4420455850524553532057415252414E544945532C20494E434C5544 +494E472057415252414E544945530A4F46204D45524348414E544142494C495459204F52 +204649544E45535320464F52204120504152544943554C415220505552504F53452C2041 +4E442057494C4C204E4F540A4245204C4941424C4520464F5220434F4E53455155454E54 +49414C2C2050554E49544956452C20414E44204345525441494E204F544845522044414D +414745532E205345450A5448452043505320464F522044455441494C532E0A0A436F6E74 +656E7473206F662074686520566572695369676E2072656769737465726564206E6F6E76 +657269666965645375626A656374417474726962757465730A657874656E73696F6E2076 +616C7565207368616C6C206E6F7420626520636F6E736964657265642061732061636375 +7261746520696E666F726D6174696F6E0A76616C69646174656420627920746865204941 +2E0AA336803468747470733A2F2F7777772E766572697369676E2E636F6D2F7265706F73 +69746F72792F766572697369676E6C6F676F2E6769663081AF0603551D200481A7308030 +80060B6086480186F845010701013080302806082B06010505070201161C68747470733A +2F2F7777772E766572697369676E2E636F6D2F435053306206082B060105050702023056 +3015160E566572695369676E2C20496E632E30030201011A3D566572695369676E277320 +43505320696E636F72702E206279207265666572656E6365206C6961622E206C74642E20 +286329393720566572695369676E0000000000003016060A2B06010401823702011B0408 +30060101FF0101FF300D06092A864886F70D010102050003818100954CA27955DA745C8B +25C2A620F06CB8B37B467B9E9F7ABA710648151265CC5D29F8513B8971B1F4143878DA8F +AE0B8036905D4897C500380A53BF4037FF8A13276D004734F7484C2E72F2C6D37EFD446F +228FD1929FE394EDE7FF00C9C2EE721CD99C036EB6C1637B3278443B9E858AFB84863728 +2EE7A638373EBAFCF382233182042430820420020101307530613111300F060355040713 +08496E7465726E657431173015060355040A130E566572695369676E2C20496E632E3133 +3031060355040B132A566572695369676E20436F6D6D65726369616C20536F6674776172 +65205075626C69736865727320434102107966966E83B0D0B601126E9DC0B46571300C06 +082A864886F70D02050500A081AE301906092A864886F70D010903310C060A2B06010401 +8237020104301C060A2B06010401823702010B310E300C060A2B06010401823702011630 +1F06092A864886F70D010904311204105BA6237427F8290EF09CCF5B63F749F83052060A +2B06010401823702010C31443042A01A801800560065007200640061006E006100200046 +006F006E0074A1248022687474703A2F2F7777772E6D6963726F736F66742E636F6D2F74 +727565747970652F300D06092A864886F70D0101010500048201003EFBA519B6A00C823F +B823EA3A1E5E6EBDBBF2C647D1F1093C66910B72FEA26B78E409E7750E62A559DAAC12F7 +CCA36B0725F8BB2E0409AEE1156BE3736F46D1B116DF2B18ABCF394DCF0EF8EE01A758E5 +E4872882FFDD5F04C39F3258358C3DE27BE8FC410AC11736DD19609E3BACBB2257C5E4A4 +836F811D07EC80DAB42FE9AC33537823FA2AC0D406166130C356085818B3CEC8A53763BF +88191B4E52ED790B57C924CEA670505AA2621C1121663215F15D1A9E89A6BC2AA35F5B1F +86E4FDEC2280203A57D736DD2C29A4D2D29F00BAF260927AB3B36EF1C4CC5100CAC54BAA +0AFB74D0101FBEC53815E46B3814DF7E5DFC4A121257608F59AA76D5F333A3A18201D030 +8201CC06092A864886F70D010906318201BD308201B90201013081B830819E311F301D06 +0355040A1316566572695369676E205472757374204E6574776F726B3117301506035504 +0B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369676E +2054696D65205374616D70696E67205365727669636520526F6F7431343032060355040B +132B4E4F204C494142494C4954592041434345505445442C202863293937205665726953 +69676E2C20496E632E021500BD119ADA43ED21FB46588489CA46889025EE1460300C0608 +2A864886F70D02050500A059301806092A864886F70D010903310B06092A864886F70D01 +0701301C06092A864886F70D010905310F170D3938313131323135313835305A301F0609 +2A864886F70D01090431120410641EED59DAFC3103655C9A2A4309D288300D06092A8648 +86F70D01010105000481809092A6C858A52E216E3E56A1C40477C3C63030D247298EF8EA +BFA1C4D5DDE8C375555276DDBB2761ADFC914D772AD331C04DDD675B9736F7D136CAA72D +41CF9F8377C51611E0D1B6EDD8C5AB73694109FD5312908B17319E96C22CCEDD65C9D342 +DC0E3B159C36E0FDA54B21C8DD968B90621C263E94F737AC1997B9D84E517C0000> +] def +/CharStrings 893 dict dup begin +/.notdef 0 def /.null 1 def /nonmarkingreturn 2 def /space 3 def /exclam 4 def +/quotedbl 5 def /numbersign 6 def /dollar 7 def /percent 8 def +/ampersand 9 def /quotesingle 10 def /parenleft 11 def /parenright 12 def +/asterisk 13 def /plus 14 def /comma 15 def /hyphen 16 def +/period 17 def /slash 18 def /zero 19 def /one 20 def +/two 21 def /three 22 def /four 23 def /five 24 def +/six 25 def /seven 26 def /eight 27 def /nine 28 def +/colon 29 def /semicolon 30 def /less 31 def /equal 32 def +/greater 33 def /question 34 def /at 35 def /A 36 def +/B 37 def /C 38 def /D 39 def /E 40 def +/F 41 def /G 42 def /H 43 def /I 44 def +/J 45 def /K 46 def /L 47 def /M 48 def +/N 49 def /O 50 def /P 51 def /Q 52 def +/R 53 def /S 54 def /T 55 def /U 56 def +/V 57 def /W 58 def /X 59 def /Y 60 def +/Z 61 def /bracketleft 62 def /backslash 63 def /bracketright 64 def +/asciicircum 65 def /underscore 66 def /grave 67 def /a 68 def +/b 69 def /c 70 def /d 71 def /e 72 def +/f 73 def /g 74 def /h 75 def /i 76 def +/j 77 def /k 78 def /l 79 def /m 80 def +/n 81 def /o 82 def /p 83 def /q 84 def +/r 85 def /s 86 def /t 87 def /u 88 def +/v 89 def /w 90 def /x 91 def /y 92 def +/z 93 def /braceleft 94 def /bar 95 def /braceright 96 def +/asciitilde 97 def /Adieresis 98 def /Aring 99 def /Ccedilla 100 def +/Eacute 101 def /Ntilde 102 def /Odieresis 103 def /Udieresis 104 def +/aacute 105 def /agrave 106 def /acircumflex 107 def /adieresis 108 def +/atilde 109 def /aring 110 def /ccedilla 111 def /eacute 112 def +/egrave 113 def /ecircumflex 114 def /edieresis 115 def /iacute 116 def +/igrave 117 def /icircumflex 118 def /idieresis 119 def /ntilde 120 def +/oacute 121 def /ograve 122 def /ocircumflex 123 def /odieresis 124 def +/otilde 125 def /uacute 126 def /ugrave 127 def /ucircumflex 128 def +/udieresis 129 def /dagger 130 def /degree 131 def /cent 132 def +/sterling 133 def /section 134 def /bullet 135 def /paragraph 136 def +/germandbls 137 def /registered 138 def /copyright 139 def /trademark 140 def +/acute 141 def /dieresis 142 def /notequal 143 def /AE 144 def +/Oslash 145 def /infinity 146 def /plusminus 147 def /lessequal 148 def +/greaterequal 149 def /yen 150 def /mu1 151 def /partialdiff 152 def +/summation 153 def /product 154 def /pi1 155 def /integral 156 def +/ordfeminine 157 def /ordmasculine 158 def /Ohm 159 def /ae 160 def +/oslash 161 def /questiondown 162 def /exclamdown 163 def /logicalnot 164 def +/radical 165 def /florin 166 def /approxequal 167 def /increment 168 def +/guillemotleft 169 def /guillemotright 170 def /ellipsis 171 def /Agrave 172 def +/Atilde 173 def /Otilde 174 def /OE 175 def /oe 176 def +/endash 177 def /emdash 178 def /quotedblleft 179 def /quotedblright 180 def +/quoteleft 181 def /quoteright 182 def /divide 183 def /lozenge 184 def +/ydieresis 185 def /Ydieresis 186 def /fraction 187 def /Euro 188 def +/guilsinglleft 189 def /guilsinglright 190 def /fi 191 def /fl 192 def +/daggerdbl 193 def /periodcentered 194 def /quotesinglbase 195 def /quotedblbase 196 def +/perthousand 197 def /Acircumflex 198 def /Ecircumflex 199 def /Aacute 200 def +/Edieresis 201 def /Egrave 202 def /Iacute 203 def /Icircumflex 204 def +/Idieresis 205 def /Igrave 206 def /Oacute 207 def /Ocircumflex 208 def +/Ograve 209 def /Uacute 210 def /Ucircumflex 211 def /Ugrave 212 def +/dotlessi 213 def /circumflex 214 def /tilde 215 def /macron 216 def +/breve 217 def /dotaccent 218 def /ring 219 def /cedilla 220 def +/hungarumlaut 221 def /ogonek 222 def /caron 223 def /Lslash 224 def +/lslash 225 def /Scaron 226 def /scaron 227 def /Zcaron 228 def +/zcaron 229 def /brokenbar 230 def /Eth 231 def /eth 232 def +/Yacute 233 def /yacute 234 def /Thorn 235 def /thorn 236 def +/minus 237 def /multiply 238 def /onesuperior 239 def /twosuperior 240 def +/threesuperior 241 def /onehalf 242 def /onequarter 243 def /threequarters 244 def +/franc 245 def /Gbreve 246 def /gbreve 247 def /Idot 248 def +/Scedilla 249 def /scedilla 250 def /Cacute 251 def /cacute 252 def +/Ccaron 253 def /ccaron 254 def /dmacron 255 def /overscore 256 def +/middot 257 def /Abreve 258 def /abreve 259 def /Aogonek 260 def +/aogonek 261 def /Dcaron 262 def /dcaron 263 def /Dslash 264 def +/Eogonek 265 def /eogonek 266 def /Ecaron 267 def /ecaron 268 def +/Lacute 269 def /lacute 270 def /Lcaron 271 def /lcaron 272 def +/Ldot 273 def /ldot 274 def /Nacute 275 def /nacute 276 def +/Ncaron 277 def /ncaron 278 def /Odblacute 279 def /odblacute 280 def +/Racute 281 def /racute 282 def /Rcaron 283 def /rcaron 284 def +/Sacute 285 def /sacute 286 def /Tcedilla 287 def /tcedilla 288 def +/Tcaron 289 def /tcaron 290 def /Uring 291 def /uring 292 def +/Udblacute 293 def /udblacute 294 def /Zacute 295 def /zacute 296 def +/Zdot 297 def /zdot 298 def /Gamma 299 def /Theta 300 def +/Phi 301 def /alpha 302 def /delta 303 def /epsilon 304 def +/sigma 305 def /tau 306 def /phi 307 def /underscoredbl 308 def +/exclamdbl 309 def /nsuperior 310 def /peseta 311 def /IJ 312 def +/ij 313 def /napostrophe 314 def /minute 315 def /second 316 def +/afii61248 317 def /afii61289 318 def /H22073 319 def /H18543 320 def +/H18551 321 def /H18533 322 def /openbullet 323 def /Amacron 324 def +/amacron 325 def /Ccircumflex 326 def /ccircumflex 327 def /Cdot 328 def +/cdot 329 def /Emacron 330 def /emacron 331 def /Ebreve 332 def +/ebreve 333 def /Edot 334 def /edot 335 def /Gcircumflex 336 def +/gcircumflex 337 def /Gdot 338 def /gdot 339 def /Gcedilla 340 def +/gcedilla 341 def /Hcircumflex 342 def /hcircumflex 343 def /Hbar 344 def +/hbar 345 def /Itilde 346 def /itilde 347 def /Imacron 348 def +/imacron 349 def /Ibreve 350 def /ibreve 351 def /Iogonek 352 def +/iogonek 353 def /Jcircumflex 354 def /jcircumflex 355 def /Kcedilla 356 def +/kcedilla 357 def /kgreenlandic 358 def /Lcedilla 359 def /lcedilla 360 def +/Ncedilla 361 def /ncedilla 362 def /Eng 363 def /eng 364 def +/Omacron 365 def /omacron 366 def /Obreve 367 def /obreve 368 def +/Rcedilla 369 def /rcedilla 370 def /Scircumflex 371 def /scircumflex 372 def +/Tbar 373 def /tbar 374 def /Utilde 375 def /utilde 376 def +/Umacron 377 def /umacron 378 def /Ubreve 379 def /ubreve 380 def +/Uogonek 381 def /uogonek 382 def /Wcircumflex 383 def /wcircumflex 384 def +/Ycircumflex 385 def /ycircumflex 386 def /longs 387 def /Aringacute 388 def +/aringacute 389 def /AEacute 390 def /aeacute 391 def /Oslashacute 392 def +/oslashacute 393 def /anoteleia 394 def /Wgrave 395 def /wgrave 396 def +/Wacute 397 def /wacute 398 def /Wdieresis 399 def /wdieresis 400 def +/Ygrave 401 def /ygrave 402 def /quotereversed 403 def /radicalex 404 def +/afii08941 405 def /estimated 406 def /oneeighth 407 def /threeeighths 408 def +/fiveeighths 409 def /seveneighths 410 def /commaaccent 411 def /undercommaaccent 412 def +/tonos 413 def /dieresistonos 414 def /Alphatonos 415 def /Epsilontonos 416 def +/Etatonos 417 def /Iotatonos 418 def /Omicrontonos 419 def /Upsilontonos 420 def +/Omegatonos 421 def /iotadieresistonos 422 def /Alpha 423 def /Beta 424 def +/Delta 425 def /Epsilon 426 def /Zeta 427 def /Eta 428 def +/Iota 429 def /Kappa 430 def /Lambda 431 def /Mu 432 def +/Nu 433 def /Xi 434 def /Omicron 435 def /Pi 436 def +/Rho 437 def /Sigma 438 def /Tau 439 def /Upsilon 440 def +/Chi 441 def /Psi 442 def /Omega 443 def /Iotadieresis 444 def +/Upsilondieresis 445 def /alphatonos 446 def /epsilontonos 447 def /etatonos 448 def +/iotatonos 449 def /upsilondieresistonos 450 def /beta 451 def /gamma 452 def +/zeta 453 def /eta 454 def /theta 455 def /iota 456 def +/kappa 457 def /lambda 458 def /mu 459 def /nu 460 def +/xi 461 def /omicron 462 def /rho 463 def /sigma1 464 def +/upsilon 465 def /chi 466 def /psi 467 def /omega 468 def +/iotadieresis 469 def /upsilondieresis 470 def /omicrontonos 471 def /upsilontonos 472 def +/omegatonos 473 def /afii10023 474 def /afii10051 475 def /afii10052 476 def +/afii10053 477 def /afii10054 478 def /afii10055 479 def /afii10056 480 def +/afii10057 481 def /afii10058 482 def /afii10059 483 def /afii10060 484 def +/afii10061 485 def /afii10062 486 def /afii10145 487 def /afii10017 488 def +/afii10018 489 def /afii10019 490 def /afii10020 491 def /afii10021 492 def +/afii10022 493 def /afii10024 494 def /afii10025 495 def /afii10026 496 def +/afii10027 497 def /afii10028 498 def /afii10029 499 def /afii10030 500 def +/afii10031 501 def /afii10032 502 def /afii10033 503 def /afii10034 504 def +/afii10035 505 def /afii10036 506 def /afii10037 507 def /afii10038 508 def +/afii10039 509 def /afii10040 510 def /afii10041 511 def /afii10042 512 def +/afii10043 513 def /afii10044 514 def /afii10045 515 def /afii10046 516 def +/afii10047 517 def /afii10048 518 def /afii10049 519 def /afii10065 520 def +/afii10066 521 def /afii10067 522 def /afii10068 523 def /afii10069 524 def +/afii10070 525 def /afii10072 526 def /afii10073 527 def /afii10074 528 def +/afii10075 529 def /afii10076 530 def /afii10077 531 def /afii10078 532 def +/afii10079 533 def /afii10080 534 def /afii10081 535 def /afii10082 536 def +/afii10083 537 def /afii10084 538 def /afii10085 539 def /afii10086 540 def +/afii10087 541 def /afii10088 542 def /afii10089 543 def /afii10090 544 def +/afii10091 545 def /afii10092 546 def /afii10093 547 def /afii10094 548 def +/afii10095 549 def /afii10096 550 def /afii10097 551 def /afii10071 552 def +/afii10099 553 def /afii10100 554 def /afii10101 555 def /afii10102 556 def +/afii10103 557 def /afii10104 558 def /afii10105 559 def /afii10106 560 def +/afii10107 561 def /afii10108 562 def /afii10109 563 def /afii10110 564 def +/afii10193 565 def /afii10050 566 def /afii10098 567 def /afii00208 568 def +/afii61352 569 def /pi 570 def /onenumerator 571 def /twonumerator 572 def +/threenumerator 573 def /fournumerator 574 def /fivenumerator 575 def /sevennumerator 576 def +/eightnumerator 577 def /DontCompressHTMX 578 def /glyph579 579 def /glyph580 580 def +/glyph581 581 def /Ohorn 582 def /ohorn 583 def /Uhorn 584 def +/uhorn 585 def /hookabovecomb 586 def /dotbelowcomb 587 def /gravecomb 588 def +/acutecomb 589 def /glyph590 590 def /glyph591 591 def /glyph592 592 def +/glyph593 593 def /glyph594 594 def /glyph595 595 def /glyph596 596 def +/glyph597 597 def /glyph598 598 def /glyph599 599 def /glyph600 600 def +/glyph601 601 def /glyph602 602 def /glyph603 603 def /glyph604 604 def +/Adotbelow 605 def /adotbelow 606 def /Ahookabove 607 def /ahookabove 608 def +/Acircumflexacute 609 def /acircumflexacute 610 def /Acircumflexgrave 611 def /acircumflexgrave 612 def +/Acircumflexhookabove 613 def /acircumflexhookabove 614 def /Acircumflextilde 615 def /acircumflextilde 616 def +/Acircumflexdotbelow 617 def /acircumflexdotbelow 618 def /Abreveacute 619 def /abreveacute 620 def +/Abrevegrave 621 def /abrevegrave 622 def /Abrevehookabove 623 def /abrevehookabove 624 def +/Abrevetilde 625 def /abrevetilde 626 def /Abrevedotbelow 627 def /abrevedotbelow 628 def +/Edotbelow 629 def /edotbelow 630 def /Ehookabove 631 def /ehookabove 632 def +/Etilde 633 def /etilde 634 def /Ecircumflexacute 635 def /ecircumflexacute 636 def +/Ecircumflexgrave 637 def /ecircumflexgrave 638 def /Ecircumflexhookabove 639 def /ecircumflexhookabove 640 def +/Ecircumflextilde 641 def /ecircumflextilde 642 def /Ecircumflexdotbelow 643 def /ecircumflexdotbelow 644 def +/Ihookabove 645 def /ihookabove 646 def /Idotbelow 647 def /idotbelow 648 def +/glyph649 649 def /glyph650 650 def /glyph651 651 def /glyph652 652 def +/sheva 653 def /hatafsegol 654 def /hatafpatah 655 def /hatafqamats 656 def +/hiriq 657 def /tsere 658 def /segol 659 def /patah 660 def +/qamats 661 def /holam 662 def /qubuts 663 def /dagesh 664 def +/meteg 665 def /maqaf 666 def /rafe 667 def /paseq 668 def +/shindot 669 def /sindot 670 def /sofpasuq 671 def /alef 672 def +/bet 673 def /gimel 674 def /dalet 675 def /he 676 def +/vav 677 def /zayin 678 def /het 679 def /tet 680 def +/yod 681 def /finalkaf 682 def /kaf 683 def /lamed 684 def +/finalmem 685 def /mem 686 def /finalnun 687 def /nun 688 def +/samekh 689 def /ayin 690 def /finalpe 691 def /pe 692 def +/finaltsadi 693 def /tsadi 694 def /qof 695 def /resh 696 def +/shin 697 def /tav 698 def /doublevav 699 def /vavyod 700 def +/doubleyod 701 def /geresh 702 def /gershayim 703 def /newsheqelsign 704 def +/vavshindot 705 def /finalkafsheva 706 def /finalkafqamats 707 def /lamedholam 708 def +/lamedholamdagesh 709 def /altayin 710 def /shinshindot 711 def /shinsindot 712 def +/shindageshshindot 713 def /shindageshsindot 714 def /alefpatah 715 def /alefqamats 716 def +/alefmapiq 717 def /betdagesh 718 def /gimeldagesh 719 def /daletdagesh 720 def +/hedagesh 721 def /vavdagesh 722 def /zayindagesh 723 def /tetdagesh 724 def +/yoddagesh 725 def /finalkafdagesh 726 def /kafdagesh 727 def /lameddagesh 728 def +/memdagesh 729 def /nundagesh 730 def /samekhdagesh 731 def /finalpedagesh 732 def +/pedagesh 733 def /tsadidagesh 734 def /qofdagesh 735 def /reshdagesh 736 def +/shindagesh 737 def /tavdages 738 def /vavholam 739 def /betrafe 740 def +/kafrafe 741 def /perafe 742 def /aleflamed 743 def /zerowidthnonjoiner 744 def +/zerowidthjoiner 745 def /lefttorightmark 746 def /righttoleftmark 747 def /afii57388 748 def +/afii57403 749 def /afii57407 750 def /afii57409 751 def /afii57440 752 def +/afii57451 753 def /afii57452 754 def /afii57453 755 def /afii57454 756 def +/afii57455 757 def /afii57456 758 def /afii57457 759 def /afii57458 760 def +/afii57392 761 def /afii57393 762 def /afii57394 763 def /afii57395 764 def +/afii57396 765 def /afii57397 766 def /afii57398 767 def /afii57399 768 def +/afii57400 769 def /afii57401 770 def /afii57381 771 def /afii57461 772 def +/afii63167 773 def /afii57459 774 def /afii57543 775 def /afii57534 776 def +/afii57494 777 def /afii62843 778 def /afii62844 779 def /afii62845 780 def +/afii64240 781 def /afii64241 782 def /afii63954 783 def /afii57382 784 def +/afii64242 785 def /afii62881 786 def /afii57504 787 def /afii57369 788 def +/afii57370 789 def /afii57371 790 def /afii57372 791 def /afii57373 792 def +/afii57374 793 def /afii57375 794 def /afii57391 795 def /afii57471 796 def +/afii57460 797 def /afii52258 798 def /afii57506 799 def /afii62958 800 def +/afii62956 801 def /afii52957 802 def /afii57505 803 def /afii62889 804 def +/afii62887 805 def /afii62888 806 def /afii57507 807 def /afii62961 808 def +/afii62959 809 def /afii62960 810 def /afii57508 811 def /afii62962 812 def +/afii57567 813 def /afii62964 814 def /afii52305 815 def /afii52306 816 def +/afii57509 817 def /afii62967 818 def /afii62965 819 def /afii62966 820 def +/afii57555 821 def /afii52364 822 def /afii63753 823 def /afii63754 824 def +/afii63759 825 def /afii63763 826 def /afii63795 827 def /afii62891 828 def +/afii63808 829 def /afii62938 830 def /afii63810 831 def /afii62942 832 def +/afii62947 833 def /afii63813 834 def /afii63823 835 def /afii63824 836 def +/afii63833 837 def /afii63844 838 def /afii62882 839 def /afii62883 840 def +/afii62884 841 def /afii62885 842 def /afii62886 843 def /Odotbelow 844 def +/odotbelow 845 def /Ohookabove 846 def /ohookabove 847 def /Ocircumflexacute 848 def +/ocircumflexacute 849 def /Ocircumflexgrave 850 def /ocircumflexgrave 851 def /Ocircumflexhookabove 852 def +/ocircumflexhookabove 853 def /Ocircumflextilde 854 def /ocircumflextilde 855 def /Ocircumflexdotbelow 856 def +/ocircumflexdotbelow 857 def /Ohornacute 858 def /ohornacute 859 def /Ohorngrave 860 def +/ohorngrave 861 def /Ohornhookabove 862 def /ohornhookabove 863 def /Ohorntilde 864 def +/ohorntilde 865 def /Ohorndotbelow 866 def /ohorndotbelow 867 def /Udotbelow 868 def +/udotbelow 869 def /Uhookabove 870 def /uhookabove 871 def /Uhornacute 872 def +/uhornacute 873 def /Uhorngrave 874 def /uhorngrave 875 def /Uhornhookabove 876 def +/uhornhookabove 877 def /Uhorntilde 878 def /uhorntilde 879 def /Uhorndotbelow 880 def +/uhorndotbelow 881 def /glyph882 882 def /glyph883 883 def /Ydotbelow 884 def +/ydotbelow 885 def /Yhookabove 886 def /yhookabove 887 def /Ytilde 888 def +/ytilde 889 def /dong 890 def /tildecomb 891 def /currency 892 def + +end readonly def +FontName currentdict end definefont pop +%%EndFont +%%EndProlog +mpldict begin +13.5 175.5 translate +585 441 0 0 clipbox +% polygon +1.000 setgray +1.000 setlinewidth +0 setlinejoin +2 setlinecap +[] 0 setdash +0 0 m +0 441 l +585 441 l +585 0 l +closepath +gsave +fill +grestore +stroke +% polygon +0.000 setgray +73.125 44.1 m +73.125 396.9 l +526.5 396.9 l +526.5 44.1 l +closepath +gsave +1.000 setgray +fill +grestore +stroke +% draw_lines +0.000 0.000 1.000 setrgbcolor +gsave +453.375 352.800 73.125 44.100 clipbox +73.125 341.084 m +76.667 340.708 l +80.209 339.574 l +83.751 337.667 l +87.293 334.958 l +90.835 331.405 l +94.377 326.949 l +97.919 321.506 l +101.461 314.959 l +105.003 307.144 l +108.545 297.819 l +112.087 286.607 l +115.629 272.882 l +119.171 255.463 l +122.713 231.623 l +126.255 191.605 l +129.797 103.027 l +133.339 189.379 l +136.881 202.932 l +140.423 203.284 l +143.965 191.777 l +147.507 147.593 l +151.049 193.483 l +154.591 200.946 l +158.133 199.387 l +161.675 188.957 l +165.217 143.486 l +168.759 180.998 l +172.301 191.170 l +175.843 191.200 l +179.385 183.119 l +182.927 155.818 l +186.469 166.661 l +190.011 181.010 l +193.553 182.971 l +197.095 177.076 l +200.637 157.567 l +204.179 150.322 l +207.721 171.053 l +211.263 175.126 l +214.805 171.229 l +218.347 156.530 l +221.889 128.062 l +225.431 161.185 l +228.973 167.631 l +232.515 165.609 l +236.057 154.358 l +239.599 74.463 l +243.141 151.102 l +246.683 160.365 l +250.225 160.169 l +253.767 151.622 l +257.309 119.107 l +260.851 140.326 l +264.393 153.187 l +267.935 154.839 l +271.477 148.556 l +275.019 126.619 l +278.561 127.980 l +282.103 145.946 l +285.645 149.548 l +289.187 145.259 l +292.729 129.081 l +296.271 111.844 l +299.812 138.465 l +303.354 144.220 l +306.896 141.769 l +310.438 129.466 l +313.980 80.114 l +317.522 130.512 l +321.064 138.774 l +324.606 138.087 l +328.148 128.702 l +331.690 86.924 l +335.232 121.741 l +338.774 133.118 l +342.316 134.191 l +345.858 127.176 l +349.400 101.638 l +352.942 111.541 l +356.484 127.140 l +360.026 130.041 l +363.568 125.064 l +367.110 106.776 l +370.652 98.551 l +374.194 120.692 l +377.736 125.577 l +381.278 122.435 l +384.820 108.642 l +388.362 78.089 l +391.904 113.570 l +395.446 120.713 l +398.988 119.291 l +402.530 108.713 l +406.072 43.008 l +409.614 105.462 l +413.156 115.325 l +416.698 115.577 l +420.240 107.501 l +423.782 76.568 l +427.324 95.836 l +430.866 109.233 l +434.408 111.171 l +437.950 105.155 l +441.492 83.904 l +445.034 83.647 l +448.576 102.154 l +452.118 105.845 l +455.660 101.582 l +459.202 85.611 l +462.744 66.167 l +466.286 93.605 l +469.828 99.169 l +473.370 96.397 l +476.912 83.814 l +480.454 27.509 l +483.996 82.648 l +487.538 90.217 l +491.080 88.573 l +494.622 78.102 l +498.164 37.173 l +501.706 66.931 l +505.248 76.324 l +508.790 74.675 l +512.332 64.142 l +515.874 34.431 l +519.416 35.180 l +522.958 37.945 l +stroke +grestore +% draw_lines +1.000 0.000 0.000 setrgbcolor +gsave +453.375 352.800 73.125 44.100 clipbox +73.125 344.638 m +76.667 344.021 l +80.209 342.148 l +83.751 338.946 l +87.293 334.276 l +90.835 327.903 l +94.377 319.427 l +97.919 308.120 l +101.461 292.475 l +105.003 268.454 l +108.545 213.072 l +112.087 218.519 l +115.629 259.152 l +119.171 273.925 l +122.713 280.520 l +126.255 282.309 l +129.797 280.332 l +133.339 274.683 l +136.881 264.621 l +140.423 247.681 l +143.965 212.929 l +147.507 184.774 l +151.049 218.234 l +154.591 243.484 l +158.133 254.844 l +161.675 259.959 l +165.217 260.773 l +168.759 257.793 l +172.301 250.665 l +175.843 237.757 l +179.385 212.685 l +182.927 178.994 l +186.469 -424.877 l +190.011 217.746 l +193.553 235.408 l +197.095 243.801 l +200.637 247.028 l +204.179 246.206 l +207.721 241.360 l +211.263 231.429 l +214.805 212.332 l +218.347 138.495 l +221.889 185.787 l +225.431 183.612 l +228.973 217.038 l +232.515 229.873 l +236.057 235.734 l +239.599 237.005 l +243.141 234.198 l +246.683 226.722 l +250.225 211.859 l +253.767 169.476 l +257.309 186.593 l +260.851 173.823 l +264.393 194.732 l +267.935 216.079 l +271.477 225.369 l +275.019 228.930 l +278.561 228.116 l +282.103 222.822 l +285.645 211.246 l +289.187 183.443 l +292.729 181.050 l +296.271 187.513 l +299.812 178.164 l +303.354 199.915 l +306.896 214.825 l +310.438 221.217 l +313.980 222.524 l +317.522 219.301 l +321.064 210.468 l +324.606 190.157 l +328.148 169.944 l +331.690 189.675 l +335.232 181.582 l +338.774 172.547 l +342.316 202.663 l +345.858 213.205 l +349.400 216.995 l +352.942 215.878 l +356.484 209.487 l +360.026 194.151 l +363.568 141.332 l +367.110 188.290 l +370.652 190.018 l +374.194 168.185 l +377.736 185.194 l +381.278 203.994 l +384.820 211.108 l +388.362 212.316 l +391.904 208.247 l +395.446 196.681 l +398.988 154.875 l +402.530 184.658 l +406.072 192.833 l +409.614 186.663 l +413.156 -460.889 l +416.698 191.640 l +420.240 204.277 l +423.782 208.351 l +427.324 206.663 l +430.866 198.243 l +434.408 172.764 l +437.950 178.651 l +441.492 193.308 l +445.034 193.407 l +448.576 179.767 l +452.118 167.615 l +455.660 195.351 l +459.202 203.595 l +462.744 204.597 l +466.286 199.048 l +469.828 181.359 l +473.370 168.699 l +476.912 192.336 l +480.454 196.765 l +483.996 191.640 l +487.538 166.317 l +491.080 180.819 l +494.622 197.324 l +498.164 201.811 l +501.706 199.150 l +505.248 186.669 l +508.790 146.473 l +512.332 190.158 l +515.874 198.473 l +519.416 197.844 l +522.958 187.711 l +stroke +grestore +% draw_lines +0.000 0.500 0.000 setrgbcolor +gsave +453.375 352.800 73.125 44.100 clipbox +73.125 344.646 m +76.667 344.163 l +80.209 342.697 l +83.751 340.206 l +87.293 336.608 l +90.835 331.765 l +94.377 325.450 l +97.919 317.263 l +101.461 306.406 l +105.003 290.855 l +108.545 260.984 l +112.087 257.910 l +115.629 270.113 l +119.171 268.975 l +122.713 260.468 l +126.255 240.233 l +129.797 221.580 l +133.339 244.142 l +136.881 246.939 l +140.423 241.790 l +143.965 226.836 l +147.507 180.268 l +151.049 224.403 l +154.591 230.521 l +158.133 227.898 l +161.675 216.607 l +165.217 170.426 l +168.759 207.344 l +172.301 217.011 l +175.843 216.608 l +179.385 208.152 l +182.927 180.524 l +186.469 191.080 l +190.011 205.174 l +193.553 206.908 l +197.095 200.811 l +200.637 181.119 l +204.179 173.710 l +207.721 194.292 l +211.263 198.229 l +214.805 194.208 l +218.347 179.396 l +221.889 150.824 l +225.431 183.851 l +228.973 190.209 l +232.515 188.106 l +236.057 176.779 l +239.599 96.814 l +243.141 173.388 l +246.683 182.589 l +250.225 182.337 l +253.767 173.737 l +257.309 141.172 l +260.851 162.345 l +264.393 175.162 l +267.935 176.773 l +271.477 170.451 l +275.019 148.477 l +278.561 149.804 l +282.103 167.738 l +285.645 171.309 l +289.187 166.991 l +292.729 150.785 l +296.271 133.522 l +299.812 160.118 l +303.354 165.850 l +306.896 163.377 l +310.438 151.052 l +313.980 101.679 l +317.522 152.059 l +321.064 160.303 l +324.606 159.598 l +328.148 150.196 l +331.690 108.402 l +335.232 143.204 l +338.774 154.567 l +342.316 155.626 l +345.858 148.598 l +349.400 123.046 l +352.942 132.938 l +356.484 148.525 l +360.026 151.416 l +363.568 146.427 l +367.110 128.129 l +370.652 119.895 l +374.194 142.026 l +377.736 146.903 l +381.278 143.752 l +384.820 129.951 l +388.362 99.390 l +391.904 134.864 l +395.446 141.999 l +398.988 140.570 l +402.530 129.986 l +406.072 64.275 l +409.614 126.723 l +413.156 136.580 l +416.698 136.826 l +420.240 128.745 l +423.782 97.807 l +427.324 117.071 l +430.866 130.463 l +434.408 132.397 l +437.950 126.376 l +441.492 105.122 l +445.034 104.861 l +448.576 123.364 l +452.118 127.052 l +455.660 122.786 l +459.202 106.813 l +462.744 87.365 l +466.286 114.801 l +469.828 120.363 l +473.370 117.588 l +476.912 105.003 l +480.454 48.696 l +483.996 103.833 l +487.538 111.400 l +491.080 109.755 l +494.622 99.282 l +498.164 58.352 l +501.706 88.110 l +505.248 97.502 l +508.790 95.852 l +512.332 85.318 l +515.874 55.606 l +519.416 56.356 l +522.958 59.120 l +stroke +grestore +% draw_lines +0.750 0.000 0.750 setrgbcolor +gsave +453.375 352.800 73.125 44.100 clipbox +73.125 346.280 m +76.667 345.676 l +80.209 343.845 l +83.751 340.736 l +87.293 336.248 l +90.835 330.224 l +94.377 322.407 l +97.919 312.371 l +101.461 299.341 l +105.003 281.601 l +108.545 253.253 l +112.087 220.282 l +115.629 233.441 l +119.171 220.121 l +122.713 198.594 l +126.255 213.622 l +129.797 232.741 l +133.339 242.085 l +136.881 243.804 l +140.423 237.025 l +143.965 203.960 l +147.507 230.388 l +151.049 244.073 l +154.591 246.690 l +158.133 241.191 l +161.675 219.125 l +165.217 223.903 l +168.759 241.739 l +172.301 245.662 l +175.843 241.477 l +179.385 224.009 l +182.927 215.555 l +186.469 238.476 l +190.011 243.766 l +193.553 240.795 l +197.095 226.371 l +200.637 204.635 l +204.179 234.918 l +207.721 241.638 l +211.263 239.805 l +214.805 227.701 l +218.347 187.148 l +221.889 231.207 l +225.431 239.460 l +228.973 238.716 l +232.515 228.509 l +236.057 142.756 l +239.599 227.342 l +243.141 237.284 l +246.683 237.602 l +250.225 229.015 l +253.767 188.027 l +257.309 223.261 l +260.851 235.117 l +264.393 236.489 l +267.935 229.330 l +271.477 199.520 l +275.019 218.852 l +278.561 232.949 l +282.103 235.386 l +285.645 229.515 l +289.187 205.946 l +292.729 213.941 l +296.271 230.761 l +299.812 234.290 l +303.354 229.607 l +306.896 210.254 l +310.438 208.235 l +313.980 228.529 l +317.522 233.195 l +321.064 229.626 l +324.606 213.410 l +328.148 201.185 l +331.690 226.226 l +335.232 232.097 l +338.774 229.588 l +342.316 215.852 l +345.858 191.524 l +349.400 223.818 l +352.942 230.985 l +356.484 229.500 l +360.026 217.812 l +363.568 174.865 l +367.110 221.263 l +370.652 229.851 l +374.194 229.371 l +377.736 219.429 l +381.278 138.835 l +384.820 218.509 l +388.362 228.686 l +391.904 229.202 l +395.446 220.789 l +398.988 179.721 l +402.530 215.482 l +406.072 227.478 l +409.614 228.996 l +413.156 221.953 l +416.698 191.902 l +420.240 212.081 l +423.782 226.215 l +427.324 228.754 l +430.866 222.960 l +434.408 199.153 l +437.950 208.147 l +441.492 224.884 l +445.034 228.476 l +448.576 223.841 l +452.118 204.278 l +455.660 203.420 l +459.202 223.466 l +462.744 228.160 l +466.286 224.618 l +469.828 208.221 l +473.370 197.415 l +476.912 221.941 l +480.454 227.805 l +483.996 225.308 l +487.538 211.417 l +491.080 189.040 l +494.622 220.282 l +498.164 227.408 l +501.706 225.922 l +505.248 214.102 l +508.790 174.825 l +512.332 218.457 l +515.874 226.966 l +519.416 226.472 l +522.958 216.418 l +stroke +grestore +% text +0.000 setgray +/Verdana findfont +18.000 scalefont +setfont +119.312 403.956 m +0 4 rmoveto +(Smoothing window in frequency-domain) show +% text +/Verdana findfont +14.000 scalefont +setfont +62.469 30.1 m +(0.0) show +% line +0.500 setlinewidth +0 setlinecap +163.800 44.100 m 163.800 48.100 l +stroke +% line +163.800 392.900 m 163.800 396.900 l +stroke +% text +153.175 30.1 m +(0.1) show +% line +254.475 44.100 m 254.475 48.100 l +stroke +% line +254.475 392.900 m 254.475 396.900 l +stroke +% text +243.85 30.1 m +(0.2) show +% line +345.150 44.100 m 345.150 48.100 l +stroke +% line +345.150 392.900 m 345.150 396.900 l +stroke +% text +334.994 30.1 m +(0.3) show +% line +435.825 44.100 m 435.825 48.100 l +stroke +% line +435.825 392.900 m 435.825 396.900 l +stroke +% text +424.825 30.1 m +(0.4) show +% text +515.844 30.1 m +(0.5) show +% text +221.875 11.1 m +0 3 rmoveto +(Normalized Frequency) show +% text +37.062 39.1 m +(-100) show +% line +73.125 91.140 m 77.125 91.140 l +stroke +% line +522.500 91.140 m 526.500 91.140 l +stroke +% text +47.062 86.14 m +(-80) show +% line +73.125 138.180 m 77.125 138.180 l +stroke +% line +522.500 138.180 m 526.500 138.180 l +stroke +% text +47.062 133.18 m +(-60) show +% line +73.125 185.220 m 77.125 185.220 l +stroke +% line +522.500 185.220 m 526.500 185.220 l +stroke +% text +47.062 180.22 m +(-40) show +% line +73.125 232.260 m 77.125 232.260 l +stroke +% line +522.500 232.260 m 526.500 232.260 l +stroke +% text +47.062 227.26 m +(-20) show +% line +73.125 279.300 m 77.125 279.300 l +stroke +% line +522.500 279.300 m 526.500 279.300 l +stroke +% text +61.812 274.3 m +(0) show +% line +73.125 326.340 m 77.125 326.340 l +stroke +% line +522.500 326.340 m 526.500 326.340 l +stroke +% text +53.062 321.34 m +(20) show +% line +73.125 373.380 m 77.125 373.380 l +stroke +% line +522.500 373.380 m 526.500 373.380 l +stroke +% text +52.938 368.38 m +(40) show +% text +32.062 168.461 m +gsave +90 rotate +0 3 rmoveto +(Magnitude \(dB\)) show +grestore +% polygon +1.000 setlinewidth +2 setlinecap +346.389 279.264 m +346.389 389.844 l +517.433 389.844 l +517.433 279.264 l +closepath +gsave +1.000 setgray +fill +grestore +stroke +% draw_lines +0.000 0.000 1.000 setrgbcolor +362.443 371.629 m +369.999 371.629 l +377.555 371.629 l +385.111 371.629 l +stroke +% draw_lines +1.000 0.000 0.000 setrgbcolor +362.443 349.712 m +369.999 349.712 l +377.555 349.712 l +385.111 349.712 l +stroke +% draw_lines +0.000 0.500 0.000 setrgbcolor +362.443 325.795 m +369.999 325.795 l +377.555 325.795 l +385.111 325.795 l +stroke +% draw_lines +0.750 0.000 0.750 setrgbcolor +362.443 299.479 m +369.999 299.479 l +377.555 299.479 l +385.111 299.479 l +stroke +% text +0.000 setgray +/Verdana findfont +24.000 scalefont +setfont +394.179 362.629 m +(Blackman) show +% text +394.179 340.712 m +(Bartlett) show +% text +394.179 314.795 m +0 5 rmoveto +(Hanning) show +% text +394.179 288.479 m +0 5 rmoveto +(Hamming) show + +end +showpage diff --git a/numpy/doc/numpybook/Figures/fig2bw.eps b/numpy/doc/numpybook/Figures/fig2bw.eps new file mode 100644 index 000000000..f6ab19621 --- /dev/null +++ b/numpy/doc/numpybook/Figures/fig2bw.eps @@ -0,0 +1,4919 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: fig2bw.eps +%%Creator: matplotlib version 0.85.1.cvs, http://matplotlib.sourceforge.net/ +%%CreationDate: Fri Jan 6 00:30:17 2006 +%%BoundingBox: 13 175 598 616 +%%EndComments +%%BeginProlog +/mpldict 7 dict def +mpldict begin +/m { moveto } bind def +/l { lineto } bind def +/r { rlineto } bind def +/box { +m +1 index 0 r +0 exch r +neg 0 r +closepath +} bind def +/clipbox { +box +clip +newpath +} bind def +/ellipse { +newpath +matrix currentmatrix 7 1 roll +translate +scale +0 0 1 5 3 roll arc +setmatrix +closepath +} bind def +%%BeginFont: Verdana +%!PS-TrueType-1.0-1.0 +8 dict begin +/FontName /Verdana def +/FontMatrix [1 0 0 1 0 0] def +/FontType 42 def +/Encoding StandardEncoding def +/FontBBox [-102 -423 2963 2049] def +/PaintType 0 def +/FontInfo 7 dict dup begin +/Notice (Typeface and data © 1996 Microsoft Corporation. All Rights Reserved) def +/FamilyName (Verdana) def +/FullName (Verdana) def +/version (Version 2.35) def +/isFixedPitch false def +/UnderlinePosition -180 def +/UnderlineThickness 120 def +end readonly def +/sfnts [ +<00010000001301000004003044534947CD5006A400020D64000014144C5453485694D82F +00001530000003814F532F32477590C3000001B80000005656444D5874F17C6D000018B4 +000005E0636D6170E84D8B8B000007A80000068C637674204CA740E3000022AC00000198 +6670676DEE371553000021740000013867617370001700090000021000000010676C7966 +01F195F700009EC000013BB668646D7809490ECD0000323800006C8868656164C748722C +0000013C0000003668686561133B09D00000017400000024686D7478C905723E00002444 +00000DF46B65726E75BF7E53000200CC00000C966C6F63616784B57700000E34000006FC +6D617870086A023E00000198000000206E616D65A93B95720000022000000587706F7374 +C58F55450001DA7800002651707265701240C02F00001E94000002E00001000000010000 +16FBFC3A5F0F3CF5001B080000000000AA7E442900000000B26DE2ABFF9AFE590B930801 +00000009000200000000000000010000080BFE5200000C2CFF9AFBD40B93000100000000 +00000000000000000000037D00010000037D00620007006B000500020010002F00380000 +0495013F0003000100010411019000050000059A053300000125059A0533000003A00078 +02A70800020B0604030504040204000002870000000000000000000000004D5320200040 +0020FB02061EFE5900CA080B01AE2000019F000000000000000000030008000200100001 +FFFF00030000002801E60001000000000000004300000001000000000001000700430001 +0000000000020007004A0001000000000003002F00510001000000000004000700800001 +000000000005000C00870001000000000006000700930001000000000007002F009A0003 +000104030002000C00C90003000104050002001000D50003000104060002000C00E50003 +000104070002001000F10003000104080002001001010003000104090000008601110003 +000104090001000E01970003000104090002000E01A50003000104090003005E01B30003 +000104090004000E021100030001040900050018021F0003000104090006000E02370003 +000104090007005E024500030001040A0002000C02A300030001040B0002001002AF0003 +0001040C0002000C02BF00030001040E0002000C02CB0003000104100002000E02D70003 +000104130002001202E50003000104140002000C02F70003000104150002001003030003 +000104160002000C03130003000104190002000E031F00030001041B00020010032D0003 +0001041D0002000C033D00030001041F0002000C03490003000104240002000E03550003 +0001042D0002000E036300030001080A0002000C03710003000108160002000C037D0003 +00010C0A0002000C0389000300010C0C0002000C0395547970656661636520616E642064 +61746120A92031393936204D6963726F736F667420436F72706F726174696F6E2E20416C +6C2052696768747320526573657276656456657264616E61526567756C61724D6963726F +736F66743A56657264616E6120526567756C61723A56657273696F6E203120284D696372 +6F736F66742956657264616E6156657273696F6E20322E333556657264616E6156657264 +616E6120697320612074726164656D61726B206F66204D6963726F736F667420436F7270 +6F726174696F6E004E006F0072006D0061006C006F00620079010D0065006A006E00E900 +6E006F0072006D0061006C005300740061006E0064006100720064039A03B103BD03BF03 +BD03B903BA03AC0054007900700065006600610063006500200061006E00640020006400 +6100740061002000A9002000310039003900360020004D006900630072006F0073006F00 +66007400200043006F00720070006F0072006100740069006F006E002E00200041006C00 +6C0020005200690067006800740073002000520065007300650072007600650064005600 +65007200640061006E00610052006500670075006C00610072004D006900630072006F00 +73006F00660074003A00560065007200640061006E006100200052006500670075006C00 +610072003A00560065007200730069006F006E0020003100200028004D00690063007200 +6F0073006F00660074002900560065007200640061006E00610056006500720073006900 +6F006E00200032002E0033003500560065007200640061006E0061005600650072006400 +61006E006100200069007300200061002000740072006100640065006D00610072006B00 +20006F00660020004D006900630072006F0073006F0066007400200043006F0072007000 +6F0072006100740069006F006E004E006F0072006D0061006C004E006F0072006D006100 +61006C0069004E006F0072006D0061006C004E006F0072006D00E1006C004E006F007200 +6D0061006C0065005300740061006E00640061006100720064004E006F0072006D006100 +6C004E006F0072006D0061006C006E0079004E006F0072006D0061006C041E0431044B04 +47043D044B0439004E006F0072006D00E1006C006E0065004E006F0072006D0061006C00 +4E006F0072006D0061006C004E0061007600610064006E006F0041007200720075006E00 +740061004E006F0072006D0061006C004E006F0072006D0061006C004E006F0072006D00 +61006C004E006F0072006D0061006C00000000020001000000000014000300010000011A +000001060000010000000000000001020000000200000000000000000000000000000001 +0000030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324 +25262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748 +494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60610062636465666768696A6B +6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F +909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAB03ACADAEAFB0B1B2 +B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD000D1D2D3D4D5 +D6D7D8D9DADBDCDDDEDF0004057200000084008000060004007E017F019201A101B001FF +02C702C902DD0301030303090323037E038A038C03A103CE040C044F045C045F04911E85 +1EF92015201E2022202620302033203A203C203E2044207F20A420A720AC210521132116 +21222126212E215E22022206220F22122215221A221E222B22482260226525A125AB25CA +25CF25E6F002F00DFB02FFFF0000002000A0019201A001AF01FA02C602C902D803000303 +03090323037E0384038C038E03A30401040E0451045E04901E801EA02013201720202026 +203020322039203C203E2044207F20A320A720AB21052113211621222126212E215B2202 +2206220F221122152219221E222B22482260226425A125AA25CA25CF25E6F001F004FB01 +FFFFFFE30000FF1400A60099FF8A0000FE0F0000FF4C0078FF41FF28FCA00000FE170000 +0000FDD9FDD8FDD7FDD6FDA6E30B0000000000000000E085E095E109E084E0F9E156E077 +E0B70000E0900000E038E02BE123DF6ADF79E068E03CDE96DEA2DE8B0000DEA60000DE74 +DE71DE5FDE2FDE30DB9EDB96DAEEDB73DB5D10BE000005BE000100000082000000000000 +000002380000023800000000000000000000023800000242026800000000000000000000 +000002B203640368037600000000000000000000000000000000036A0000036A00000000 +000000000000000000000000000000000358000003580000000000000000000000000000 +0000000000000000034400000000000300A300840085037C009600E60086008E008B009D +00A900A40010008A01000083009300F000F1008D00970088010100DC00EF009E00AA00F3 +00F200F400A200AC00C800C600AD006200630090006400CA006500C700C900CE00CB00CC +00CD00E7006600D100CF00D000AE006700EE009100D400D200D3006800E900EB0089006A +0069006B006D006C006E00A0006F0071007000720073007500740076007700E80078007A +0079007B007D007C00B700A1007F007E0080008100EA00EC00B901440145010201030104 +010500FB00FC014601470148014900FD00FE01060107010800FF014A014B014C014D014E +014F0109010A010B010C0150015100F600F701520153015401550156015701580159015A +015B015C015D015E015F0160016100F800D50138013901620163016401650166010D010E +01670168010F01100111011200E000E1011301140169016A01150116013A016B016C016D +016E016F01700117011800AF00B00119011A01710172011B011C011D011E0173017400F9 +00FA00E200E3011F01200121012201750176017701780179017A017B017C012301240125 +0126017D017E017F01800181018200BA012701280129012A00E400E5018300D600DF00D9 +00DA00DB00DE00D700DD019D019E019F018A01A001A101A201A401A501A601A701A8012B +01A901AA01AB01AC012C01AD01AE01AF01B001B101B201B301B401B501B601B701B8012D +01B901BA01BB01BC01BD01BE01BF01C001C101C2012E01C301C4012F013001C501C601C7 +01C801C901CA01CB01CC01CD01CE023A01CF01D00131013201D1013301D201D301D401D5 +01D601D701D801D9025D025E025F0260026102620263026402650266026702680269026A +026B026C026D026E026F0270027102720273027402750276027702780279027A027B027C +027D027E027F028002810282028302840285028602870288034C034D034E034F03500351 +03520353035403550356035703580359035A035B035C035D035E035F0360036103620363 +036403650366036703680369036A036B036C036D036E036F037003710191019203740375 +037603770378037900B100B20238013400B500B600C3019300B300B400C4008200C10087 +00F50195037A00BC009900ED00C200A5019B019C023B023C023D023E023F024002410242 +0000001F001F001F001F00470070010401C0025F033C035503A203F10461049604C004DE +04F50520057F05B9063806DB072D07A70830086B090B099309B509F10A350A640AAA0B13 +0BF80C600CDC0D4F0DA00DD60E060E7A0EAE0EDB0F180F860FA61000104C10B8111711AE +122012B812DF132C13881407148814DF15221544156F159015C815DE15FE168916E71747 +17A01803184F18D11912193D198C19E51A001A761AB61B011B5D1BB81BF51C8B1CDB1D1B +1D741DD91E641EC21F041F631F7E1FDC203B205520FE21AA21BD21D021E9220222142226 +2238225322652278230A231C232E234023562369237C23B423EE2400241224242436244C +245E24702482249424AB24E62520259A260826EB270B274327C928832929297B299C29C2 +2A2D2A912B412BCD2C0D2C5A2CA82D0C2D4C2DCB2E3D2E722E9F2EE92F5E2F9F301130E7 +316D31D831FF3223326032DF336433A233F33443346D3480349334A6350E35AD35C735DD +361C365B368036A736E33728373F37593777382D3858388438E139313986399E39C43A03 +3AD73AEA3AFD3B103B243B373B4A3B5D3B773B8A3B9D3BB03BC33BD63BE93BFC3C173C47 +3C8E3CA63CEC3D003D493D7D3DB53DEA3E1B3E5B3E923EA53EB73ECA3EDC3F043F6B3FFF +40124024408840E441014135416941BB4239425A427E42AA42F643024314432743F044AF +44C244D444E744F9456F4586459E45B145C3465F47144727479D47A54806489348A648B8 +48CB48F0492B4961499249BC49CF49E149F44A064A1A4A2D4A404A534A664A794A8C4A9E +4AEE4B6C4B7F4BEC4C354C484C5C4C6F4C824C954CA84CBA4CDA4D584DDD4E3C4EC24F58 +4FB24FE1505D5081509D50E951DF51EF52085268528B52CA538353FD5425543F54665491 +54EA54FC550D551F55345546555B556D557E559055A455B655C755D955EE5600561556B8 +575B576D578757DE583458A458FC593F596C59C05A035A595AB15AC85B225B335B495BA2 +5BEB5C305C465C5C5CD25D2E5D405D515D635D745D855DEA5DFC5E105E4E5EBA5ECC5EDD +5EEF5F005F125F235FA2600E6020603260446055608561656246625C626E6285629A62B1 +62C362D562E762F963166332634963606388639E6422648E64AA64D76504653065556589 +65A265DD65F36611662F664F666E668E66B16700670867106752675A6762676A6772677A +67C367CB67D36812681A6840684868DA68E268EA68F2695D69DC69F66A106A216A376A48 +6A5B6A6F6AFD6B4A6BBD6BFF6C866C8E6D226D7A6DC16DC96E726E7A6ECF6F3B6F7A6FEA +705A70F370FB7112712371347146715A71C571DD7255725D7265727F7287731C738773DE +73F3749074C174C97521752975497594759C765676F2773A77AE783B7892789A78A278AA +78D078D878E078E8795979DE79E67A167A5D7A907ACD7B297B907BE47C5F7CCD7D367D3E +7DCA7E4C7E6C7EBC7EC47F7D8015804D80B18126817B81D38203820B82308238829A82C9 +82D1836C837483AC83EF8425846784C3852B858085F4865386BD86D38757876887D587DD +87E587ED87F5888B88F9894F896489EE8A258A4E8A7B8A918B238B488B6C8BBD8C398C73 +8CD88D0C8D8E8D8E8D8E8D8E8D8E8E208E8D8EF48F598F9F8FB58FBD8FC59006904590BD +9126916491A19209927292C09334938093D1944E94D395479558956C9586959B95B195C7 +95DD95F3960B96219633964996659683969596AA96BC96D196E396F8970A971F973E9759 +976A977B979697AE97C497D597ED97FF98179829983F985598679879989898B198C998DB +98ED98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF +98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF9911 +9922994099549970998999A199B399CB99E499FC9A159A359A4E9A659A769A909AA59ABB +9ACC9AE29AF99B0B9B1C9B2D9B3E9B549B659B7C9B949BAF9BC79BDD9BEE9C009C119C22 +9C339C4E9C649C759C8B9CA49CB89CCE9CDF9D639D6B9DDB0000037D01011C1C300E0E0B +0E010A01010E0E010F01010B0B0B0B0B0B0B0B0B0B01010E0E0E0B0C320E101923150E0F +740A0E2D240E0D0D0D0E322C1D322E1C111C0101010101010D0D0E0D0D1C0D0BB4010EB4 +110B100D0D2A11110B0A100F0A11010E0101323210230E0D1D0D0D0D0D0D0D0E0D0D0D0D +B4B4B4B40B10101010100B0B0B0B0B010B0B01010B0101010101010E330D010E0E0E0B10 +010101010B0101010E100B300E010B010127270132320D011C0B01010101010E010A1101 +01010101010B010101013223322323747474740D0D0D1D1D1DB401010101010101010101 +0AD732111C110E1001110A0D0D0E01010101010101010E0D743211100E100E0D0101320D +320D190D10230D230D2DB42D322D010E0B0E0B0D100E2A0E2A32112C112C111D0B1D0B1C +111C11100D130D2612181110010D010A0A110E01240A121901011901320D100E100E230D +230D230D0E0D0E0D0E0D0F0B0F0B74B474B474B474B40A010E0E0E2DB40E0B0E0B0D100D +100E2A32112C111D0B1D0B1D491D182E10110A01320D330E0D10012E102E102E10110A01 +010B01010101012E010101320E1C10160C27B4320E01231C0F740E0A240E300D0F0D1E2C +111C111474110D120BB40B0B0F0D0B0DB40D0A130A011010010B0C1010B40B100B10230A +100D3274740A0C0E010E1111320E0E10012311010E0E0E12240F0D0F0D102C11131C2D22 +11111F2D0E0D01100D240A010D0D301210100B011D1010100D0F110A170F270D11320C11 +0C0E0D0A0D0B010E11B4B4010A0E0B0B0A10100A01011001010101010101010101012D10 +282001010101010101010101010101010101010101320D320D320D320D320D320D320D32 +0D320D320D320D320D230D230D230D230D230D230D230D230D74B474B401010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010D100D100D100D100D100D100D102D102D102D102D102D101D0B1D0B +28202820282028202820110A110A110A110A0D010B00000000000001000101010101000C +00F808FF00080008FFFE0009000AFFFE000A000AFFFE000B000BFFFE000C000CFFFE000D +000DFFFD000E000EFFFD000F000FFFFD0010000FFFFD00110011FFFD00120012FFFC0013 +0013FFFC00140015FFFC00150015FFFC00160016FFFC00170017FFFB00180018FFFB0019 +001AFFFB001A001BFFFB001B001BFFFB001C001CFFFA001D001DFFFA001E001EFFFA001F +0020FFFA00200020FFFA00210021FFF900220022FFF900230023FFF900240025FFF90025 +0026FFF900260026FFF800270027FFF800280028FFF800290029FFF8002A002BFFF8002B +002BFFF7002C002CFFF7002D002DFFF7002E002EFFF7002F0030FFF700300031FFF60031 +0031FFF600320032FFF600330033FFF600340034FFF600350036FFF500360036FFF50037 +0037FFF500380038FFF500390039FFF5003A003BFFF4003B003CFFF4003C003DFFF4003D +003DFFF4003E003EFFF4003F003FFFF300400041FFF300410041FFF300420042FFF30043 +0043FFF300440044FFF200450046FFF200460047FFF200470047FFF200480048FFF20049 +0049FFF1004A004AFFF1004B004CFFF1004C004DFFF1004D004DFFF1004E004EFFF0004F +004FFFF000500051FFF000510052FFF000520052FFEF00530053FFEF00540054FFEF0055 +0055FFEF00560057FFEF00570058FFEE00580058FFEE00590059FFEE005A005AFFEE005B +005CFFEE005C005DFFEC005D005DFFEC005E005EFFEC005F005FFFEC00600060FFEC0061 +0062FFEB00620062FFEB00630063FFEB00640064FFEB00650065FFEB00660067FFEA0067 +0068FFEA00680068FFEA00690069FFEA006A006AFFEA006B006BFFE9006C006DFFE9006D +006DFFE9006E006EFFE9006F006FFFE900700070FFE800710072FFE800720072FFE80073 +0073FFE800740074FFE800750075FFE700760076FFE700770078FFE700780078FFE70079 +0079FFE7007A007AFFE6007B007BFFE6007C007DFFE6007D007DFFE6007E007EFFE6007F +007FFFE500800080FFE500810082FFE500820083FFE500830083FFE500840084FFE40085 +0085FFE400860086FFE400870088FFE400880088FFE400890089FFE3008A008AFFE3008B +008BFFE3008C008DFFE3008D008EFFE3008E008EFFE2008F008FFFE200900090FFE20091 +0091FFE200920093FFE200930093FFE100940094FFE100950095FFE100960096FFE10097 +0098FFE100980099FFE000990099FFE0009A009BFFE0009B009BFFE0009C009CFFE0009D +009EFFDF009E009EFFDF009F00A0FFDF00A000A0FFDF00A100A1FFDF00A200A3FFDE00A3 +00A4FFDE00A400A4FFDE00A500A6FFDE00A600A6FFDE00A700A7FFDD00A800A9FFDD00A9 +00A9FFDD00AA00ABFFDD00AB00ABFFDD00AC00ACFFDC00AD00AEFFDC00AE00AFFFDC00AF +00B0FFDC00B000B0FFDC00B100B1FFDB00B200B2FFDB00B300B4FFDB00B400B5FFDB00B5 +00B6FFDB00B600B6FFDA00B700B7FFDA00B800B9FFDA00B900BAFFDA00BA00BBFFDA00BB +00BBFFD900BC00BCFFD900BD00BDFFD900BE00BFFFD900BF00C0FFD900C000C1FFD800C1 +00C1FFD800C200C2FFD800C300C4FFD800C400C5FFD800C500C5FFD700C600C6FFD700C7 +00C7FFD700C800C8FFD700C900CAFFD700CA00CBFFD600CB00CCFFD600CC00CCFFD600CD +00CDFFD600CE00CFFFD600CF00D0FFD500D000D0FFD500D100D1FFD500D200D2FFD500D3 +00D3FFD500D400D5FFD400D500D5FFD400D600D7FFD400D700D7FFD400D800D8FFD400D9 +00DAFFD300DA00DBFFD300DB00DCFFD300DC00DCFFD300DD00DDFFD300DE00DEFFD200DF +00E0FFD200E000E0FFD200E100E2FFD200E200E2FFD200E300E3FFD100E400E5FFD100E5 +00E6FFD100E600E7FFD100E700E7FFD100E800E8FFD000E900E9FFD000EA00EBFFD000EB +00EBFFD000EC00ECFFD000ED00EDFFCF00EE00EEFFCF00EF00F0FFCF00F000F1FFCF00F1 +00F2FFCF00F200F2FFCE00F300F3FFCE00F400F4FFCE00F500F6FFCE00F600F7FFCE00F7 +00F7FFCD00F800F8FFCD00F900F9FFCD00FA00FBFFCD00FB00FCFFCC00FC00FDFFCC00FD +00FEFFCC00FE00FEFFCC00FF00FFFFCCB8FFC0401EB229323610B220B240B250B270B280 +B2A0B2B0B2D0B2E0B20AC0B2F0B202B8FFC04070B51718361F44010F561F56024F555F55 +026F54019F54AF54025153170452531604535215044A4952044649370447493204484932 +04493539043C3F32043D3F3D043E3F2104433F1D04423F5204413F5204403F52043F3532 +0432336404333534043534540434351E04D034E034F03403B8FFEEB3B4254836B8FFE0B3 +B4102336B8FFEE400DB4090F36B41A480476B386B302B8FFF0B3B3254836B8FFFA40FFB3 +092436B314480489881304706C7078020F9CDF9E02409D161936409C161B364097171936 +4096171B368685131F0F840F850F8E0F8F0F901F841F8E1F8F2F8E808580888F91908590 +8790880F40820910360F721F72024071090C360F6D0120C80120C7013FC6EFC60220C540 +C50200620100621062024061A061020F5B012D1411042C1425042B1439042A1413042914 +15041F141E042120430420143C04C91A45041A1B47041B1A3C041A143204151439041314 +480412141A0411141A0470140140144143360F0E2A1F0006010DC34B1F0CC24B1F0AC04B +1F09C04B1F05BC4B1F04BD4B1F03B94B1F02BA4B1F01B64B1F00B74B1FC3C22A1FC0BF2A +1FBD4056BC211FBAB9211FB7B6211FC2C3C40DBFC0C10DBCBDBE0CB9BABB0CB6B7B80C10 +BC80BC0240B980B9020FB63FB64FB67FB6040FB62FB63FB66FB67FB6BFB6CFB6FFB6080A +0937040C0D02050402030202010002500501B801FF858D8D1DB0964B5258B0801D59B808 +004B5458B001B0018E59B0084B5358B001B0018E59002B2B2B2B2B737473732B2B2B2B2B +2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB00345B006456861B006234473B00345B00E456861 +B00E2344B00E45B00F456861B00F23442B01B0144568B01423442B732B2B2B2B2B2B2B2B +2B2B2B2B2B2B2B2B7373737373737373732B732B732B2B2B2B2B73732B2B2B2B732B2B2B +2B00752B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73747373742B73742B400C3736 +26251F13120D0C0504022C20B003254523452361688A204568208A234460442D2C4B5258 +45441B2121592D2C202045684420B001602045B0467668188A4560442D2CB0122BB00225 +45B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C +60B0022523442121212D2CB100032545685458B0032545B0032545606820B004252344B0 +042523441BB00325204568208A2344B00325456860B003252344592D2CB0032520456820 +8A2344B00325456860B0032523442D2C4B525845441B2121592D2C462346608A8A462320 +468A608A61B8FF8062232010238AB14B4B8A70456020B0005058B00161B8FFBA8B1BB046 +8C59B0106068013A2D2C2045B003254652583F1B2111592D2C4B53234B515A5820458A60 +441B2121592D2C4B53234B515A58381B2121592D061E061405F005D1047C045D03DD0010 +0000FFE7FFE1FE78FE64FE590394001FFFFF009600AA00B900C600CEFFFFFFFFFFFFFFFF +00BC00C2FFFFFFFF007600B200C000CBFFFFFFFFFFFFFFFFFFFFFFFF0081009400A600CC +00DA00EFFFFFFFFFFFFFFFFF0098009E00AB00B0FFFFFFFFFFFFFFFFFFFFFFFF00900098 +009E00A400A900AE00B300BA00C3FFFF00880091009800A500ACFFFFFFFFFFFFFFFFFFFF +006F0087008F009B00A000D3011DFFFFFFFFFFFF00C3021401C2FFFFFFFF00E9000C02D1 +0173018E001A002C0044005C0073007E008600B200C8014C001A003D00440050005C0072 +0078009200B200B900C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003D0056005D006A +006E00B100B900C1FFFFFFFF002A003D00540064006A00B100B9FFFFFFFFFFFF0071007A +008900A100A700BB006F007A00870091009AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +008102210221007400E500B900CA019502C600AC00A700850614000A000005D1001F0000 +045D001F00000000FFE10000FE64FFF50000036202F402A2029100AF026A004C08000100 +0000000002D0000002D000000326012303AC00A8068C00C30516009B089C009505D00073 +022600A403A200B503A20093051600A7068C00D202E9009303A2009902E900FD03A2FFE2 +0516008905160116051600A1051600A70516004D051600BB051600890516009A0516007A +0516007103A2015A03A200E6068C00FE068C00F5068C010C045D00A0080000B00578001A +057C00C805960073062A00C8050F00C8049900C806340073060300C8035E008903A3002C +058B00CD047400C806BE00C805FC00C8064C007304D300C8064C0073059000C805780086 +04EE000005DB00B20578001A07E9005C057B004404EC0006057B007E03A200EF03A20046 +03A200AB068C00BA0516FFFC0516015404CE006804FC00B9042B006904FC006C04C4006A +02D0004404FC006C051000B9023200AF02C1FFC204BC00C1023200BB07C800B9051000B9 +04DB006A04FC00B904FC006C036A00B9042B006E0327003E051000B104BC003D068C0056 +04BC003C04BC003D0434005D051400AD03A2017A051400BB068C00BB0578001A0578001A +05960073050F00C805FC00C8064C007005DB00B204CE006804CE006804CE006804CE0068 +04CE006804CE0068042B006904C4006A04C4006A04C4006A04C4006A023200A00232FFEB +0232FFF502320005051000B904DB006A04DB006A04DB006A04DB006A04DB006A051000B1 +051000B1051000B1051000B1051600BB0456009A0516009F05160089051600AC045D00B9 +0516008904F600B90800009F0800009F07D000AA0516021D0516015A068C00F507E0000E +064C0073080000A1068C00D7068C00FE068C010C0516006C052200BE0516009505D100BB +068C009005A900710516008A045D0097045D0079068C006B07A4006804DB005D045D0071 +03260123068C00D2068C00860516FFDC068C00F305D10032052800A6052800AE068C00B2 +0578001A0578001A064C0073088F007807DA006A051600990800009903ACFFED03AC0096 +0226FFED022600A0068C00D2068C00AC04BC003D04EC000602E4FF9A0516000003A200BA +03A200C20500004405020044051600BB02E900FD0226FFF603ACFFF60C2C00950578001A +050F00C80578001A050F00C8050F00C8035E0089035E005D035E007E035E0089064C0073 +064C0073064C007305DB00B205DB00B205DB00B2023200BB05160136051600ED05160118 +05160113051602210516012D05160161051601560516019F05160132047E001802460018 +05780086042B006E057B007E0434005D03A2017A0634000E04E5006A04EC000604BC003D +04D800C804FC00B9068C00DC068C012304560123045600CF045600CF080000AB080000AB +0800008C0516003C0634007304FC006C035E008905780086042B006E05960073042B0069 +05960073042B006904FC006C0516FFFC02E900FD0578001A04CE00680578001A04CE0068 +062A00C8052E006C0634000E050F00C804C4006A050F00C804C4006A047400C8023200AB +047400C8025E00BB047400C803AB00BB05FC00C8051000B905FC00C8051000B9064C0073 +04DB006A059000C8036A00B9059000C8036A009205780086042B006E04EE00000327003E +04EE00000327003E05DB00B2051000B105DB00B2051000B1057B007E0434005D057B007E +0434005D048800C8064C0073068D006904FC006C04DD006A041A006D050B006A03F8000A +065200680516FFFC04FF0123045D009A094F00C806F7008904E900AF05D8000002E400D5 +047500D5089C00950296000F04D5009202D6008302D6008304D500B102D600700578001A +04CE006805960073042B006905960073042B0069050F00C804C4006A050F00C804C4006A +050F00C804C4006A0634007304FC006C0634007304FC006C0634007304FC006C060300C8 +051000B90603002005100013035E002C0232FFF2035E005F0232FFFC035E008002320001 +035E00890232008E03A3002C02C1FFC2058B00CD04BC00C104BC00C1047400C802320005 +05FC00C8051000B905FC00C8051000B9064C007304DB006A064C007304DB006A059000C8 +036A001B05780086042B006E04EE00000327003E05DB00B2051000B105DB00B2051000B1 +05DB00B2050B00B105DB00B2050B00B107E9005C068C005604EC000604BC003D026700B9 +0578001A04CE006807E0000E07A40068064C007304DB005D03A2015A07E9005C068C0056 +07E9005C068C005607E9005C068C005604EC000604BC003D0226FFED0516FFD005160089 +05BE00B1080000AB0800008C0800008A0800009901B00061051601610516021205160100 +057800070602000006F6000004510000070C000006070000074300000232FFCB0578001A +057C00C805A0001A050F00C8057B007E060300C8035E0089058B00CD057C001A06BE00C8 +05FC00C805310072064C0073060300C804D300C80561007604EE000004EC0006057B0044 +06F700B3068C006C035E007E04EC000604FC006C041A006D051000B9023200A0050D00B1 +04F600B904BC003D03A9006C051000B904FE0089023200BB04BC00C104BC003D051E00B9 +04BC003D0406006804DB006A050000B904100069050D00B104B80030069300B006820071 +02320005050D00B104DB006A050D00B106820071050F00C80657FFFF048800C8059B0073 +05780086035E0089035E007E03A3002C08F2001208D300C8068BFFFF058B00CD04EC0006 +060300C80578001A057C00C8057C00C8048800C805F7000A050F00C807C9002004ED0051 +060100C8060100C8058B00CD05E0001206BE00C8060300C8064C0073060300C804D300C8 +0596007304EE000004EC0006068D0069057B0044061700C805B2008E083E00C8085C00C8 +06440000075D00C8057200C8059C0061084600C805A6002C04CE006804EA007404C200B9 +03C500B904F9000904C4006A0662003404320041051F00B9051F00B904BC00C104F7001D +059200B9051900B904DB006A051900B904FC00B90446006A03F8000A04BC003D06BA006F +04BC003C052800B904D8008E070200B9071A00B90520000A065B00B9049100B904600053 +06B600B904CC004304C4006A0510001303C500B90460006A042B006E023200AF02320005 +02C1FFC20750001D075000B90510001304BC00C104BC003D051900B9048800C803C500B9 +080000CB096000C8051900B904560119045600EF045600E6045600B3045600E6045600F3 +045600C5000000000000000000000000000000000674007304DB006A060D00B2054700B1 +0000020900000221000001540000021D0516013605160003051601360516012505160142 +051601420516014205160125051602090516013605160142051601420516014205160142 +051601360578001A04CE00680578001A04CE00680578001A04CE00680578001A04CEFFE3 +0578001A04CE00680578001A04CE00680578001A04CE00680578001A04CE00680578001A +04CE00680578001A04CE00680578001A04CE00680578001A04CE0068050F00C804C4006A +050F00C804C4006A050F00C804C4006A050F00C804C4006A050F002904C4FFFC050F00C8 +04C4006A050F00C804C4006A050F00C804C4006A035E008902320096035E0089023200AF +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000064C007304DB006A064C0073 +04DB006A064C007304DB006A064C007304DBFFE5064C007304DB006A064C007304DB006A +064C007304DB006A0674007304DB006A0674007304DB006A0674007304DB006A06740073 +04DB006A0674007304DB006A05DB00B2051000B105DB00B2051000B1060D00B2054700B1 +060D00B2054700B1060D00B2054700B1060D00B2054700B1060D00B2054700B104EC0006 +04BC003D04EC000604BC003D04EC000604BC003D04EC000604BC003D04FC006C000000ED +0516008A0000001F00000380090E09000303050507070B07030404070703050304070707 +070707070707070404070707060A08070808070608080505070609080907090707070808 +090707070404040706060606060606030606030306030906060606040604060607060605 +060506070808080708090806060606060606060606060303030306060606060606060606 +07050707060507060909090606070A090907070707060607070607050507090606050707 +0707070606070808090A0907090404020207070607030604040606070302040E08070807 +070505050509090908080803060606060606060606060603070607050508060706070607 +070505050909090608060507060806080606060308060806080608070607060603060306 +040806080609060704070407060704070408060806070507050609070606050605090606 +050B09060703050B03050303050308060806080607060706070608060806080608060806 +050305030503050305030706060603080608060906090607040706070408060806080608 +06090707060308060A090906040907090709070706020607060909090902060606080809 +060908090308070607070805070809080709080706070707090905070605060306060505 +060603060606060506060506050907030606060707080608070505050A0A070707070807 +070607070906080807070908090807080707070708070909080907080907060606040606 +070506060606070606060606050609060705090907080606080606060406060303030909 +060606060505090B06050505050505050000000009060806000000000606060606060606 +060606060606060806080608060806080608060806080608060806080608060706070607 +060706070607060706070605030503000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000090609060906 +090609060906090609060906090609060906080608060806080608060806080607060706 +07060706060007000A0F0A000404040508070B0703050507080405040507070707070707 +0707070505080808060A070708080606080805050706090709070908070708070B070707 +0505050806060707050707040707030307030B0707070704060407060707060606050608 +070708060709080707070707070507070707030303030707070707070707070707050707 +060507060A0A0A0606080A090A080808070706070807070505080A070604080807080706 +06080707090B0A070A0505030308080607040605050606070403050F0706070606050505 +050909090808080306060606060606060606060307060706050806070607070808050505 +0A0A0A060807050706080508050706040707070708070806070607060306030605070707 +0709070804080407060704070408070807070607060609090707050705090606050C0906 +0704060B0306040406040707080508050607060706070807080708070807080705030503 +0503050305030707070603070707070907090708040706070408070807080708070B0707 +060307070A0A0907050B070B070B070706030607070A0A0A0A0206060607070906090909 +030707070607080507070907070908070707070709090507070507030707070507070307 +0607060507070507060909030707070906080608070505050B0B08070708070707060706 +0906080807070908090807080707090709070B0B080907080A0707070605060707050707 +0706070707070705050609070706090A0708060608060707050606030303090907070607 +06050A0C0705050505050505000000000907080700000000060606060606060606060606 +060606070707070707070707070707070707070707070707070707060706070607060706 +070607060706070503050300000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000009070907090709070907 +090709070907090709070907090708070807080708070807080708070706070607060706 +070007000B110B000404040509070C080305050709040504050707070707070707070705 +05090909060A080809090706090805050806090809070908080708080B08070805050509 +07070707060707040707030407030B070707070506040707090707060705070908080907 +080908070707070707060707070703030303070707070707070707070706070707060707 +0B0B0B0707090B090B090909070707080908070606090B07060409090709080707090808 +090C0B070B05050303090907070407050507070704030511080708070705050505090909 +08080803070707070707070707070603080608060509070707070709090606060B0B0B07 +090705080609060906070704080708070907090707070706030603060508070807090708 +05080508060704070408070807080608060609090707060705090707060D0A070804060C +040704040704080709060906070707070707090709070907080708070503050305030503 +05040807070603080708070907090708050806070408070807080708070B090707030807 +0B0B0907050B090B090B090707030707080B0B0B0B02070707080809060A090903080808 +070808050808090807090807070707080909050707060703070707050707030707070706 +07070607070909030707070907090609080505050D0C090808080808080608070B070808 +08080908090807090708090809080B0C090A07090B080707070508070906070707070707 +07070706050709070807090A080907070A0707070507060303040A0B0707070706050B0D +070606060606060600000000090708070000000007070707070707070707070707070708 +070807080708070807080708070807080708070807080707070707070707070707070707 +070707050305030000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000907090709070907090709070907 +090709070907090709070807080708070807080708070807070707070707070707000700 +0C120C00040405060A080D09030505080904050405080808080808080808080505090909 +070C0808090908070909050508070A090A080A08080709080D0807080505050A08080808 +060808040808030407030B0808080805070508070B0707070805080A08080908090A0908 +08080808080608080808030303030808080808080808080808070808080708070C0C0C08 +08090C0A0C090909080808090A080807070A0B080705090A080A0908080A08080A0D0D08 +0C06060303090A070704080505080808040306120808080808050505050A0A0A09090903 +0808080808080808080807030807080705090707070808090A0707070C0C0C0809080508 +07090609060808040808080809090908080808070307040706090809080A080805080508 +07070507050908090808070807070A0B0808060807090808070E0A070904070D04070404 +070408080906090608080808080809080908090809080908050305030503050305040807 +070703090809080A080A0808050807070509080908090809080D0B07070408080C0B0A08 +050D0B0D0B0D0B0707030808090C0C0C0C0308080808090A060B090B0308080808080905 +08080A09080A0908080707080B0A05070806080308070706080803080708070608080608 +070B0B030808080B080A0709080505050D0D0A0808090808080709080D07090908090A09 +0A09080907080B0809090D0E090B08090C080808070608080B0608080707080808080806 +07070B0709080B0C080907080B0708080608070303040B0B0807070807060C0E08070707 +07070707000000000A080908000000000808080808080808080808080808080808080808 +080808080808080808080808080808080808080808080808080808080808080808080805 +030503000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000A080A080A080A080A080A080A080A080A08 +0A080A080A0809080908090809080908090809080707070707070707080008000D140D00 +050505050A080D09030606090905070506080808080808080808080606090909070D0908 +090908080909050608070B090A080A08090909090D0909090606060B0808080808080805 +0808030407030B0808080805070608080B0708070807080B09090908090A090808080808 +080808080808030303030808080808080808080808070808080708080D0D0D0808090C0A +0D090909080808090B090807070B0B080705090B080B0908080B09090A0E0D080D060603 +03090B080905080606080808050306140908090808050505050A0A0A0909090308080808 +08080808080807030907090707090809080808090B0707070D0D0D080908050907090809 +080808050908090809080908080808070307040706090809080A08080508050907090609 +060908090809070907070A0B08080708070B0808070F0B080A05070E0408050508050908 +090809080808080808080908090809080908090805030503050305030604080707070309 +0809080A080A0808050907090609080908090809080D0B09080409080C0B0A08060D0B0D +0B0D0B0908030808090D0D0D0D0308080809090A060B0A0C030908090809090508090B09 +080A0908090909090B0B05090807080308080906080803080808080708080708080B0B03 +0808080B080A0709090505060F0D0B080909090808070A080D080909080A0B090A090809 +09090B090A090D0E0A0C08090D080808080608080B070808080809080808080807080B07 +09080B0C080907080B0808080608070303040C0D0808080807060D0F0807070707070707 +000000000A08090900000000080808080808080808080808080808090809080908090809 +080908090809080908090809080908080808080808080808080808080808080503050300 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000A080A080A080A080A080A080A080A080A080A080A08 +0A0809080908090909090909090909090908090809080908080008000E150E0005050606 +0B090F0A040606090B050705060909090909090909090906060B0B0B080E0A0A0A0B0908 +0B0A05060A080B0A0B080B0A0A090A0A0F0A090A0606060B090908090709080509090305 +08030D0909090906080609080B0908080906090B0A0A0A090A0B0A080808080808070808 +0808030303030909090909090909090909080909090809090E0E0E09090B0E0B0E0B0B0B +0909090A0B0A0908080B0D0908060B0B090B0A09090B0A0A0B0F0E090E060604040B0B08 +0905090606090909050406150A090A0909050505050B0B0B0A0A0A030909090909090909 +090908030A080A08060B09090808090B0B0808080E0E0E090B09050A080A070A07090905 +0A080A080B090B090809080803080408060A090A090B090A060A060A08090609060A090A +090A080A08080B0B09090709070B090908100C080A05080F0508050508050A080A070A07 +0908090809080B090B090B090A090A09050305030503050306050A080808030A090A090B +090B090A060A0809060A090A090A090A090F0B0908040A080E0D0B09060F0B0F0B0F0B09 +080409090A0E0E0E0E030909090A0B0C070C0B0C030A0A0A090A0A050A0A0B0A090B0A08 +0909090A0B0B05090907090309090906090903080809080709090709080B0B030909090B +090B080A0A050506100F0B0A090B0A0A0A080A090F090B0B0A0A0B0A0B0A080A09090B0A +0B0A0D0E0B0D0A0A0E0A0809080709080B07090908090A090909090807080B090A080B0C +090B08080C0808090708080303050D0D0908080908070E10090808080808080800000000 +0B090B0A000000000909090909090909090909090909090A080A080A080A080A080A080A +080A080A080A080A080A0809080908090809080908090809080908050305030000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000B090B090B090B090B090B090B090B090B090B090B090B090A09 +0A090B0A0B0A0B0A0B0A0B0A0908090809080908090009000F170F00050506070C0A100B +0407070A0C050705070A0A0A0A0A0A0A0A0A0A07070C0C0C080F0A0A0B0B09090C0B0507 +0A080D0B0C090C0A0A090B0A0F0A090A0707070C0A0A0909080909050909030509030F09 +0A090906080609090D0909090A070A0C0A0A0B090B0C0B09090909090908090909090303 +0303090A0A0A0A0A090909090A080A0A0A080A090F0F0F0A0A0C0F0C0F0C0C0C0A090A0B +0C0B0A08080C0E0A08060C0C0A0C0B0A0A0C0A0A0C100F0A0F070704040C0C0909050A07 +0709090A050407170A090A0909050505050C0C0C0B0B0B030A0A0A0A0A0A0A0A0A0A0803 +0A080A09070B09090909090C0C0808080F0F0F0A0C09050A080B080B08090A050A090A09 +0B0A0B090909090803080408070B090B090C0A0A060A060A08090609060B090B090A090A +09090C0D090A080A070B0A0908110D080B0508100509050509050A090B080B0809090909 +09090C090C090C090B090B09050305030503050307050A090908030B090B090C0A0C0A0A +060A0809060B090B090B090B080F0D0909050A090F0E0C0A070F0D0F0D0F0D0909040A0A +0B0F0F0F0F030A0A0A0A0B0D070D0B0D030A0A0B090A0B050A0A0D0B0A0C0B090A09090A +0D0C0509090809030909090709090309090909080A0A0809090B0D03090A090D090C090B +0A05050711110C0A0A0B0A0A0A090B090F090B0B0A0B0D0B0C0B090B090A0D0A0B0B0F10 +0C0E0A0B100A0909090709090D08090909090A090A09090807090D090A090D0E0A0C0908 +0D0909090708080303050E0E0909090909070F120908080808080808000000000C0A0C0A +000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090A090A090A090A090A +090A090A090A090909090909090909090909090909090905030503000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B090B090C0A +0C0A0C0A0C0A0C0A090909090909090909000A0010181000060606070D0A110C0407070A +0D060706070A0A0A0A0A0A0A0A0A0A07070D0D0D09100B0B0B0C0A090C0C07070B090D0C +0D0A0D0B0A0A0C0B110B0B0B0707070D0A0A0A0A080A0A060A0A050609050F0A0A0A0A06 +09070A090D0909090A070A0D0B0B0B0A0C0D0C0A0A0A0A0A0A080A0A0A0A050505050A0A +0A0A0A0A0A0A0A0A0A090A0A0A090A0A1010100A0A0D100D100D0D0D0A0A0A0C0D0B0A09 +090D0F0A09060D0D0A0D0C0A0A0D0B0B0D11100A10070704040D0D090B060A07070A0A0A +060407180B0A0B0A0A070707070D0D0D0C0C0C050A0A0A0A0A0A0A0A0A0A09030A090B09 +070C0A0B090A0A0D0D0909091010100A0C0A070A090B080B080A0A060B0A0B0A0C0A0C0A +0A0A0A0905090509070C0A0C0A0D0A0B060B060A090A070A070C0A0C0A0B090B09090D0D +0A0A090A070D0A0A09130E0B0C060911050A06060A060B0A0B080B080A0A0A0A0A0A0C0A +0C0A0C0A0C0A0C0A070507050705070507060B090909050C0A0C0A0D0A0D0A0B060A090A +070C0A0C0A0C0A0C0A110D0B09050B0A100F0D0A07110D110D110D0B09040A0A0B101010 +10030A0A0A0B0C0E090E0C0E050B0B0B0A0B0C070B0B0D0C0A0D0C0A0B0A0B0B0D0D070B +0A090A050A0A09070A0A0509090A09080A0A080A090D0D050A0A0A0D0A0D090B0A070707 +12120D0B0B0B0B0B0B090C0A110A0C0C0B0C0D0C0D0C0A0B0A0B0D0B0C0B0F100D0E0B0B +110B0A0A0A080A0A0D090A0A090A0B0A0A0A0A0907090D090A0A0D0E0A0C09090D0A0A0A +0809090505060F0F0A09090A090810130A09090909090909000000000D0A0D0B00000000 +0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B +0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0705070500000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0A0C0A0D0B0D0B0D0B +0D0B0D0B0B090B090B090B090A000A00111A1100060607080E0B120C0508080B0E060806 +080B0B0B0B0B0B0B0B0B0B08080E0E0E09110C0C0C0D0B0A0D0D08080C090E0D0D0A0D0C +0C0A0C0C110C0A0C0808080E0B0B0A0B090B0A060B0B05060A05110B0A0B0B0709070B0A +0E0A0A090B080B0E0C0C0C0B0D0D0C0A0A0A0A0A0A090A0A0A0A050505050B0A0A0A0A0A +0B0B0B0B0B090B0B0B090B0B1111110B0B0E110D110E0E0E0B0B0B0C0E0C0B09090E100A +09070E0E0B0E0C0B0B0E0C0C0D12110B11080805050E0E0A0A060B08080B0B0B0605081A +0C0B0C0B0B080808080D0D0D0C0C0C050B0B0B0B0B0B0B0B0B0B0A050C090C09080D0A0A +0A0A0B0E0E0909091111110B0D0B080C090C090C090B0B060C0A0C0A0D0B0D0B0A0B0A09 +05090509080D0B0D0B0D0A0C070C070C090A070A070C0B0C0B0C090C090A0D0E0B0A080B +080D0B0B09140F0A0C060912060A06060A060C0A0C090C090B0A0B0A0B0A0D0B0D0B0D0B +0D0B0D0B080508050805080508060C0A0A09050D0B0D0B0D0A0D0A0C070C090A070C0B0C +0B0C0B0C0B110E0A0A050C0A11100D0A08110E110E110E0A0A050B0B0C11111111040B0B +0B0C0D0F090F0D10050C0C0C0B0C0D080C0C0E0D0B0D0D0A0B0A0A0C0F0E080A0B080B05 +0B0B0A080B0B050A0A0B0A090A0B090B0A0E0E050B0A0B0E0B0D0A0C0C08080813130E0C +0A0D0C0C0C0A0D0B110A0D0D0C0D0E0D0D0D0A0C0A0A0E0C0D0C12120D100C0C120C0A0A +0A080B0A0E080B0B0A0B0C0B0A0B0B09080A0D0A0C0A0F0F0B0E0A090E0A0A0B08090905 +050610100B0A0A0B0A0811140B09090909090909000000000D0A0D0B000000000B0B0B0B +0B0B0B0B0B0B0B0B0B0B0B0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B +0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A080508050000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000D0A +0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0B0C0B0D0B0D0B0D0B0D0B0D0B +0A0A0A0A0A0A0A0A0B000B00121B1200060607080F0B130D0508080B0F070807080B0B0B +0B0B0B0B0B0B0B08080F0F0F0A120C0C0D0E0B0A0E0E08080C0A0F0D0E0B0E0D0C0B0D0C +120C0B0C0808080F0B0B0B0B090B0B060B0B05060B05120B0B0B0B0809070B0B0F0B0B09 +0B080B0F0C0C0D0B0D0E0D0B0B0B0B0B0B090B0B0B0B050505050B0B0B0B0B0B0B0B0B0B +0B0A0B0B0B0A0B0B1212120B0B0F120E120F0F0F0B0C0B0D0F0D0B0A0A0F110B0A070F0F +0B0F0D0C0C0F0C0C0E13120B12080805050F0F0B0B070B08080B0B0B0705081B0C0B0C0B +0B080808080E0E0E0D0D0D050B0B0B0B0B0B0B0B0B0B0A050C090C09080E0B0B0B0B0B0F +0F0A0A0A1212120B0E0B080C090D090D090B0B070C0B0C0B0E0C0E0B0B0B0B0A050A050A +080D0B0D0B0E0B0D080D080C090B070B070D0B0D0B0C090C090A0E0E0B0B090B090E0B0B +0A15100B0D070A13060B06060B060C0B0D090D090B0B0B0B0B0B0E0B0E0B0E0B0E0B0E0B +080508050805080508060C0B0B0A050D0B0D0B0E0B0E0B0D080C090B070D0B0D0B0D0B0D +0B120F0B0B050C0B12110E0B08120F120F120F0B0B050B0B0D12121212040B0B0B0C0E10 +0A100E10050C0C0D0B0C0E080C0C0F0D0C0E0E0B0C0B0B0C100E080B0B090B050B0B0B08 +0B0B050B0B0B0B090B0B090B0B0F0F050B0B0B0F0B0E0A0D0C08080814140F0C0B0E0C0C +0C0A0D0B120B0E0E0C0D0F0E0E0E0B0D0B0B0E0C0E0D13130E110C0D130D0B0B0B080B0B +0E090C0C0B0B0D0B0B0B0B0A090B0F0B0C0B10100C0E0A0A0F0B0B0B080A090505061010 +0B0B0B0B0A0812150B0A0A0A0A0A0A0A000000000E0B0D0B000000000B0B0B0B0B0B0B0B +0B0B0B0B0B0B0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0B0B0B0B0B +0B0B0B0B0B0B0B0B0B0B0B08050805000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000E0B0E0B0E0B +0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0B0B0B0B +0B0B0B0B0B000B00131D130007070709100C140E0509090C10070907090C0C0C0C0C0C0C +0C0C0C09091010100A130D0D0D0F0C0B0F0E08090D0B100E0F0B0F0D0D0C0E0D130D0C0D +090909100C0C0B0C0A0C0B070C0C06070B06120C0C0C0C080A070C0B100B0B0A0C090C10 +0D0D0D0C0E0F0E0B0B0B0B0B0B0A0B0B0B0B060606060C0C0C0C0C0C0C0C0C0C0C0A0C0C +0C0A0C0C1313130C0C10130F131010100C0C0C0E100D0C0A0A10120C0A0710100C100E0C +0C100D0D0F14130C130909050510100B0C070C09090C0C0C0705091D0D0C0D0C0C080808 +080F0F0F0E0E0E060C0C0C0C0C0C0C0C0C0C0B060D0A0D0A090F0C0C0B0C0C10100A0A0A +1313130C0F0C080D0A0D0A0D0A0C0C070D0B0D0B0F0C0F0C0B0C0B0B060B060B090E0C0E +0C0F0C0D080D080D0A0C070C070E0C0E0C0D0A0D0A0B0F100C0C0A0C090F0C0C0A16110C +0E070B14060B07070B070D0B0D0A0D0A0C0B0C0B0C0B0F0C0F0C0F0C0E0C0E0C08060806 +0806080609070D0B0B0B060E0C0E0C0F0C0F0C0D080D0A0C070E0C0E0C0E0C0E0C13100C +0B060D0B13120F0C091310131013100C0B050C0C0E13131313040C0C0C0D0E110A110E11 +060D0D0D0C0D0E080D0D100E0C0F0E0B0D0C0C0D110F080C0C0A0C060C0C0B090C0C060B +0B0C0B0A0C0C0A0C0B100F060C0C0C0F0C0F0B0D0D0808091515100D0C0E0D0D0D0B0E0C +120C0E0E0D0E100E0F0E0B0D0C0C100D0E0E14140F110D0D140D0B0C0B090C0B0F0A0C0C +0B0C0D0C0C0C0C0A090B100B0D0C11110C0F0B0A100B0B0C090A0A06060711110C0B0B0C +0B0913160C0A0A0A0A0A0A0A000000000F0C0E0C000000000C0C0C0C0C0C0C0C0C0C0C0C +0C0C0C0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0C0B0C0B0C0B0C0B0C +0B0C0B0C0B0C0B0806080600000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000F0C0F0C0F0C0F0C0F0C +0F0C0F0C0F0C0F0C0F0C0F0C0F0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0C0B0C0B0C0B0C0B +0C000C00141E140007070809100D160F0509090D10070907090D0D0D0D0D0D0D0D0D0D09 +091010100B140E0E0E0F0D0C100F08090E0B110F100C100E0E0C0F0E140E0C0E09090910 +0D0D0C0C0A0C0C070C0D06070C06130D0C0C0C090A080D0C100C0C0B0D090D100E0E0E0D +0F100F0C0C0C0C0C0C0A0C0C0C0C060606060D0C0C0C0C0C0D0D0D0D0D0B0D0D0D0B0D0C +1414140D0D101310141010100D0D0D0F100E0D0B0B10130C0B0810100D100F0D0D100E0E +1015140D140909050510100C0C070D09090D0D0D0705091E0E0D0E0D0D08080808101010 +0F0F0F060D0D0D0D0D0D0D0D0D0D0B060E0A0E0B09100C0C0C0C0C10100B0B0B1414140D +100C080E0A0E0A0E0A0C0D070E0C0E0C0F0D100D0C0D0C0B060B060B090F0D0F0D100C0E +090E090E0A0C080C080F0D0F0D0E0B0E0B0B10100C0C0A0D0A100D0C0B17110C0F070B16 +060C07070C070E0C0E0A0E0A0D0C0D0C0D0C100C100C100C0F0D0F0D0806080608060806 +09070E0C0C0B060F0D0F0D100C100C0E090E0A0C080F0D0F0D0F0D0F0D14100C0C060E0C +1313100C091410141014100C0C050D0D0E14141414040D0D0D0E0F110B120F12060E0E0E +0D0E0F080E0E110F0D100F0C0D0C0C0E1110080C0C0A0D060D0C0C090D0C060C0C0D0C0A +0C0D0A0D0C1010060D0C0D100D100B0E0E0808091616100E0C0F0E0E0E0B0F0D130C0F0F +0E0F110F100F0C0E0C0C100E0F0E151510120E0E150E0C0C0C090C0C100A0D0D0C0C0E0D +0C0D0C0B0A0C110C0D0C12120D100B0B110C0C0D090B0A06060712120D0C0C0D0B091417 +0D0B0B0B0B0B0B0B00000000110C0F0D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E +0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0D0C0D0C0D0C0D0C0D0C0D0C0D +0C0D0C080608060000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000100C100C100C100C100C100C100C +110C110C110C110C110C0F0D0F0D0F0D0F0D0F0D0F0D0F0D0C0C0C0C0C0C0C0C0C000D00 +152015000707080A110D170F060A0A0D11080A080A0D0D0D0D0D0D0D0D0D0D0A0A111111 +0B150E0E0F100D0C1010080A0F0C1210110D110F0E0D0F0E150E0D0E0A0A0A110D0D0D0D +0B0D0D070D0D06070C06140D0D0D0D090B080D0C110C0C0B0D0A0D110E0E0F0D10110F0D +0D0D0D0D0D0B0D0D0D0D060606060D0D0D0D0D0D0D0D0D0D0D0B0D0D0D0B0D0D1515150D +0D111411151111110D0D0D0F110F0D0B0B11140D0B0811110D110F0E0E110E0E1116150D +150A0A060611110C0D080D0A0A0D0D0D08060A200E0D0E0D0D080808081111110F0F0F06 +0D0D0D0D0D0D0D0D0D0D0C060E0B0E0B0A100D0D0C0D0D11110B0B0B1515150D100D080E +0B0F0B0F0B0D0D080E0D0E0D100E100D0D0D0D0C060C060C0A100D100D110D0F090F090E +0B0D080D080F0D0F0D0E0B0E0B0C11110D0D0B0D0A110D0D0B18120D0F080C17070D0707 +0D070E0D0F0B0F0B0D0D0D0D0D0D100D100D100D100D100D08060806080608060A070F0C +0C0C06100D100D110D110D0F090E0B0D080F0D0F0D0F0D0F0D15110D0C060E0D1414110D +0A1511151115110D0C060D0D0F15151515040D0D0D0E10120B131013060E0E0F0D0E1008 +0F0E12100E11100D0E0D0D0E1211080D0D0B0D060D0D0C0A0D0D060C0C0D0C0B0D0D0B0D +0C1111060D0D0D110D110C0F0E08080A1717110F0D100E0E0E0C100D140D10100F0F1210 +11100D0F0D0D110E100F161610130E0F160F0D0D0C0A0D0D110B0D0D0C0D0F0D0D0D0D0B +0A0C120C0E0D12130D110C0B120D0D0D0A0B0B06060713130D0C0C0D0C0A15190D0B0B0B +0B0B0B0B00000000120D100D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0D0E0D0E +0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D08 +060806000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000110D110D110D110D110D110D110D120D120D +120D120D120D0F0D0F0D100D100D100D100D100D0D0C0D0C0D0C0D0C0D000D0016211600 +0808090A120E1810060A0A0E12080A080A0E0E0E0E0E0E0E0E0E0E0A0A1212120C160F0F +0F110E0D11110A0A0F0C1310110D110F0F0E100F160F0E0F0A0A0A120E0E0D0E0B0E0D08 +0E0E06080D06150E0D0E0E090B090E0D120D0D0C0E0A0E120F0F0F0E1011100D0D0D0D0D +0D0B0D0D0D0D060606060E0D0D0D0D0D0E0E0E0E0E0C0E0E0E0C0E0E1616150E0E121511 +161212120E0E0E1012100E0C0C12150D0C0912120E12100E0E120F0F1118160E160A0A06 +0612120D0E080E0A0A0E0E0E08060A210F0E0F0E0E0A0A0A0A111111101010060E0E0E0E +0E0E0E0E0E0E0C060F0B0F0C0A110D0E0D0D0E12120C0C0C1616160E110E0A0F0B0F0B0F +0B0E0E080F0D0F0D110E110E0D0E0D0C060C070C0A100E100E110D0F090F090F0B0E090E +09100E100E0F0C0F0C0C11120E0D0B0E0B110E0E0C1A130E10080C18070D08080D080F0D +0F0B0F0B0E0D0E0D0E0D110E110E110E110E110E0A060A060A060A060A080F0D0D0C0610 +0E100E110D110D0F090F0B0E09100E100E100E100E16120E0D070F0D1515110D0A161216 +1216120E0D060E0E1016161616050E0E0E0F11130C131114060F0F0F0E0F110A0F0F1310 +0E11110D0F0E0E0F13120A0E0E0B0E060E0E0D0A0E0E060D0D0E0D0B0D0E0B0E0D121206 +0E0D0E120E110C0F0F0A0A0A1918120F0E110F0F0F0C100E150E11110F10131111110D0F +0E0E120F1110171711140F0F17100D0E0D0A0E0D120C0E0E0D0E0F0E0D0E0E0C0B0D130D +0E0D13140E110D0C120D0D0E0A0C0B06060814140E0D0D0E0C0A161A0E0C0C0C0C0C0C0C +00000000120D110F000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0D0F0D0F0D0F0D0F +0D0F0D0F0D0F0D0F0D0F0D0F0D0F0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0A060A0600 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000110D110D110D110D110D110D110D120D120D120D120D +120D100E100E110F110F110F110F110F0E0D0E0D0E0D0E0D0E000E00172317000808090B +130F1911060A0A0F13080A080A0F0F0F0F0F0F0F0F0F0F0A0A1313130D17101010120F0D +12110A0A100D1311120E1210100E111017100E100A0A0A130F0F0E0E0C0E0E080E0F0608 +0E06160F0E0E0E0A0C090F0E130E0E0C0F0A0F131010100F1112110E0E0E0E0E0E0C0E0E +0E0E060606060F0E0E0E0E0E0F0F0F0F0F0C0F0F0F0D0F0E1717160F0F13161217131313 +0F0F0F1113100F0D0D13160E0D0913130F13110F0F1310101219170F170B0B060613130E +0E080F0A0A0E0E0F08060B23100F100F0F0A0A0A0A121212111111060F0F0F0F0F0F0F0F +0F0F0D06100C100C0A120E0E0E0E0E13130C0C0C1717170F120E0A100C100C100C0E0F08 +100E100E120F120F0E0F0E0D060D070D0B110F110F120E100A100A100C0E090E09110F11 +0F100C100C0D12130E0E0C0F0B120F0E0D1B140E11080D19070E08080E08100E100C100C +0F0E0F0E0F0E120E120E120E110F110F0A060A060A060A060A08100E0E0D06110F110F12 +0E120E100A100C0E09110F110F110F110F17130E0E07100E1616120E0A1713171317130E +0E060F0F1117171717050F0F0F1011140C141115061010100F10110A101013110F12110E +0F0E0E1014130A0E0E0C0F060F0E0E0B0F0E060E0E0F0E0C0E0E0C0F0E1313060F0E0F13 +0F120D10100A0A0A1A1913100E111010100D110F160E11111011131112110E100E0E1310 +121018181215101018100E0E0E0B0E0E120C0F0F0E0E100F0E0F0E0C0B0E130E0F0E1414 +0F120D0D130E0E0F0B0D0C06060815150F0E0E0F0D0B171B0F0C0C0C0C0C0C0C00000000 +130E1110000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E10 +0E100E100E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A060000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000120E120E120E120E120E120E120E130E130E130E130E130E110F +110F111011101110111011100E0E0E0E0E0E0E0E0E000F00182518000808090B140F1A11 +060B0B0F14090B090B0F0F0F0F0F0F0F0F0F0F0B0B1414140D18101011130F0E13120A0B +110D1412130E1311100F121018100F100B0B0B140F0F0E0F0D0F0E080F0F06080E06170F +0F0F0F0A0D090F0E140E0E0D0F0B0F141010110F1213120E0E0E0E0E0E0D0E0E0E0E0606 +06060F0F0F0F0F0F0F0F0F0F0F0D0F0F0F0D0F0F1818170F0F141713181414140F0F0F11 +14110F0D0D14170F0D0914140F14110F0F141010131A180F180B0B060614140E0F090F0B +0B0F0F0F09060B25100F100F0F0A0A0A0A131313121212060F0F0F0F0F0F0F0F0F0F0D06 +100D100D0B130F0F0E0F0F14140D0D0D1818180F130F0A100D110D110D0F0F09100E100E +1310130F0E0F0E0D060D070D0B120F120F130F110A110A100D0F090F09120F120F100D10 +0D0E13140F0F0C0F0C130F0F0D1C150F12090D1A080F09090F09100E110D110D0F0E0F0E +0F0E130F130F130F120F120F0A060A060A060A060B08110E0E0D06120F120F130F130F11 +0A100D0F09120F120F120F120F18140F0E07100E1717130F0B1814181418140F0E060F0F +1118181818050F0F0F1012150D151216061010110F10120A111014121013120E100F0F10 +15140A0F0F0C0F060F0F0E0B0F0F060E0E0F0E0C0F0F0C0F0E1414060F0F0F140F130E11 +100A0A0B1B1A14110F121010100E120F170F12121112141213120E110F0F141012111919 +1316101119110E0F0E0B0F0E130D0F0F0E0F110F0F0F0F0D0C0E140E0F0F15150F130E0D +140E0E0F0B0D0D06060816160F0E0E0F0E0B181C0F0D0D0D0D0D0D0D00000000130F1210 +000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E100E100E10 +0E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A06000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000130F130F130F130F130F130F130F130F130F130F130F130F120F120F1210 +12101210121012100F0E0F0E0F0E0F0E0F000F001B291B000A0A0B0C16111D14070C0C11 +160A0C0A0C111111111111111111110C0C1616160F1B12131315111015140B0C130F1714 +15101513121114121B1311130C0C0C16111110110E11100A1111070910071A111011110C +0E0B11101610100E110C1116121213111415141010101010100E10101010070707071110 +1010101011111111110F1111110F11111B1B1A1111161B151B161616111111141613110F +0F161A100F0B16161116141111161212151D1B111B0C0C0707161610110A110C0C111111 +0A070C2912111211110B0B0B0B15151514141407111111111111111111110F07120E130E +0C15111110101116160F0F0F1B1B1B1115110B120E130E130E11110A1210121015111511 +1011100F070F080F0C141114111510130C130C120E110B110B14111411130E130E0F1516 +11100E110D1511110F1F1811140A0F1D09100A0A100A1210130E130E1110111011101511 +15111511141114110B070B070B070B070C091310100F071411141115101510130C120E11 +0B14111411141114111B1611100812101B1A15100C1B161B161B161110071111131B1B1B +1B061111111214180F181419071213131113140B13131714121514101211111318160B11 +110E11071111100C111107101011100E10110E11101616071110111611150F13120B0B0C +1E1E161311141213130F14111A11141413141714151410131111161315131C1C15191213 +1C131011100D1110160E1111101113111011110E0D1017101110181811150F0F17101011 +0D0F0E0707091919111010110F0D1B20110F0F0F0F0F0F0F000000001610141200000000 +111111111111111111111111111111121012101210121012101210121012101210121012 +101210111011101110111011101110111011100B070B0700000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000015101510151015101510151015101610161016101610161014111411141214121412 +141214121110111011101110110011001D2C1D000A0A0B0D18121F15080D0D12180B0D0B +0D121212121212121212120D0D181818101D14141416121116160D0D1410181617111714 +141215141D1412140D0D0D18121211120F12110A1212090A11091C121212120C0F0B1211 +1811110F120D1218141414121617151111111111110F1111111109090909121212121212 +1212121212101212121012121D1D1C1212181D171D181818121312151815121010181C12 +100B18181218151313181414171F1C121D0D0D0808181811120A120D0D1212120B080D2C +14121412120D0D0D0D17171715151509121212121212121212121009140F140F0D161212 +11121218181010101D1D1D1216120D140F140F140F12120B141114111613161211121110 +091009100D161216121712140C140C140F120B120B15121512140F140F10171812120F12 +0E17121210221912150A101F09120A0A120A1411140F140F121112111211161216121612 +161216120D090D090D090D090D0A14111110091612161217121712140C140F120B151215 +12151215121D1812110914111D1C17120D1D181D181D181211081212151D1D1D1D061212 +12141619101A161A091414141214160D14141816131716111412121419180D12120F1209 +1212110D121209111113110F12120F12111818091212121812171014140D0D0D20201814 +12161414141016121C12161614151816171611141212181416151E1E171B14141E141112 +110E1211170F1313111214121212120F0E1118111312191A13171110181111120E100F09 +090A1B1B12111112100E1D22121010101010101000000000171216130000000012121212 +121212121212121212121214111411141114111411141114111411141114111411141112 +1112111211121112111211121112110D090D090000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000001712 +171217121712171217121712171217121712171217121512151216131613161316131613 +121112111211121112001200203120000B0B0D0F1A142217090F0F141A0C0F0C0F141414 +141414141414140F0F1A1A1A112016161619141219180D0F16121B181913191616141716 +201614160F0F0F1A141413141114130B1414090B13091F141314140E110D14131A131311 +140F141A1616161418191713131313131311131313130909090914131313131314141414 +141114141411141420201F14141A1F19201A1A1A141514171A171411111A1F13110D1A1A +141A1715151A161619221F14200F0F09091A1A13140C140F0F1414140C090F3116141614 +140D0D0D0D19191917171709141414141414141414141209161116110F1914141313141A +1A1111112020201419140D16111611161114140C16131613191519141314131209120912 +0F181418141913160E160E1611140D140D171417141611161112191A1413101410191414 +11251C14170C12220A130B0B130B16131611161114131413141319141914191418141814 +0D090D090D090D090F0B16131312091814181419131913160E1611140D17141714171417 +14201A14130A16131F1F19130F201A201A201A141309141417202020200714141416181C +111C181D091616171416180D16161B1815191813161414161C1A0D14141014091414130F +141409131314131013141014131A1A091413141A14191216160D0D0F24231A1614181616 +161218141F14181816181B181918131614141A1618172121191D161621171314130F1413 +1A111414131416141314141110131B1315131C1C151912121B1313140F121109090B1D1D +14131314120F20261411111111111111000000001A131815000000001414141414141414 +141414141414141613161316131613161316131613161316131613161316131413141314 +13141314131413141314130D090D09000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000191319131913 +19131913191319131A131A131A131A131A13171417141815181518151815181514131413 +1413141314001400213221000C0C0D0F1B152418090F0F151B0C0F0C0F15151515151515 +1515150F0F1B1B1B12211717171915131A190D0F17121C191A141A171714181721171417 +0F0F0F1B151514151115140C1515090B140920151415150E110D15141B141411150F151B +17171715191A181414141414141114141414090909091514141414141515151515121515 +1512151421212015151B201A211B1B1B151515181B171512121B2014120D1B1B151B1815 +151B17171A232015210F0F09091B1B14140C150F0F1515150C090F3217151715150D0D0D +0D1A1A1A18181809151515151515151515151309171117110F1A14141414151B1B121212 +212121151A150D17111711171115150C1714171419151A151415141209120A120F191519 +151A14170E170E1711140D140D1815181517111711131A1B15141115101A151512261D14 +180C12240B140C0C140C1714171117111514151415141A151A151A15191519150D090D09 +0D090D090F0B1714141209191519151A141A14170E1711140D1815181518151815211B14 +140A171420201A140F211B211B211B141409151518212121210715151517191D121D191E +091717171517190D17171C19151A1914161414171D1B0D14151115091514140F15150914 +1415141114151115131B1B091514151B151A1317170D0D0F25241B171419171717131915 +2014191917181C191A19141714141B17191822221A1E161722171414141015141A111515 +141417151415151210141C1415141D1D151A13121C14141510121109090B1E1E15141415 +131021271512121212121212000000001B14191600000000151515151515151515151515 +151515171417141714171417141714171417141714171417141714151415141514151415 +141514151415140D090D0900000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000001A141A141A141A141A14 +1A141A141B141B141B141B141B1418151815191619161916191619161414141414141414 +15001500253825000D0D0F111E18281B0A1111181E0D110D111818181818181818181811 +111E1E1E142519191A1D17151D1C10111A151F1C1D161D1A19171B19251917191111111E +181816171317160D17170A0D160A241716171710130F17161E1616131711171E19191A17 +1C1D1B16161616161613161616160A0A0A0A171616161616171717171814181818141817 +25252418181E241D251E1E1E1818181B1E1A1814141E2316140F1E1E181E1B18181E1919 +1D2824182511110A0A1E1E16170D1811111717180D0A11381917191717101010101D1D1D +1B1B1B0A18181818181818181818150A19131913111D17171616171E1E14141425252518 +1D171019131A131A1317180D191619161D181D17161716150A150B15111C171C171D161A +101A101913170F170F1B171B1719131913151D1E17171317121D1817142B20171B0D1528 +0C160D0D160D19161A131A131716171617161D171D171D171C171C17100A100A100A100A +110D1A1616150A1C171C171D161D161A101913170F1B171B171B171B17251E17160B1916 +24231D1611251E251E251E17160A18181B2525252508181818191C2014211C220A19191A +17191C101A191F1C181D1C1619171719201E10171713170A1717161117170A1616181613 +16171317161E1E0A1716171E171D151A1910101129291E1A171C191919151C1724171C1C +1A1B1F1C1D1C161A17171E191C1A26271D22191A261A1617161117161E13181816171A18 +1618171412161F1618162021181D15141F1616171114130A0A0D2222171616181511252B +1814141414141414000000001E161C180000000018181818181818181818181818181819 +161916191619161916191619161916191619161916191617161716171617161716171617 +161716100A100A0000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000001D161D161D161D161D161D161D16 +1E161E161E161E161E161B171B171C181C181C181C181C18171617161716171617001800 +2A402A000F0F1113221B2D1F0B13131B220F130F131B1B1B1B1B1B1B1B1B1B1313222222 +172A1D1D1D201B18212012131D17231F2119211D1D1A1F1D2A1D1A1D131313221B1B191A +161A190F1A1B0C0E190C291B191A1A1216111B19221919161B131B221D1D1D1B1F211F19 +191919191916191919190C0C0C0C1B19191919191B1B1B1B1B171B1B1B171B1A2A2A291B +1B222A212A2222221B1B1B1F221E1B1717222819171122221B221F1B1B221D1D212D291B +2A13130B0B2222191A0F1B13131A1A1B0F0B13401D1B1D1B1B121212122121211F1F1F0C +1B1B1B1B1B1B1B1B1B1B180C1D161D1613211A1A19191A22221717172A2A2A1B211A121D +161D161D161A1B0F1D191D19201B211B191B19170C170C17131F1B1F1B21191D121D121D +161A111A111F1B1F1B1D161D161821221A1A161A15211B1A1731251A1F0F172D0E190F0F +190F1D191D161D161B191B191B19211A211A211A201B201B120C120C120C120C130E1D19 +19170C1F1B1F1B211921191D121D161A111F1B1F1B1F1B1F1A2A221A190D1D192A282119 +132A222A222A221A190B1B1B1E2A2A2A2A091B1B1B1D2025172520260C1D1D1E1B1D2012 +1D1D231F1B2120191C1A1A1D2522121A1A161B0C1B1A19131B1A0C19191B1915191A151B +1923220C1B191B221B21181D1D1212132F2E221D1A201D1D1D181F1B291A20201D1F2320 +2120191D1A1A221D201E2B2C21271D1D2B1E191A19141A1922161B1B191A1D1B191B1A16 +151923191B1925251B2118172319191B1417160C0C0E26261B19191B18142A311B171717 +17171717000000002219201C000000001B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1D191D191D +191D191D191D191D191D191D191D191D191D191B191B191B191B191B191B191B191B1912 +0C120C000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000211921192119211921192119211922192219 +2219221922191F1B1F1B201C201C201C201C201C1A191A191A191A191A001B002E462E00 +10101215261D32210C15151D26111511151D1D1D1D1D1D1D1D1D1D1515262626192E1F20 +20231D1A24231215201A2722241C24201F1C221F2D201C20151515261D1D1C1D181D1B10 +1D1D0C101B0C2D1D1C1D1D1418121D1B261B1B181D151D261F1F201D2224221C1C1C1C1C +1C181B1B1B1B0C0C0C0C1D1C1C1C1C1C1D1D1D1D1D191D1D1D191D1D2E2E2D1D1D262E24 +2E2626261D1E1D2126211D1919262C1C191226261D26211E1E261F1F24312D1D2E15150C +0C26261B1C111D15151D1D1D110C15461F1D1F1D1D121212122424242222220C1D1D1D1D +1D1D1D1D1D1D1A0C1F18201815241C1C1B1C1D26261919192E2E2E1D241D121F18201820 +181D1D111F1C1F1C231E241D1B1D1B1A0C1A0E1A15221D221D241C201420141F181C121C +12221D221D201820181A24261D1C181D17241D1D1936281C22111A320F1C10101C101F1C +201820181D1B1D1B1D1B241D241D241D231D231D120C120C120C120C1510201B1B1A0C22 +1D221D241C241C20141F181C12221D221D221D221D2D261C1B0E1F1C2E2C241C152D262D +262D261C1B0C1D1D212E2E2E2E0A1D1D1D1F23281929232A0C1F20201D20231220202722 +1E24231C1F1C1C202826121C1D181D0C1D1D1B151D1D0C1B1B1D1B171C1D171D1B26250C +1D1C1D251D241A201F121215333326201C231F20201A221D2D1C23232022272324231C20 +1C1C262023212F30242A1F2030201C1C1B161D1B25181D1D1B1D201D1C1D1D19171B271B +1E1C28291D251A19271C1B1D1619180C0C102A2A1D1B1B1D1A162E361D19191919191919 +00000000251C231E000000001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1F1C1F1C1F1C1F1C1F +1C1F1C1F1C1F1C1F1C1F1C1F1C1F1C1D1B1D1B1D1B1D1B1D1B1D1B1D1B1D1B120C120C00 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000241C241C241C241C241C241C241C251C251C251C251C +251C221D221D231E231E231E231E231E1C1B1C1B1C1B1C1B1D001D00324C320012121417 +292036240D17172029121712172020202020202020202017172929291B3222222327201D +27261517231C2A25271E2723221F252231221F221717172920201E1F1A1F1E121F200F11 +1E0F31201E1F1F151A14201E291E1E1A20172029222223202527251E1E1E1E1E1E1A1E1E +1E1E0F0F0F0F201E1E1E1E1E20202020201B2020201B201F323231202029322732292929 +202020242923201B1B29301E1B1429292029242020292222273531203217170D0D29291E +1F122017171F1F20120D174C2220222020151515152727272525250F2020202020202020 +20201C0F221A221A17271F1F1E1E1F29291B1B1B32323220271F15221A231A231A1F2012 +221E221E272027201E201E1C0F1C0F1C1725202520271E23152315221A1F141F14252025 +20221A221A1C27291F1E1A201928201F1B3A2C1F25121C36101E12121E12221E231A231A +201E201E201E271F271F271F26202620150F150F150F150F1711231E1E1C0F2520252027 +1E271E2315221A1F14252025202520252031291F1E0F221E3230271E173129312931291F +1E0D202024323232320B20202022262C1B2C262D0F2222232022261523222A252027261E +221F1F222C29151F1F1A200F201F1E17201F0F1E1E201E191E1F19201E29290F201E2029 +20281C2322151517383729231F262222221C2520311F262623252A2627261E231F1F2922 +26243434272E222334231E1F1E181F1E281A20201E1F23201E201F1B191E2A1E201E2C2C +20281D1B2A1E1E20181B1A0F0F112E2E201E1E201C18323B201B1B1B1B1B1B1B00000000 +281E262100000000202020202020202020202020202020221E221E221E221E221E221E22 +1E221E221E221E221E221E201E201E201E201E201E201E201E201E150F150F0000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000271E271E271E271E271E271E271E281E281E281E281E281E2520 +2520262126212621262126211F1E1F1E1F1E1F1E1F00200036523600131315192C223A27 +0F1919222C141914192222222222222222222219192C2C2C1D362525262A221F2A291719 +251E2E282B212B2625212825352521251919192C222220221C22201322220F13200F3522 +212222171C1522202C20201C2219222C25252622282B282020202020201C202020200F0F +0F0F22212121212122222222221D2222221D222136363522222C362B362C2C2C22232227 +2C26221D1D2C34211D152C2C222C2723232C25252B3A35223619190F0F2C2C2021142219 +19222222140F19522522252222171717172B2B2B2828280F222222222222222222221E0F +251C251C192A21212021222C2C1D1D1D363636222A2217251C261C261C22221425202520 +2A232A222022201E0F1E101E19282228222B2126172617251C2115211528222822251C25 +1C1F2B2C22211C221B2B22221D3F2F2127141E3A1121131321132520261C261C22202220 +22202A222A222A2229222922170F170F170F170F19132520201E0F282228222B212B2126 +17251C21152822282228222822352C212010252036342B2119352C352C352C21200F2222 +27363636360B22222225292F1D3029310F2525262225291725252E28232B292124212125 +2F2C1721221C220F2221201922220F202023201B21221B22202C2C0F2221222C222B1F26 +251717193C3C2C2521292525251F28223521292925282E292B29212621212C2529263838 +2A32252638262021201922202B1C2323202226222122221D1B202D2023212F30232B1F1E +2D202022191E1C0F0F133131222020221F19363F221D1D1D1D1D1D1D000000002C212924 +000000002222222222222222222222222222222520252025202520252025202520252025 +2025202520252022202220222022202220222022202220170F170F000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000002B212B212B212B212B212B212B212C212C212C212C212C21282228222924 +29242924292429242120212021202120220022003A583A001414171B2F253E2A101A1A25 +2F151A151A252525252525252525251A1A2F2F2F203A2828292D25212D2C181A2820312B +2E232E2828242A28392824281A1A1A2F252523241E24231424250F14220F382523242419 +1E1725222F22221E251A252F282829252B2E2A2323232323231E232323230F0F0F0F2523 +2323232325252525251F2525252025243A3A3925252F392E3A2F2F2F2525252A2F292520 +202F372320172F2F252F2A25252F28282E3E39253A1B1B10102F2F222415251A1A242425 +15101B582825282525181818182E2E2E2A2A2A0F25252525252525252525210F281E281E +1A2D23242223242F2F1F1F1F3A3A3A252D2418281E291E291E242515282328232D262D25 +232523200F2011201B2B252B252E2328192819281E241724172A252A25281E281E212E30 +24231E251D2E2524204333242A15203E1323151523152823291E291E2523252325232D24 +2D242D242C252C25180F180F180F180F1A14282222200F2B252B252E232E232819281E24 +172A252A252A252A25392F242211282339372E231A392F392F392F24221025252A3A3A3A +3A0C252525282C321F332C350F28282925282C182828312B262E2C2327242428332F1824 +241E250F2524221B25240F222225221D23241D2522302F0F2523252F252E21292818181A +41402F28242C282828212B2538242C2C282B312C2E2C2329242430282C293C3D2D352729 +3C292324231B24232E1E2525222428252325241F1D22312225233333252E212031232325 +1B201E0F0F14353525222225211B3A44251F1F1F1F1F1F1F000000002F232C2600000000 +252525252525252525252525252525282328232823282328232823282328232823282328 +23282325232523252325232523252325232523180F180F00000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00002E232E232E232E232E232E232E232F232F232F232F232F232A252A252C262C262C26 +2C262C262422242224222422240025004366430018181A1F372B4831121E1E2B37181E18 +1E2B2B2B2B2B2B2B2B2B2B1E1E37373725432E2E2F342A2734321D1E2E2538323528352F +2E29312E422E292E1E1E1E372B2B282A232A28182A2A12172812412A292A2A1D231A2A28 +372828232B1E2B372E2E2F2A3235312828282828282328282828121212122A2929292929 +2A2A2A2A2B242B2B2B252B2A4343412B2B374335433737372B2B2B31372F2B2525374029 +251A37372B37312B2B372E2E3548422B431F1F121237372829182B1E1E2A2A2B18121F66 +2E2A2E2A2A1D1D1D1D353535313131122B2B2B2B2B2B2B2B2B2B26122E232E231E342929 +28292A37372424244343432B342A1D2E232F232F232A2B182E282E28342B342A282A2825 +122514251F322A322A35292F1D2F1D2E23291A291A312A312A2E232E232635372A29222A +21352B2A254E3A29311825481628181828182E282F232F232A282A282A28342A342A342A +322A322A1D121D121D121D121E172E28282512322A322A352935292F1D2E23291A312A31 +2A312A312A42372928142E28434035291E4237423742372928122B2B30434343430E2B2B +2B2E323A243B323D122E2E2F2A2E321D2E2E38322B3532282D29292E3A371D292A222A12 +2A2A281F2A2A1228282B2822292A222A283737122A292A372A35262F2E1D1D1E4B4A372E +29322E2E2E26322A412932322E3138323532282F2929372E33304546343E2E2F452F2829 +28202A2835232B2B282A2F2B292B2A24212838282B293B3B2B3526253828282A20252312 +12173D3D2A28282B2620434F2B24242424242424000000003629332C000000002B2B2B2B +2B2B2B2B2B2B2B2B2B2B2B2E282E282E282E282E282E282E282E282E282E282E282E282A +282A282A282A282A282A282A282A281D121D120000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000003529 +35293529352935293529352936293629362936293629312A312A332C332C332C332C332C +29282928292829282A002B004B724B001A1A1E223D305137142222303D1B221B22303030 +3030303030303022223D3D3D294B3333343A2F2B3A381F22342A3F383B2D3B34332E3733 +4A332E332222223D30302D2F272F2D1A2F2F151A2C15492F2E2F2F20271E2F2C3D2C2C27 +3022303D3333342F383B372D2D2D2D2D2D272D2D2D2D151515152F2E2E2E2E2E2F2F2F2F +302930303029302F4B4B4930303D4A3B4B3D3D3D303030373D353029293D482E291E3D3D +303D3730303D33333B504A304B222214143D3D2C2E1B3022222F2F301B142272332F332F +2F1F1F1F1F3B3B3B37373715303030303030303030302A1533273327223A2E2E2C2D2F3D +3D2929294B4B4B303A2F1F3327342734272F301B332D332D3A313A2F2D2F2D2A152A162A +22382F382F3B2E3420342033272E1E2E1E372F372F332733272A3B3D2F2E262F253B302F +2957412E371B2A51182D1B1B2D1B332D342734272F2D2F2D2F2D3A2F3A2F3A2F382F382F +1F151F151F151F15221A342C2C2A15382F382F3B2E3B2E342033272E1E372F372F372F37 +2F4A3D2E2C17332D4A483B2E224A3D4A3D4A3D2E2C143030364B4B4B4B10303030333841 +28423944153333352F33381F34333F38313B382D322E2E33413D1F2E2F262F152F2F2C22 +2F2F152C2C302C262E2F262F2C3E3D152F2E2F3D2F3B2A35331F1F2254533D342E383333 +332A382F492E383834373F383B382D342E2E3D3339354D4E3B4533354E352D2E2D232F2D +3C2730302C2F34302E302F28252C3F2C302D4243303C2B293F2D2D2F23292715151A4545 +2F2C2C302A234B583029292929292929000000003D2E3931000000003030303030303030 +30303030303030332D332D332D332D332D332D332D332D332D332D332D332D2F2D2F2D2F +2D2F2D2F2D2F2D2F2D2F2D1F151F15000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000003B2E3B2E3B2E +3B2E3B2E3B2E3B2E3D2E3D2E3D2E3D2E3D2E372F372F393139313931393139312E2C2E2C +2E2C2E2C2F003000537E53001D1D21264435593C16262635441E261E2635353535353535 +35353526264444442D5339393A403430403E22263A2E463E4132413A39333D3952393339 +26262644353532342B34311D3435181D31185135323434232B2135314431312C35263544 +39393A343E413D3232323232322B313131311818181835323232323235353535352D3535 +352D35335353513535445241534444443535353C443B352D2D444F322D21444435443C36 +36443939415951355326261616444431331E3526263434351E16267E3934393434222222 +224141413D3D3D18353535353535353535352F18392B392C2640333331323444442D2D2D +53535335403422392B3A2B3A2B34351E39323932403640343134312E182E192E263E353E +3541323A233A23392B332133213D353D35392C392C2F414434322B34294235342D614833 +3D1E2E591B321D1D321D39323A2B3A2B3431343134314034403440343E353E3522182218 +22182218261D3A31312E183E353E35413241323A23392B33213D353D353D353D34524433 +31193932524F41322652445244524433311635353C5353535312353535393E482D493F4B +1839393A34393E223A39463E36413E323833333948442233342B35183433312635341831 +3135312A32342A34314444183432344434422F3A392222265D5C443A333E3939392F3E34 +51333E3E3A3D463E413E323A333344393F3B5657414C393A563B323331273431422C3535 +31343A353235342C293146313632494A35422F2D46323135272D2B18181D4C4C35313135 +2F275361352D2D2D2D2D2D2D0000000043323F3700000000353535353535353535353535 +353535393239323932393239323932393239323932393239323932343134313431343134 +313431343134312218221800000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000041324132413241324132 +41324132433243324332433243323D353D353F373F373F373F373F373331333133313331 +340035005C8C5C002020242A4B3A6343192A2A3A4B212A212A3A3A3A3A3A3A3A3A3A3A2A +2A4B4B4B325C3F3F40473A354745272A40334E45483748403F39433F5B3F393F2A2A2A4B +3A3A373930393720393A18203618593A3839392730243A364B3636303A2A3A4B3F3F403A +4548433737373737373037373737181818183A38383838383A3A3A3A3A323A3A3A323A39 +5C5C5A3A3A4B5B485C4B4B4B3A3B3A434B413A32324B583832244B4B3A4B433B3B4B3F3F +48625A3A5C2A2A19194B4B3639213A2A2A3A3A3A21192A8C3F3A3F3A3A27272727484848 +434343183A3A3A3A3A3A3A3A3A3A34183F303F302A4738393638394B4B3232325C5C5C3A +4739273F3040304030393A213F373F37473C473A373A373318331B332A453A453A483840 +2740273F3039243924433A433A3F303F3034484B39382F3A2E493A39326B503843213363 +1E38212138213F37403040303A373A373A37473947394739453A453A2718271827182718 +2A204036363318453A453A4838483840273F303924433A433A433A433A5B4B39361C3F37 +5B5848382A5B4B5B4B5B4B3936193A3A425C5C5C5C133A3A3A3F455032514554183F3F41 +3A3F4527403F4E453C4845373E39393F504B2739392F3A183A39362A3A391836363B362E +383A2F3A364C4B183A383A4B3A4934403F27272A67654B4039453F3F3F34453A5A394545 +40444E454845374039394B3F46425F6048553F415F413739372B393749303B3B3639403B +383B39312E364D363B3851523B4935324D37373A2B323018182054543A36363B342B5C6C +3B32323232323232000000004A38463D000000003A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3F +373F373F373F373F373F373F373F373F373F373F373F373A373A373A373A373A373A373A +373A37271827180000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000004838483848384838483848384838 +4A384A384A384A384A38433A433A463D463D463D463D463D393639363936393639003A00 +649864002323272E52406C491B2D2D4052242D242D404040404040404040402D2D525252 +37644445464D3F394E4B2A2D4538544B4F3C4F46443E494463453E452D2D2D5240403C3E +343E3C233E3F1B223B1B613F3D3E3E2B34273F3B523B3B353F2D3F524444463F4B4F493C +3C3C3C3C3C343C3C3C3C1B1B1B1B3F3D3D3D3D3D3F3F3F3F403640404037403E64646240 +4052634F6452525240404049524740373752603D3727525240524940405244444F6B6240 +642E2E1B1B52523B3E24402D2D3F3F40241B2E98443F443F3F2A2A2A2A4F4F4F4949491B +40404040404040404040381B443445352D4E3D3E3B3D3E5252363636646464404E3E2A44 +34463446343E4024443C443C4D414E3F3C3F3C381B381E382E4B3F4B3F4F3D462B462B44 +343E273E27493F493F45354535394F523E3D333F324F403E3774573D4924386C203C2323 +3C23443C463446343F3C3F3C3F3C4E3E4E3E4E3E4B3F4B3F2A1B2A1B2A1B2A1B2D22453B +3B381B4B3F4B3F4F3D4F3D462B44343E27493F493F493F493F63523E3B1E443C63604F3D +2D6352635263523E3B1B4040486464646415404040444B5736584B5B1B4445463F454B2A +4545544B414F4B3C433E3E4557522A3E3E333F1B3F3E3B2E3F3E1B3B3B403B323D3F333F +3B52511B3F3D3F513F4F3946442A2A2D706E52453E4B444545394B3F613E4B4B4549544B +4F4B3C463E3E52454C4767694E5C444667473C3D3B2F3E3C503440403B3E46403D403E35 +323B543B403D5859404F3937543C3C3F2F37341B1B225B5B3F3B3B40392F647540363636 +3636363600000000513D4C4200000000404040404040404040404040404040443C443C44 +3C443C443C443C443C443C443C443C443C443C3F3C3F3C3F3C3F3C3F3C3F3C3F3C3F3C2A +1B2A1B000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000004F3D4F3D4F3D4F3D4F3D4F3D4F3D513D513D +513D513D513D493F493F4C424C424C424C424C423E3B3E3B3E3B3E3B3E00400000020100 +000007000600000300070014B706020400060204002FCDDDCD002FCDDDCD313021112111 +2521112101000600FA800500FB000600FA0080050000000201230000020305D100030007 +0027401703030202075505080F0901005D042B035D0F051F0502052F5DE4FDE45D003FED +332F3F3130010323031323353302031AAA1CD6CCCC05D1FBC90437FA2FD3000200A803D1 +0304061400030007002640150206060307010F09400902032C0040000100042C072FED33 +5D2FED5D003F3C332F3C3130010323032303230303042B842BA82B842B0614FDBD0243FD +BD024300000200C3000005C905D1001B001F00B1407140215609740570097B137B167B17 +7B1A080A091E1D160F1501671501151E0C0F1013140B1407081F1C17001801681801181E +0502011A06190662191462700B010B03110B111903040D001B011B1B0D171A011D0410B5 +131E020509040CB50F070F1318040B00140114030F0B4F0B020B08003F5D3F5D1217392F +ED17392FED1739012F332F5D1217392F2F2F5DE42FE4313087C0C0C0C0FD5D71C0C0C0C0 +C08710C0C0C0C0FD5D71C0C0C0C0C0015D01210321152103231321032313213521132135 +2113330321133303210521032105C9FEB35C0134FEA9688168FEF2688168FED6014D5CFE +CC0157698169010E698169012AFE35FEEE5E011203A4FE8887FE5B01A5FE5B01A5870178 +8701A6FE5A01A6FE5A85FE840003009BFE9704880628002C0033003A00BC408D7D087E16 +70197620702C7A36060E16012B1B16122B230D350D3C163C24352B430D4A164C24432B5A +08532053335A356B0865206529632B6A30643A171D40090B371D382E11221D2226471B18 +312D1227373400030A067F1E011E050A11470A05060F3C1F3C0221210334207F00010031 +201818063F094F09020900112D1B1E263706031E0930064006700603062F5D33ED173932 +2F5D12392FED2F5DED12392F5D002F3333ED2F2F2F5D121739ED33332F1139392F2B3130 +5D5D011406071123112E012735331E01171E0117112E01272E01353436371133111E0117 +15232E0127111E01171E0125110E0115141601342627113E010488F2C47684E855101362 +2E348B4F28441DA38EE9D17665D4480E4BA3851E461A95A3FDD46B926C02007584788101 +7C9BCD13FE960165013127C60E351113210301B1080F0829A57994CC110110FEF2022C1D +C42E4709FE51051105209CE8019D08655A5B5CFE585E5719FE620C6200050095FFE30807 +05ED000B000F001B00270033009C40720908060A0918061A0F351808170A1818171A2908 +260A2918261A460D480F4035560D580F680E13791F7625792B76310425512F034F030203 +031F5109020F030E082B51201940190219193151130A4F0C400E020C0E2E2A0016011616 +282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D123939ED33 +2F5DED2F2F5D003FED332F5DED3F3F3FED332F5DED5D3130015D01140623222635343633 +321625012309011406232226353436333216013426232206151416333236013426232206 +1514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6BAFABB59 +64665858666459049359646658586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADC +DDE0DADA01B8AC8888ADAD8787FE17AC8888ADAD878700030073FFE1061305F0000B0018 +004500E1406F090F190F3C0C3015301D352D3E3D4F1A471D4F44791C0B6A25603F7B0576 +087B0F761D7A25703E703F090508062A06371408161D142A1437153F290C2A1D26373008 +300A4008400A490C41144F1C431D46204C21412D413C5108590D5B25690566086B0F601D +1E3F0C161D20231903B8FFC0403B12173703AA190D2C093E05233502163F230A1E082C0D +3E032F00143806142F3F0C4513201D2F38041A26001E011E1E45140D1A011A1A13152673 +4610F6ED332F5DED332F5D11121739111239392FED2FED121739003F3FED3F121739ED2B +2F12393912393931305D5D015D013426232206151416173E0113010E01070E0115141633 +323601151406070123270E01232224353436373E01372E01353436373E01333216151406 +070E0107013E0137362635031871585C744F836265C2FE221F3E1F1C24AB9D5DB7016B32 +3C017AF6E573F07FD0FEED34232368356E61353532A161ADD6181D20765E01730E0E0102 +0104A75F6D7B594B744F2387FD0001D20F312A276E4592B35B02AE6060F06DFE90E08E71 +F3C55C86312F531F48926F437932303CAF862C6F2C315A20FE96286034388A30000100A4 +03D10182061400030015400A020203010F0501002C032FED5D003F332F31300103230301 +822B882B0614FDBD0243000100B5FE64030F061400150048403709010907190119072803 +28054F01480348054F075F015F076F016F077F01780278067F07120701010C7A04010830 +000100000F1F04881610F4ED332F5D3C5D003F3F3130015D012326021110123733150E01 +070602151412171E0117030FE5B1C4C4B1E551933F3C4B493E3C9A4DFE64CB01E0012D01 +2D01E0CB0A49BF7F7BFED8A4ABFEE4807BC7450000010093FE6402ED06140015004E403D +060306131503151326012603261326154701400340134715500350136003601379007602 +700370137614151201040C750001123F040104040B1F00921710F6ED332F5D3C5D003F3F +3130015D0110020723353E01373612353402272E01273533161202EDC4B1E54D9B3B3E49 +4A3D3F9351E5B1C4023CFED3FE20CB0A45C77B80011CABA401287B7FBF490ACBFE200001 +00A70276047106140011009040094F1301114009103708B8FFC040580910375B025B0554 +0B540E6B026B05640B640E7B027B05730B730E0C01060F0A0B0E08110502060C064F0450 +0402040A0F0C01040C010F131F130200110D4010011008070C4F090109100E020304050B +060D2809700C010C2F5D33ED1739322F5D1239392F5D1239395D003F335D332F5D331217 +392F332F3331305D012B2B5D01072513231305272D013705033303251705047140FE9606 +8105FE9741017DFE8341016A068107016B40FE8403776ED5FE980168D66ECFCF6ED50167 +FE99D46ECD00000100D2001B05BA04FD000B0039402303AC01045408AC0A0F070107400D +01300D400D0200AB0A800101012A05AB07400401042F5D3CE4FD5D3CE45D5D002F5D3CE4 +FD3CE4313001211123112135211133112105BAFDDFA6FDDF0221A60221023CFDDF0221A0 +0221FDDF00010093FE8E023F011D0003003540261A012A012B0235003902450048025500 +590264007400C5030C0202035604000004021A0202022F5D332F0010F4322F3130015D09 +012313023FFEE692AE011DFD71028F00000100990231030902E600030020401401420F02 +01020F054F004F055F005F05050000022F332F5D002F5DED3130012135210309FD900270 +0231B500000100FD000001EC011D00030016400C02560108002D2F013F0102012F5DED00 +3FED31302123113301ECEFEF011D0001FFE2FED0035C0614000300364025030100050116 +01250138004900440156016701770186010A011202032F02010200010000022F332F003F +2F5D31300187ED5D87C009012301035CFD33AD02CA0614F8BC07440000020089FFE1048F +05EF000B0023004140303601390B340C3B123B18341E4501490B440C4B124B18441E0C15 +4909022149030A0F21009E250F251F25021B2106982410F6ED5D10F6ED003FED3FED3130 +5D011002212002111012212012013E01353426272E01232206070E01151416171E013332 +36048FFBFEF8FEF4F7FA0109010CF7FEF92319192423795F5E7B24221916242179645E7C +02E9FE6FFE89017C018A018D017BFE7FFCB551DB9A98E04E4D4E4E4F4AEE8E9CD2534E52 +4E00000101160000043C05D6000F003A4023054606060C030E034801080F111F11020502 +1F0F010F0F0C0E20023F036F03700303032F5D33ED39322F5D2F335D003FFD323F332FED +3130290135211121353236373E0137331121043CFCDA0136FECA3F90252E35049B013098 +03E6881514194D41FAC2000100A10000049105F000200097407B501F601F020503061116 +03151124113B05380D350E3F1D3F1E391F4B05480D450E4F1D4F1E491F5F035D045D055B +0956115F195E1B5D1C5F1D5F1E6A036406651162156F1E700274117F1A7F1C7F1E25000F +100F2D082F1C300F400F060F0F0B4A1302021F4A01081F0208211616209E220F221F2202 +101002992110F6322F5D10F6322FED1239003FFD323FED332F5D31305D015D2901353E01 +373E013534262322060723353E01333204151406070E01070E0107210491FC1069D35BC0 +8E99895BD4650A47ED6FE501042B2A27694B6BE4630321D15AB459BADB7F74834042D223 +3ADDBD5593423E784969C554000100A7FFE1047C05F0003D009540700B0B052F1A0B152F +290B262F293C3C0B35143122342F4A0B45144322432F56015905590B552F6A0B662F6A3C +780B762F74357B3C1A343A443A023B3A1E491F012D112D022D2D294A1F0931020F0D1F0D +020D0D114A090A2321371E2E1621032E1E3A37040C03A03F0F3F1F3F020C9A3E10E65D10 +E611173910ED2F2F2FED003FED332F5D3F1239ED332F5D2FFD39395D31305D011E011514 +06070E012322262735331E01333236373E01353426272E012B0135333236353426272E01 +2322060723353E01333216171E0115140607151E01040E303E4A434BCB797CF04D0F55E6 +6B3F8E2C2E2D332D2D804A5A4698B52E292B623E5FD65F0A47ED6F6DA643484AAF77307C +02CD2B826766AA3F46433B23D1384A2A292C6A5150691E1F17A67F7A36511A1A14443ED1 +233B282C30885B7CB9180E0833000002004D000004B305D1000A000D00684041040D140D +240D340D440D700D060C0D480606070C0607090D4901050503070303083F0A4F0A020A0F +0F1F0F02070C04200A090D064F060101010F061F063F0603062F5D332F5D12393333ED39 +395D2F5D003F3F12392F3CFD321239393130018710FD04C0015D01231123112135013311 +3321110104B3DDC0FD3702D1B8DDFE63FDBF01A3FE5D01A3E60348FC7202A0FD60000001 +00BBFFE1048505D1002A0070404E0A081A082B083D0835113D164B0844115A0854296A08 +7A080C1D1D1A490F251F2540250325214A25061E020F0A1F0A020A0A0E4A060A2022204F +1D011D142100201D09009F2C0F2C1F2C02099B2B10E65D10E611393910ED2F5DED2F003F +ED332F5D3F1239ED2F5DFD322F31305D011406070E012322262735331E01333236373E01 +353426272E012322060711211521113E01333216171E0104854C4248C7837AE24E0E52DC +6A4785342C2D352F34955C58A33B0380FD412B5A2179B64C505801D968BE41464B3324D3 +344928322B784F4D6A20261F180C02FFAFFE740404293437AE0000020089FFE104A705ED +0022003700644044060D160D3925333133374925423143375F01560D5020502165217531 +0E1A0329491D1313174A1D030F023549030A1A2C2F122321001209009C390F391F39022F +2109983810F6ED5D10E6113910ED2F123939003FED3F1239FD322F2FED123931305D0114 +002322262726023534123736243332161715232E01232200073E01333216171E01073426 +272E01232206070E01151416171E0133323604A7FED5D96EB445565D555D580116B93B50 +290A1C713BD7FF001554A36B5F914C5859CB373F2E703D55924D020241392E6B3F91A601 +E3E3FEE14443530112C1C6013277717F0A0DBF0F1BFEF3E5333523353DBA8D5D7A2D2014 +282A16291F9EB7352C29B1000001009A0000049505D10006004F403209010A0224014801 +4B0258027903070301000120020203000002034A050302080F081F087B02030300020204 +0F00010000042F332F5D12392F12395D003F3FFD11392F3130018710ED87C0015D090123 +012135210495FD5ED602CDFCB003FB04F2FB0E0522AF0003007AFFDE049C05F300190028 +0037009440702D2B3415332234273433441541224427453350155B195A1B5A1F54225F2B +592C5F31543354376008620E6212621960236027760E76127B2C86121DA926A62F022616 +0A2F04031D4710023548030A1A200013011313002F0A0D292100162620009D390F391F39 +0220210D0D322106973810F6ED332FED5D10E411393910ED11393911332F71ED003FED3F +ED1217395D31305D01140023222435343637352E0135342433320415140607151E010334 +26232206151416171E01173E01133426272E01270E01151416333236049CFED3E4F2FEE1 +908378730114D5DF010A7E7A8C94EDA5807EA15152258B42634C1F51762F705D5A6DBA8F +92AF019FC1FF00FAC37CC93B06409872A8E0D6A565C337063CB0024F6B7F786648692912 +3A13428EFD735C6F3816262231A86A87B09600020071FFE3048F05EF0022003700644045 +0804190429043C253C2B352E4C254C2B432E58045F175D18521B70017B250F111D324914 +294914061D020A0A0E4A060A351109232100091A009E390F391F39022C211A963810F6ED +5D10E6113910ED2F3939003FFD322F3F1239ED2FED123931305D01140207060423222627 +35331E01333212370E01232226272E01353400333216171612073426272E012322061514 +16171E01333236373E01048F595A5BFEEEB9345C240A1D6A41DDFB145DA4615C954B5859 +012CD86CB845555CCA40382F6C3F90A736402D6C424EA04601030342C3FEC270727C0B0C +BF0F1B0109E9383024343DBC83E4011E434353FEFBA49BBC342D27B4A35F782D1F152A28 +15290002015A00000249045D00030007001E4010015602050656050807002D0600010101 +2F5D3CFD3C003FED3FED313001231133112311330249EFEFEFEF0340011DFBA3011D0002 +00E6FE8E0292045D00030007004C40370A050A061A051A062A052B063504390645044806 +5504590664047404C5070F01560205060607560806063F044F04020404002D000101012F +5DFD322F5D332F0010F4322F3FED3130015D01231133130123130249EFEF49FEE692AE03 +40011DFCC0FD71028F00000100FE004D058004CB0006005E401073050105045403020306 +540001002C00B8FFE240260A1837031E0A1837031F002F0002030F000100400801300840 +080204050100004001500102012F5D332F1239395D5D002F5D335D2F2B2B31304B535887 +10FD8710FD05C059015D250135011509010580FB7E0482FC72038E4D02017C0201B4FE75 +FE75000200F5016A059703AE00030007003540200554060154060F020102400901300940 +09020405012F004000020000400101012F5D332F5D1239395D5D002F5D33ED2FED313001 +213521112135210597FB5E04A2FB5E04A2030EA0FDBCA0000001010C004D058E04CB0006 +006040107C030103045405050602540101002C01B8FFE240280A1837051E0A1837051F01 +2F0102050F010101400801300840080203050100002F013001400103012F5D332F123939 +5D5D002F5D335D2F2B2B31304B53588710FD8710FD05C059015D09013509013501058EFB +7E038EFC720482024EFDFFB4018B018BB4FDFF00000200A0000003ED05EF001C00200069 +40470F221F2224140335184F024F034F0544185C0554186904691064187418741C0C0870 +090109061A1E161612341A02081F551E08202B1F1F061F7F0901090F1509172000010000 +172F332F5D1239ED2F5DED332FED003FED333FFD322F111239395D2F31305D015D011406 +070E01071523113E01373E013534262322060723353E013332160123353303ED46393892 +52B34197303A4099796CC1380A46D760D7F9FE75CCCC047362993B39642FE1013125582D +346F56716F4423CC1B2BD1FAE2D3000200B0FF1E074E05EF0042004F00D640A206020F04 +0B050A090F1B0E1C0F3F0F4016021F041C051F1B1F1C142214271F3F1F4125022C042C05 +2F1B2F1C242220272F3F2F414740444856481D0A05052759496E09650D691A6821652766 +3F664174167B1B70277439743B0F120511081247520E1440151B371404044D53082D2D2A +510E083D311E51313D020F2D012D051143122D144A123F0B010B0F512051021829140B37 +0F0020007F000300002429376B5010F6ED332F5D123939ED5D2F5DED2F33FD32322F5D00 +3F33ED2F123939ED332F2FED332FCD2B2FED331239392F31305D015D0114020721270E01 +23222635341233321617353311333E013534022726242322040706021514121716043332 +3637150E0123222427260235341237362433320417161201112E01232206151416333236 +074E514BFE481B4A8858A8C9F6AB4970419FF32A2B5B5858FEFCA5A0FEF75F606D685F63 +010A9D56B75461A859BAFEC2727380867474013EB5C401346A6A71FD8F3F64398192747B +438602978BFEFC6B743C40FEE4E3010E212130FCB64BE159A4010C606067746262FEEF9A +A5FEEF61656716188E150F7F72730142C3B9013F7575867C7070FEC5FE4002061D19B4A6 +A3A73E000002001A0000055E05D10007000A009840694009014A0645070209090A080287 +01010114000700090A0387040104140505067C067307020334300A400A700A030A090A06 +03017A050105080F0C0106070903050C002400390042005A006A0074000700006E0C0F0C +010A052B0536054D05550565057B050705640B10E65D5D10F62F5D1217395D003F5D3C3F +39392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D005D2123032103230121 +130901055ED392FD7C92C9021E01087CFEFBFEFA019FFE6105D1FC7802DBFD25000300C8 +0000052B05D100150024003300524033050C150C270C550256157F190612112C341E1E07 +1D3408032D3407081615122C0F0F0725150071350F354035021E2C14076C3410F6FD325D +10F6ED12392F1239ED003FED3FED12392FED39393130015D011406070E01232111213216 +171E0115140607151E01013426272E012B0111213236373E01133426272E012321112132 +36373E01052B544754C99BFDF001B9A3A24A524A6C5A97AEFEB324282F8663EC01005D6E +2F2F277F3647308962FEC9010682A635383401CA6FAA37423805D118262B875E6A952D08 +1FCB0204364A171B0DFE52131E1E5FFD9A5A6A25190FFDD61B24276400010073FFE50546 +05EC002A0061404A05010D09061416011B0914152515361543145B08580A580E5B105B28 +600361147002760F70141316161A3412022A2A2634060A1600712C0F2C010F2C1F2C2F2C +3F2C6F2C0520150C682B10F6ED5D5D10F63C003FED332F3FED332F3130015D250E01070E +012322242726023534123736243332161715232E01232206070E01151416171E01333236 +373305463759483D8F56A2FEF762606C68625F010DA478EF920F7BF28A71B547454D5543 +46BB688FFA6D0E6C182A17131B5B615F0125C2B801226461663A49EB675E494D4BE5969D +E2474A476262000200C8000005B205D1000E001D003A4027391249126902680D04163408 +03173407087600010F1500741F0F1F2F1F401F601F041714076C1E10F6ED5D10F6ED5D00 +3FED3FED3130015D011402070E01232111213204171612073426272E012B011133323637 +3E0105B2B19366FBCDFE880174DA01015998AACF7A7958C68ABABA8FD5596F6F02E7CBFE +B65B3F3805D13F375FFEC4D6AFF0453227FB832A3947E800000100C80000049D05D1000B +003B402309350006100602060601053502030A350108040008010800730D0F0D01060914 +016C0C10F6FD325D10F63C5D3C003FED3FED12392F71ED31302901112115211121152111 +21049DFC2B03D5FCF1030FFCF1030F05D1B0FE68B0FDD700000100C80000047F05D10009 +0034401E053502020701350803070800034F0B02030300640B0F0B01020514076C0A10F6 +FD325D10F4322F5D003F3FED12392FED313001211121152111231121047FFD0F0287FD79 +C603B70521FE5CB0FD3305D100010073FFE305A205EC00240069404907010906060E1D06 +130E210E350E4901410E510E6506650B630E740E741C0F223540230123230C0310101734 +0C021D34030A7609012210220910216C0075260F264026021A1509682510F6ED5D10F6ED +3312392F2F5D003FED3FED332F1112392F5DED3130015D25060423222427260235100021 +32041715232E01272E01232200111000213236371121352105A27AFEDF87AEFEDE666770 +01A1016C7F010999121F763945AF6FFAFEDD0130010660BF48FE7102536E385360606101 +23C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAE00000100C80000053B +05D1000B003A4023033500081008020808050A070301050809021400780D0F0D400D500D +03080314056C0C10F6FD325D10F6FD32003F3C3F3C12392F71ED31302123112111231133 +11211133053BC6FD19C6C602E7C602D9FD2705D1FDB8024800010089000002D505D1000B +002E401909043206030A033201080D6D0A080B5A0A140305025A036D0C10F6F43210FDF4 +3210E6003FFD323FFD32313029013533112335211523113302D5FDB4C3C3024CC3C39804 +A19898FB5F000001002CFFEB02EA05D100150030401C6A017C01021233150307070B3403 +09131312140077170F170106651610E65D10F6ED332F003FFD322F3FED31305D01140623 +22262735331E01333236373E01351121352102EAEFC930A0360B29783F5C6D1A1B0FFEC5 +02010183C4D4110CB90E1E2A2728744C03659E00000100CD0000057505D1000B00A74075 +190956015C09030509280938094A0968098A09D809070F010A091E0119022A012B093901 +3909350B49014909450B5C01650B72007908100202038801C8010201B3000B000809B302 +0B0A030A840A010802050A07030105080B02030A0A0F0D20003000400004500001006E0D +400D01080314056C0C10F6FD325D10F65D5D322F123939003F3C3F3C1239393130015D87 +10C0C07AFD1804C00187107AFD5D1808C0015D71722901010711231133110133010575FE +FFFDB394C6C602D3F0FD6702979EFE0705D1FCF70309FD44000100C80000047605D10005 +002040110203043501080000070F07010414016C0610F6ED5D11332F003FED3F31302901 +113311210476FC52C602E805D1FADF00000100C8000005F605D1000C00794059560A0138 +023805360A6F0260036F05600A7F0270037F05700A0B5509560A5A0B0364037403750903 +050A020309000410043404440454046A04060404070B0903010708090A0B030502140078 +0E0F0E1F0E500E030513076C0D10F6ED5D10F6ED111739003F3C3F3C12392F5D12173931 +30015D72005D722123110123011123112109012105F6C6FE6276FE65B9010E018D018001 +130503FC970369FAFD05D1FCC3033D00000100C80000053805D10009006B404E0C071F07 +34074507510761077107077606010F0102061F0115063406440653066B0160067F017006 +0B0C010406025A01550602020701080603010408060102071300780B0F0B400B02021304 +6C0A10F6ED5D10F6FD113939003F3C3F3C12393931300172715D5D005D21230111231121 +0111330538F5FD3EB901330284B90534FACC05D1FB4004C000020073FFE105DA05F00017 +002300564042040004060B0C0B1217001706190C19125701570553075F0B580D58115F13 +53171076097915021B3415022134090A18150373250F25010F251F253F25031E150F6824 +10F6ED5D5D10F6ED003FED3FED5D3130015D011612151402070E01232224272602353412 +373624333216131000232200111000333200051E5B6163595CFBA19DFEFF5A5A61605C58 +01059AA0FF47FEFCE1E3FEFD0108DEDE0107052664FEDEB8B8FEDD6165666863630120B9 +B6012167626869FD610122013BFEC5FEDEFEDBFEC9013700000200C80000049605D10010 +001F0056403D3A143D1D4B144B1D500E540F650F071934000710070207070918340A0309 +080F211F21021115200030004000700004006F210F213F2102190714096C2010F6FD325D +10F45DED5D003F3FED12392F5DED3130015D011406070E012B01112311213216171E0107 +3426272E012B0111333236373E010496453E4DD2A0C6C6019486BA48555DCE3637307B5E +C4A778962F2F27040F63A93E4D4DFDD505D12D3039AA874D72241F1BFDAD2B2F306A0002 +0073FE7705F805F000250031008640610B0C0B120418041D190C19121518161D5C0B590D +59115C1353175719571D742010551F651F751D742D0425252135030B29341E0609760979 +150215022F34090A1E130600337326151B0009061D030F1B73330F33010F331F333F3303 +2C150F683210F6ED5D5D10E61117393210EDE62F2FED003FED3F5D123939ED3FFD322F31 +305D015D010E01232226270E01232224272602353412373624333216171612151002071E +01333236373303100023220011100033320005F83C753DAED309182D159DFEFF5A5A6160 +5C5801059AA0FF595B61DFBC0464842971181BECFEFCE1E3FEFD0108DEDE0107FE930F0D +BFB204036863630120B9B60121676268696164FEDEB8FEEFFE8A4B727E190A039F012201 +3BFEC5FEDEFEDBFEC9013700000200C80000059805D10010001F007A405408011D012D01 +3A01391D450F4814481D5A01560F59146F016902600A650B7E01750B110201B300100010 +071A34400201020205183407030105080F211F2140210311150F0D010D0D102000010019 +031400056C2010F632FD322F5D39392F5DED5D003F3C3FED12392F5DED12393130018710 +7AFD18C0015D29010121112311213216171E0115140607133426272E012B011133323637 +3E010598FEFFFE0EFEE9C601A187B448515BA28E612D342B7650E9C85E8C312D2B0250FD +B005D1232D339B77A1D93701A34063221D17FDCE212D2A6D00010086FFE5050205EC0030 +009A40790B09031F00231B08141F29082818241F242F390836103813351F362A4A084510 +4913451F4A27442A5802551B551F552D6B19661B651F662B602F7B16701F7020742A742D +86122309400E103708400E103700111A28041D06212125341D020A0A0E34060A2128151A +111500211A090074320F32703202096A3110E65D10E611393910ED2FED2F003FED332F3F +ED332F1112173931302B2B5D011406070E012322242735331604333236353426272E0127 +2E013534243332041715232624232206151416171E01171E010502514950D596A1FEFF85 +0E71012882B8CD61634BAF62C6BF013CF39D0106650E55FEEB919FC1607940EC52A6A801 +A957AA3B40483C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E28 +152CB20000010000000004EE05D1000700274018010435060303080F091F094F0903005B +0114045B4F0501052F5DF4FDE45D003F3FFD323130012111231121352104EEFDECC6FDEC +04EE0521FADF0521B000000100B2FFE1052905D1001D003A4029231223183D033D094C03 +4C0977137717081C0D031534060A1B1400761F0F1F1F1F401F030F140C6B1E10F6ED5D10 +F6ED003FED3F3C31305D011406070E01232226272E01351133111416171E01333236373E +01351133052947514DCE898CD0475147C621272C976A6B962D2721C60256A2F1504C464A +4852E8A9037BFC7B798C394142414239936D038A0001001A0000055E05D10006008C4066 +470148020205040507065706860603061400000105070457048604030414030203080144 +014B02580273017C02060005027503010303020845004A0302020103040024003A005A00 +6A00740006006E080F08010F08010B032B033503550365037B030603640710E65D5D5D10 +F65D1139395D003F3F5D1239393130015D8710FD5DC08710FD5D08C0015D090121013309 +01055EFDE2FEF8FDE2D401D301D305D1FA2F05D1FAE2051E0001005C0000078D05D1000C +00BB409E470367037903030D010B020404020505080C0B1701190318051908190B290329 +08290B3B023903320434083C09330A3A0B4B02440444084C09430A4B0B55015A0255045A +0557075909550A65016A0265046A056A09650A7F02700473087C09720A7C0B2E0C140001 +000714060506030301000300090205080B03090C0602060302083B0034064B0044067A00 +75060600720E1F0E3F0E5F0E7F0E0406670D10EE5D10E65D003F3F1217395D5D31300187 +10FD8710FD015D005D09012309012301330901330901078DFE7DDFFEC7FECEDAFE76CB01 +390134C90137013705D1FA2F04D4FB2C05D1FB2A04D6FB1E04E2000100440000053805D1 +000B00C2409775017A07020A04050A1A04150A2C04230A37094D04420A58035F04580557 +09500A570B68036D0468056709600A670B7B04730A170B14000100091408070803140201 +020514060607050407010A0B0602080302080F0D01060216022602360247020509081908 +290839084808050208070A04010406020D00160026003600470050000600660D08090619 +062906390648065F060606660C10F65D3210F65D321117392F2F5D5D5D003F3F12173931 +30018710ED8710ED8710ED8710ED005D015D09022309012309013309010538FDFE0201E5 +FE6AFE60D80207FE05E40191019A05D1FD20FD0F0265FD9B02E802E9FDA3025D00010006 +000004E605D10008007C405D2C012C04280735074001400440075007680470070A160619 +08270628085606590865066A08080814000100061405040502000D050200010004000703 +040107080402050302080F0A1F0A4F0A7F0A04005B01070114045B4F057F0502052F5DF4 +ED3910E45D003F3F1217395D3130015D8710ED8710ED015D005D09011123110133090104 +E6FDF4C6FDF2DB0197019B05D1FCBCFD7302780359FD66029A000001007E0000050805D1 +000900594036030708060813082608360846085608660876080808B30202030707033506 +03020208350108040803020707040209730B0F0B0102690A10E65D10E61139392F123939 +2F003FFD322F3FFD322F31300187107AED5D1887C0290135012135211501210508FB7603 +91FC910452FC6603B0B80469B0B3FB92000100EFFE7802F706140007001C400E05520201 +0652010B030000061F012FED332F3C003FED3FED3130012111211521112102F7FDF80208 +FEA6015AFE78079C8FF9820000010046FED003C006140003003A40280301020A0119012A +0138014B01590168017801890109011200032F000100030100006002700202022F5D332F +003F2F5D31300187ED5D87C00123013303C0ADFD33B0FED00744000100ABFE7802B30614 +0007001C400E045207010352010B031F000005012F3C332FED003FED3FED313001213521 +1121352102B3FDF8015AFEA60208FE788F067E8F000100BA02AA05D205D1000600474034 +3B0133034B0145035F0150036F0160037F0170030A69027B02020102050F031F033F035F +036F0305030305030000004F000200042F335D2F003F332F5D12393931305D015D012309 +0123013305D2C6FE39FE3AC5024D7E02AC0273FD8B0327000001FFFCFED4051AFF4C0003 +0011B6015002000005022F11332F002FED313001213521051AFAE2051EFED47800010154 +051602FA068C000300244016480159026902790204500360037003030303010000022F33 +2F002F332F5D3130015D0123013302FA95FEEFF30516017600020068FFE1041D04780026 +0033007A40540C0A0423190A152304590E511E5C2C690E601D6F2D7B0A7A14701D7B2C0A +0208283D3011401102111120084F1C011C1C183F20043141080A01080F1D011D1127021A +001D0B0091350F351F353F35032E1B0B853410F6ED5D10E6113910FD32322F5D003F3FED +3FED332F5D1112392F5DED123931305D015D2123350E01070E0123222635343637362437 +353426272E012322060723353E01333216171E011503110E01070E01151416333236041D +BB1955282F7A5297D26D6566011EA42D2A28703D4AB6610A37D06576AF403F42BB56E944 +5164747763A477113D12171FC89B7F9D2D2D20081D40541817102725BF0F24272F2E926C +FE1D013705141317615560614D00000200B9FFE10490061400130020005140393402350F +3B1530204402450F4B154020571267127F087B1C0C0E0906174211040C011E40060A0B08 +141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED3F3FED123939 +31305D011406070E012322262707231133113E0133321203342623220607111E01333236 +04904F4347AA665F8E450CB0BC4FB26FC6E5C2849352A8485073499CB102378CE04C4F4F +2D26340614FDD44153FED0FEE6C8CF4738FD80241CCD00010069FFE703F3047700210057 +40410F234F23022B01220E2A1624183A01350E3A16351849014F0A440E4F164118590155 +0E6901650E7A01730E131010143F0C0421211A3F03090F008D23171B09852210F6ED10F6 +3C003FED332F3FED332F31305D015D250E01232226272E013510003332161715232E0123 +2206151416333236373E01373303F35EA95F79CA484950012DF760B94D0A56B757A0B9B5 +A439762F2948150A462D32474848DC93011201383627D14348D7D0CAD91E18152F110002 +006CFFE10443061400130020004B40333C1A301C38204F1A421C48205806680670100912 +0102110518410E0401081E42050A1114021A0092221F223F22021B1B08852110F6ED5D10 +F6FD3232003FED3F3FED1239393F31305D2123350E01232202113436373E013332161711 +3303112E012322061514163332360443BC51B067C8EB514544B56158884BBCBC4C78479E +B0889650A475464E013401118EDE4E4C50252701E4FAFF0281221ADCCAC7CF470002006A +FFE60460047C0018001F005A404026042B0D30043B0D3C1E43044B0D4B1E5A0D50166A0D +6017780D7A1E0E013C1F1F0F1C3D15040B0B073F0F090C0C191A008F210F211F213F2103 +1F011B12852010F6FD325D10F4ED332F003FED332F3FED12392FED31305D01211416171E +013332363733150E0123200011100033321215272E01232206070460FCC93E36348F5672 +E7310A5FC66DFEEAFEC8012BF4E2F5B701939697B30C021B67993130305B2CCD2836012D +011501120142FEF8F32A94A2B2840001004400000312061E0018004B402D081439147505 +030000043F15000B0E3E0811050D080009400902090F090E00080B1A0F11000E400D1037 +0E891910F62B323232FD322F12392F2F5D003F3F33FD323FFD322F3130015D01232E0123 +22061D012115211123112335333534363332161703120A1F6426796D0153FEB3BC7F7FC6 +BB3F652A055E09136B8C269EFC4103BF9E25C7D50C080002006CFE590443047C00230030 +006E404E3D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C05 +702011220512211528401E0407070B40030D2E4115070F0601062124121A000618009232 +1F323F32022B1B18853110F4ED5D10E4113910FD32322F5D003FED3FED332F3FED123939 +3F31305D2510002122262735331E01333236373E013D010E01232202113436373E013332 +1617373303112E012322061514163332360443FEFEFEF459A9520A2EC864607E23231E55 +9B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A57FFEE4FEF61917C012352E29 +276E446644430121010790D14C474F272830FCD60261221DD0C6BCC23F00000100B90000 +045F061400160037402203151615751503100D084213040E01010D08021A0091181F1860 +1802100B1A0D881710F6FD325D10F6ED003F3C3F3FED123931305D2123113426272E0123 +22060711231133113E0133321615045FBC1218195E4B4DA84DBCBC58BC63B5BE027C4D87 +262A294C3BFCBE0614FDCD4952DACD00000200AF0000018305DB000300070030401E0144 +02400B0D370203060505087F090109920060041A01607F050105880810F65DE4FDE4E65D +003F3F3F2BED313001233533032311330183D4D40CBCBC0518C3FA25045D0002FFC2FE59 +021505DB000300190049402E0A051C0502014402400B0D370203163E19050B0B0F40070D +4F1701177F0A010A0160161A00600A1770190119921B10F65D3232E4FDE42F5D2F5D003F +FD322F3FED3F2BED31305D012335330314062322262735331E01333236373E0135112335 +210215D4D40CC8A828832C0A1C5F2D485816160DE901A50518C3FA0AC4C8100CB30B1C28 +2828715103849E00000100C1000004AF0614000B007D40512802D801DB090309010F0D1F +011D021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A +0802050A0507010105080B02600A700A020A0A00000D200D400D0208031A05890C10F6FD +325D11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0 +015D7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B0614FC +1A022FFDFC00000100BB0000017706140003001E4011020101087F05010592001A7F0101 +01880410F65DFDE65D003F3F3130212311330177BCBC0614000100B900000717047C002B +006A4048032403291324132944204426B72A07B62501251F1D1C0817422822041D050110 +1C08402D011F2D302D402D502D702D05001A016110250B1C0F1A101F1A1A1C611F104010 +801003102F5DF4FD3210FD11393910F4ED5D5D003F3C3C3F3F3CFD32111239395D31305D +2123113426272E01232206071E01151123113426272E012322060711231133153E013332 +16173E01333216150717BC0D151756514F9E4F0304BC0D151756514D9B4DBCBC58AF6372 +9F2772BC6BB8AF027C4886282B2C4F3D173D1EFD35027C4A85282B2B4C3BFCBE045D7C49 +5260556055DFC800000100B90000045F047C00160037402203151615751503100D084213 +040E05010D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3C3F3FED +123931305D2123113426272E012322060711231133153E0133321615045FBC1218195E4B +4DA84DBCBC58BC63B5BE027C4D87262A294C3BFCBE045D7C4952DACD0002006AFFE10471 +047C000B0017003E402C3B0E341034143B164B0E441044144B16080F3F0904153F030A0C +1B0090190F191F193F196F1904121B06851810F6ED5D10F6ED003FED3FED3130015D0110 +002322001110003332000334262322061514163332360471FEE8EBEDFEE90117EDEB0118 +C2AA9799A9AA9896AB022EFEEFFEC4013C01110111013DFEC3FEEFD9D3D3D9D2D9D70002 +00B9FE640490047C00130020004D4035320239153220430249154220561267127E087C1C +0A0E0906174211040C051E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD +32325D10F4ED003F3FED3F3FED12393931305D011406070E012322262711231133153E01 +33321203342623220607111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F +51A44B5073499DB0023C88E14E4A512628FE2C05F9753F55FECFFEECCAC84639FD87241A +D4000002006CFE640443047C00130020004B40333B033D1A301C3A204C034B1A461C4A20 +701009120502110418400E04010C1E4205091114021A0092221F223F22021B1B08852110 +F6ED5D10F4FD3232003FED3F3FED1239393F31305D0123110E01232202113436373E0133 +321617373303112E012322061514163332360443BC57AC64C7ED534442B2635A8B480CB0 +BC4E7846A3AA899352A4FE64021A4B490133010E90DD4B4950282730FCBF0278231CDDC2 +C4D34700000100B900000372045D001200384021000D100D200D030C090F000004430A0F +05090800001440147014020C071A09881310F6FD325D11332F003F3F3CFD322F11123931 +305D01232E012322060711231133153E013332161703720A2A4F3657A24BBCBC70AB5931 +2C2C03900A094D3DFCE7045DA55A4B0507000001006EFFE503D704780033009340710602 +091B1502191B26092A2432093C2442094C245E055D165321562F54326F056C166020642F +6532147A057F1174207928742B8A01880D851A872894019A1B0B000E1829041E03802201 +2222263E1E0407070B3E030921291B180E1B00211807008E350F351F353F355F357F3505 +07863410E65D10E611393910ED2FED2F003FED332F3FED332F5D1112173931305D015D01 +14062322262735331E0133323635342726272E01272E01353436373E013332161715232E +0123220615141716171E011716171603D7FDDB7CCF460A59DA647C8C26266C288135937B +393A38AD6B64CD440A48CE63678E2B2A5E34812B834747014299C43B23D3434F50564222 +221809180E27976E457A302F373123C935494F4E452323160C180A1E494A0001003EFFEA +02FD059E001B0048402C0C051A052B05030B10073E0D0B0A051B1B173F03094F1D7F1D02 +0E008C1D080D101A0A0807400D103707881C10F62B3232FD322F10F6325D003FFD322F3F +3333FD322F31305D250E012322263511233533113311211521111416171E013332363733 +02FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A0A0E12B8CB02529E0141FEBF9E +FE0358632B28251B0900000100B1FFE10457045D0016003740220B0619077A0703020515 +09051142050A010814021A0092181F186018020B1A08871710F6ED5D10F6FD32003F3FED +3F3C123931305D2123350E01232226351133111416171E013332363711330457BC5FAE69 +B0C4BC101A1B565249AD4BBC7C4B50D7D002D5FD8455792B2C284C3B03420001003D0000 +047F045D000600864041260429063604390646044906062905390540055105600505061A +000100041A03020328002703380037034A00470375017A02080005027503010305020802 +010300B8FFC0401E0910370C001C006A007A0004008D080F080103031303650375030403 +820710E65D5D10F45D2B113939003F3F5D1239393130015D8710FD8710FD005D015D0901 +2301330901047FFE3CBDFE3FCC015A0157045DFBA3045DFC870379000001005600000636 +045D000C0088406D0D031D032C012A0229032504260524082B0B34013B0544014B055701 +58045905570B6D02620464086A09640A6B0B79017D02720474087B09730A7A0B1E0C1A00 +0100071A060506000910090205080B03090C0602060502080F061F062F0603008E0E100E +3F0E6F0E030006830D10F6325D10E65D003F3F1217395D3130018710FD8710FD015D0901 +23090123013313013301130636FEDDAEFEE1FEE3ADFEDAC4CD01179B011EC2045DFBA303 +5DFCA3045DFC9F0361FC9F0361000001003C00000480045D000B00DA408C090B1B011403 +14071B09270327073C003B0134033404340634073B093D0A4C004B014403440444064407 +4B094D0A5A0155035A0555075A09550B6F016003690560076F09660B230F0200083F0230 +084F0240087D02700808091A0A0B0A071A060506011A000B00031A0405040102050B0809 +06047A047506020605040809060106020D010502080B04040A00B8FFC0401C0910370600 +01008D0D0F0D010F0D1F0D400D5F0D040602040104820C10F65D325D5D10F65D2B321117 +395D2F5D003F3F5D1217393130018710ED8710ED8710ED8710ED005D015D212309012309 +0133090133010480EDFEC3FEC1DB01B4FE50ED013B013CDCFE4901ADFE53022D0230FE5A +01A6FDDA0001003DFE64047F045D0007008C404104063406440650066006700606090307 +0519031705460149035800570179030902071A000100051A040304490046040200030204 +05020C02680101010203030400B8FFC040220910370C001C004A006A007A0005008D090F +0901030413044504650475040504820810E45D5D10F65D2B1117395D2F003F3F12393931 +30015D8710FD8710FDC0015D005D0901231301330901047FFD74C9D0FE43CC0157015A04 +5DFA0701D20427FCC4033C000001005D000003E3045D00090056403A15083A0335084A03 +45085C03540860087F0370080A0707033E06050202083E01080408030207070402098E0B +1F0B3F0B5F0B6F0B7F0B0502840A10E65D10E41139392F1239392F003FFD322F3FFD322F +3130015D2901350121352115012103E3FC7A028BFD830367FD72029F8B03359D86FCC800 +000100ADFE78045906140025005640382F1D3A074A07562367237523063A1D4A1D021D1C +09533F0A4F0A020A0A01145112012451010B140F00400002000919201F0E000940050105 +2F5D33333CFD3C2F2F5D3C003FED3FED12392F5DFD39395D3130015D012322263D013426 +2B01353332363D0134363B01152322061D01140607151E011D0114163B01045996B3DFA6 +AB3333ABA6DFB39672887B9A89899A7B8872FE78C7BC95A9BF9CBFA995BCC78A7E8CAF8B +BD371837BD8BAF8C7E000001017AFE78022806140003001B400F0F054F05020201010B00 +1F4F0101012F5DED003F3F3130015D012311330228AEAEFE78079C00000100BBFE780467 +0614002500544034211235023112400240127A0C06131200533F254F25022525091B511C +010A51090B1B0009010900170E1F050509004F200120202710D62F5D33333C10FD3C2F2F +5D3C003FED3FED12392F5DFD39393130015D012322061D0114062B01353332363D013436 +37352E013D0134262B01353332161D0114163B01046733ABA6DFB39672887B9A89899A7B +887296B3DFA6AB3301F8BFA995BCC78A7E8CAF8BBD371837BD8BAF8C7E8AC7BC95A9BF00 +000100BB018B05D1039F001F0056404206030609091309191908170A1518191A3B083418 +4B0844185A035A0A550D541B5B1D60056E14611875047A147518170F1C54060C54061F16 +1F2A000001000F2A00102F33ED2F5DED002F3333ED2FED333130015D010E01070E012322 +26272E0123220607233E01373E01333216171E013332363705D102292D2E82645E925466 +5C325E6409A702292C2B8A605D935550663D676103039F63C04B4D584F667D40AFC464BD +4D4A5B4D68625BCAA900FFFF001A0000055E07500236002400000117008E002F0175001A +40130320113011401170118011050200110E060725012B355D350003001A0000055E0801 +0012001E002100DF40442B2040205A18551A501E55206918651A651E09180B170D4A0646 +125906561278027703082020211F02870101011400120020210387040104140505067B06 +74120216510CB8FFC0405D0D10370C033470210121212006120405001C011C0301050813 +114F0F500F600F030F191140095F096F0903090F230106090F1204050C00240039004200 +5A006A0074000700006E230F23010A052B0536054D05550565057B050705642210E65D5D +10F62F5D1217395D2F5DED2F5DED003F3C3F5D1217392F5DED2F2BED3130015D8710FD5D +C0C0C08710FD5DC0C008C0015D005D212303210323012E01353436333216151406071334 +26232206151416333236130901055ED394FD8094C90207596BCC9293CB69592C72565672 +7355567236FEFEFEFD019FFE61057F2C9F668FC2C28F64A32A012F56737455567373FBF1 +02CBFD3500010073FE59054605EC00410097406F0A20032B1C20152B250B222B3402330B +342B4302430B452B5D1F582158255A275E3F6102602B70027626702B160B0B1B0B022D2D +313429021A061D41413D341D0A101014320C0D0F0F172A0009100920090309091D234371 +2C0071430F43010F431F432F433F436F4305371523684210F6ED5D5D10F43CE41239392F +5DED332F003FFD322F3FED332F1239393FED332F31305D015D250E01070E01071E011514 +062322262735331E01333236353426270E01232224272602353412373624333216171523 +2E01232206070E01151416171E01333236373305463759480B1A120203BB9326772D091A +5B326A620202132B12A2FEF762606C68625F010DA478EF920F7BF28A71B547454D554346 +BB688FFA6D0E6C182A17030903133317A2AC0E0CA20A1C5056132D1402025B615F0125C2 +B801226461663A49EB675E494D4BE5969DE2474A47626200FFFF00C80000049D08010236 +002800000117008D001E0175000BB601000D0D020325012B3500FFFF00C80000053807C8 +023600310000011700D7008C0175000BB60100170A050925012B3500FFFF0070FFE105D7 +075002360032FD000117008E009601750018401103002930295029702904020029240F03 +25012B355D35FFFF00B2FFE1052907500236003800000117008E00620175001840110210 +24202440246024040100241E0D1D25012B355D35FFFF0068FFE1041D068C023600440000 +0116008DE300000BB6020036371D2625012B3500FFFF0068FFE1041D068C023600440000 +01160043E800000BB6020035371D2325012B3500FFFF0068FFE1041D068C023600440000 +011600D6E000000BB6020038341D2625012B3500FFFF0068FFE1041D05DB023600440000 +0116008EE000001E4016030F39703902020039103920394039040039341D2625012B5D35 +5D35FFFF0068FFE1041D0653023600440000011600D7E200000BB6020041341D2525012B +3500FFFF0068FFE1041D07B1023600440000011600DBD300000DB70302003A341D262501 +2B35350000010069FE5903F3047700380080405B0F3A4F3A022A012A0726252A2D252F3B +01390735253B2D342F4B014F2140254F2D402F590153256C0166257A017525150B081B08 +0227272B3F230417031A3838313F1A090D0D113D090D0C0C142A06061A2026008D3A2E1B +20853910F6ED10F63C1139392FED332F003FFD322F3FED332F1239393FED332F31305D5D +015D250E01071E011514062322262735331E01333236353426270E01232226272E013510 +003332161715232E01232206151416333236373E01373303F3214D1D0305B79225742D09 +1A583268620302101D1979CA484950012DF760B94D0A56B757A0B9B5A439762F2948150A +460F1F0913391CA2AC0E0CA00A1A4E58162E140204474848DC93011201383627D14348D7 +D0CAD91E18152F11FFFF006AFFE60460068C0236004800000116008DFD00000BB6020022 +21121825012B3500FFFF006AFFE60460068C02360048000001160043FD00000BB6020021 +20121825012B3500FFFF006AFFE60460068C023600480000011600D6F900000BB6020024 +20120025012B3500FFFF006AFFE6046005DB0236004800000116008EF9000014400D0330 +2560250202002520120025012B355D35FFFF00A000000246068C023600D500000117008D +FE830000000BB601000505020325012B3500FFFFFFEB00000191068C023600D500000117 +0043FE970000000BB601000505020325012B35000002FFF50000023C068C0006000A003D +40247A0174037A057406040201030505030905080800047F0C01000C92071A047F080108 +880B10FD5D32FDE4335D2F2F003F3F2F332F1239393130015D01230B0123133303231133 +023C978F8E93B2E313BCBC0511010BFEF5017BF974045D00000300050000022D05DB0003 +0007000B0041402702010744600401040A050908011A7F000100041A700501057F0D0100 +0D92081A057F090109880C10F65D32FDE4335D2F5DED2F5DED003F3F2F5DED3939313001 +2335330523353313231133022DBDBDFE95BDBDB5BCBC0518C3C3C3FA25045D00FFFF00B9 +0000045F0653023600510000011600D70700000BB6010024170E1525012B3500FFFF006A +FFE10471068C0236005200000116008DE200000BB602001919060025012B3500FFFF006A +FFE10471068C02360052000001160043E200000BB602001919060025012B3500FFFF006A +FFE10471068C023600520000011600D6E200000BB602001C18060025012B3500FFFF006A +FFE1047105DB0236005200000116008EE2000014400D03301D501D0202001D1806002501 +2B355D35FFFF006AFFE104710653023600520000011600D7E200000BB602002518060025 +012B3500FFFF00B1FFE10457068C0236005800000116008DEE00000BB601001918101225 +012B3500FFFF00B1FFE10457068C023600580000011600430200000BB601001818091625 +012B3500FFFF00B1FFE10457068C023600580000011600D6F800000BB601001B17091625 +012B3500FFFF00B1FFE1045705DB0236005800000116008EFD000016400F02301C501C60 +1C0301001C17091625012B355D35000100BB0087045B0614000B003C4026070A0B000104 +0605AA0606080308010F0D1F0D02006302040708090A010602280563700301032F5DE6ED +173910E65D003F2F12392FED17393130012513231305350503330325045BFE6D058405FE +6D01930584050193040A05FC780388058105018EFE7205000002009A02CC03BC05EC000B +0017002840186A0F65157A0F751504155403030F5409020C2A0000122A062FED332FED00 +3FED332FED5D313001140623222635343633321607342623220615141633323603BCE8A9 +A9E8E8A9AAE7A58666668689636686045CA8E8E7A9A8E8E8A8668B8B6668898C0002009F +FE97046005C3001C0023007B40553C0A3F2030224B0A4F2040225A0153116C0164117901 +7611791F76230E1D1E180D3F134F130213130D1747060C030F0505201C301C401C031C18 +471C05030F251F2502130021202F090109001D0C0F1804031E09062F33ED1739322F5DED +2F3C5D002F3333ED2F5D2F3F123939ED33332F5D2F11393931305D250E01071123112600 +353400371133111E011715232E0127113E01373305110E01151416046047B46876E3FEFB +010BDD7668BA410B37AE7378AD330BFE2787A2984A1E2F03FE9D0167150120FAF2012B16 +0163FEA1032C1FCB2C5209FCB90A552985034214D2BDB5D2000100890000048B05EE0021 +00774050201D3415321D03031E151E251E410E530E5B16630E7302730E091B1805460F08 +1F084F0803081010144908010C0202204A01080F231F23021F02181B20080519060F0605 +190F040220004000020000022F332F5D1217392F2F2F2F33FD3211395D003FFD323F1239 +ED332F2F5DED393931305D015D2901353E01352335331134123332161715232E01232206 +1511211521151406071521048BFBFE7667B0B0FDCD6998400A3E98568C8B019FFE617C62 +0345CF20BDB98A0136C801012211CE2A30A590FEDD8A3D7EBB390B00000200ACFE7F0468 +05EF0043006100A9407F05050A2714051D273E2030424D104F20433240425C105E165132 +63096E106A2B63321152055F205F255F275B2D5B3950426B1F6A20653D654061427C097C +10742B7431107B50745F0218075F50293A062F0D3333373F2F021111153F0F0D1F0D020D +181B5F045607333A1B50262911471A1129330704221000010000561A222FED332F5D1217 +39ED2F2F3939ED2F2F123939ED002F5DFD322F3FFD322F111217395D31305D015D011406 +07151E01151406070E012322262735331E01333236353426272E01272627263534363735 +2E01353436373E013332161715232E01232206151416171E0117161716033E0135342627 +2E01272E01270E01070E01151416171E01171E01173E01046876636158424148C27C57A7 +5C0A4FB46C86A2272D299052D6525372666554404340C78057A85B0A3ABD797FA92B2B2B +845BC85A59F71C1E211D1C4E2C275D46123E1618261F1D1B512C266043144202596AA237 +072E915A4D8A3238361B1FC2253261573841191725143451518162A93907309259518334 +323A1C1DC21B3C5C573947171725152E4F4FFEAB21413A334617181F0C0B1514092D181A +563132461817200B0A18130B2F00000100B9012103A4040B000B0013B703030900000688 +0C10F6322F002F332F313001140623222635343633321603A4DC9A9ADBDB9A9ADC02969A +DBDB9A9ADBDB00010089FE95045205D1000D003B40245308610802010F0501054F060106 +0602AA0C030F0F1F0F020529040402290F0D010D0D092F332F5DED332FED5D003FED332F +5D2F5D3C31305D012311231123112E013534243321045294D695CEFC0104F301D2FE9506 +BAF94603BC05F8CCCFE8000100B9FFE8048D061E0036006D4048052E152E2E132C343913 +39343736490E4636532166217B1B0C3433143D151E3C15032D0007070B3D03092608181B +303400140C061C060206111B000614300325009038251A26883710F6ED10E611173910ED +2F5D2F12392FED003F3FFD322F3F1239ED2FED39393130015D0114002322262735331E01 +333236373E0135342623353236353426272E01232206070E01151123113436373E013332 +1615140607151E01048DFEF1DB2C73240A2A63384A6E21231FD3C69D9A161E1B583D395C +28252DBC48403CB35EB7E58E71A4BE01E1D6FEDD0F0DA518123A31347F4CA6A996778123 +421F1D231D2724845FFBC104387CB73E3A3BAE9770B2200925DF0004009FFF2E076105F0 +000B00170028003700AD407A7C0D7C11701370177A1A74277336070D1A04231E1A122314 +282C0E231022142C16211824233F1936234919472252186B0E641064146B166A19151A19 +2A182818292A25252818311B2A001D101D4F1D0318001D01901D011D0CAD1D06000012AD +06281AAA31311E19401D011D30AA1E15501D1E0903030F500902003FED332F123939ED2F +ED2F5D3C12392FED39012FED332F1239ED2F5D71335DFD3C2F39392FED8710FDC0313001 +5D005D011000212000111000212000031000212000111000212000072301231123112132 +16171E0115140607373426272E012B0111333236373E010761FE05FE9AFE9AFE0501FB01 +66016601FB74FE49FECAFECAFE4901B70136013601B7C0DFFEB5A2A501385E7A3B3F3B71 +63201C211F4635957F3E5A1D1F19028FFE9AFE0501FB0166016601FBFE05FE9A013601BC +FE44FECAFECAFE4401BC820163FE9D0393101F226149618126FD243812110AFECB131719 +3C000003009FFF2E076105F0000B001700330096406D7C0D7C117013701779197223062C +0E231022142C1633183324332A332E44184124442A442E54185424542A542E6B0E641064 +146B1662186A1D642417257F1801182C2A181E0CAD1E06000012AD06103320330233332F +521B1F252F2502252529522115501B210903030F500902003FED332F123939ED2FFD322F +5D2FFD322F5D012FED332F1239ED2F33ED2F5D3C3130015D005D01100021200011100021 +2000031000212000111000212000050E012322243534003332161715232E012322061514 +1633323637330761FE05FE9AFE9AFE0501FB0166016601FB74FE49FECAFECAFE4901B701 +36013601B7FE72569F4EE3FEF8010DDE59AC3E1036A9598E9F9994539D4810028FFE9AFE +0501FB0166016601FBFE05FE9A013601BCFE44FECAFECAFE4401BC572727F6EAE1010230 +1CB52846ABA59FAE3A34000200AA031106F105D1000E0016005240217B0478057A060379 +0C010B0C0D01030406080815121210135015030D280B0F370BB8FFC440110B0F37022800 +000728090FAE102814AE132FE4FDE42FED332FED2B2B003FFD3C332F1217395D3130005D +0123112303230323112311331B0133052311231123352106F17C14ED4FEF197BEEBFBFE3 +FC02E57FE5024903110269FE3D01CAFD9002C0FE82017E75FDB5024B75000001021D0516 +03C3068C000300244016470156006600760004500360037003030303010000022F332F00 +2F332F5D3130015D0901231303C3FEEF95B3068CFE8A01760002015A051803BE05DB0003 +000700264015020644016005010500140F010101041401000501052F5D33ED2F5DED002F +5D3CFD3C3130012335330523353303BEC7C7FE63C7C70518C3C3C300000100F5001B0597 +04FD0013008840541612010C0B080704030E111201020D80029002A002B0020402290303 +0C030D030112045307110E08530D070F0B010B40150130154015020407080B0112110E08 +030D0309030D1004062F004000020000400601062F5D332F5D1217392F2F1217395D5D00 +2F5D3333ED39392FED3939322F2F3130018710FD5D87C0C0C0C010C0C0C0C0C0015D0121 +0323132135211321352113330321152103210597FDA0689968FE5701DA54FDD2025E6999 +6901ABFE2453022F016AFEB1014F9C010C9C014FFEB19CFEF4000002000E0000076D05D1 +000F00130079404F04030B061B041B052A042B053B064A044A054D064D120B1213030414 +05050675057C06020A100E140115730601080B0440000100000F05010564140334130D35 +0A0A13050835123406030E35010508003F3CED3FEDED1239392FED2FED300110F65D322F +5D1739E62FED393931305D8710FDC0C0C0015D2901112103230121152111211521112101 +112303076DFC50FDF4D4CF0252050DFD1302EDFD1302EDFC50DBEF022CFDD405D1B0FE68 +B0FDD702230259FDA70000030073FF6E05DA064B001D002A003700A640850203000B0A0D +0C120F1A051C1103190D1F121F1A151C550254045A08590D59115B135017551C792A140B +090318061B1F0A1F0B1118161B2609272F75037F097F0A7F0B7F0C791270187019701A70 +1B132A2F1E2E043221340C09181B040615023234060A2A2F1E2E04272B15000C09181B04 +0F0073390F39010F391F393F390327150F683810F6ED5D5D10E411173910ED111739003F +ED3F121739FD11173931305D015D011402070E0123222627072313260235341237362433 +3216173733031612012E01232206070E011514161701342627011E01333236373E0105DA +63595CFBA173C94F9F84CD656D605C5801059A76C2528E84BC656FFE6F3990596EB44240 +453B3A035C3C3AFD683C91596EB73E434202E8B8FEDD6165663A37E4012664012CC4B601 +216762683737C9FEF464FED7013A2E2D4D4E4CE5938CE04C01B88BE44BFC432D2E504C52 +E100000300A1009D075F047C00170026003500724054051608311526192F2923262C3B34 +441C4B34510256075F0A5F0E5A1351165918553063026D0A631669236C24642C642D1821 +AF33AF0306120F09092AAF1BAF150F7B18743002272A0030180C0099371E2A0C993610F6 +ED10E411393910ED5D002F3CEDED332F1239393CEDED3130015D011402232226270E0123 +2202353412333216173E01333212052E01232206151416333236373E0125342623220607 +0E01071E01333236075FF5CF85DE454FD38FBFE2FACA86DE444FD58DBFE2FC683FB8608A +9C7F776E7C392225030C807658814A1E33133CBB608A9C0297EFFEF599929794010FD6EE +010C9A919695FEF1947575A79A85A6615E39470186A5477830672C7377A6000100D700B3 +05B505B6000F004540290E03540F010101010D045408AC0A070C401101301140110200AB +0A800D010D2A040105AB07400401042F5D3CF43C10FD5D3CF45D5D3C002F3CE4FD3C322F +5DFD3C31302521352111213521113311211521112105B5FB22021CFDE4021CA6021CFDE4 +021CB39E01A69E0221FDDF9EFE5A000200FE0000058005710006000A0061401605045403 +020306540001002C26012902360139020400B8FFE240240B1837031E0B18370954080303 +00400C01300C400C020504090A040100004001500102012F5D332F1217395D5D002F332F +2FED2B2B31305D4B53588710FD8710FD05C05909013501150901112135210580FB7E0482 +FC870379FB7E0482012F01E37C01E3B7FE96FE96FE1AA0000002010C0000058E05710006 +000A0063401603045405050602540101002C26002906360039060401B8FFE240260B1837 +051E0B1837095408050501400C01300C400C020503090A040100002F013001400103012F +5D332F1217395D5D002F332F2FED2B2B31305D4B53588710FD8710FD05C0590901350901 +350111213521058EFB7E0379FC870482FB7E04820312FE1DB7016A016AB7FE1DFC72A000 +0001006C000004A705D1001000834020300E3F10420E4F10540E5B10650E6A10730E7C10 +0A0020090B371020090B370EB8FFE0B3090B370DB8FFE04033090B374601550F700F0305 +0208320B0B0C010F0005070D0307080F121F1202030A005C0501030F05130D5C0C0A0F08 +BF0802082F5D3333E4ED39323210E42F2F5D003F3F1217392FED393931305D012B2B2B2B +5D090115211521112311213521350133090104A7FE400174FE8EBCFE8E0174FE3DD4014C +015005D1FCC15E8AFE5601AA8A490354FD6D0293000100BEFE640464045D001500384020 +080205140B051042050900080A0C0102131A0092171F176017020D091A0A881610F6FD3C +5D10F4FD3939003F3F3FED3F3C12393931302123270E012322262711231133111E013332 +363711330464B20A3B815B567F42BCBC209B5B5D8536BC76414A4640FDF305F9FCBA2752 +433C034000020095FFE0047905EF00220031006640481502151B162E2904241B310A351B +410A431B560A551A561F5020562A641A661E642A632E751B702E140F06263F0C0C061D19 +19153F1D022C3F060A1A0F232912141A0900002914092FED332F1239ED1139392F003FED +3FFD322F1112392FED123931305D011402070E01232226353400333216173E0135342623 +22060723353E01333216171E01032E01232206151416333236373E0104794E5255CB71C0 +F3010DCA5A9F4F02029E984EB74E0B51C96089CD3E2A1DCB3C98488DA8877080A322060B +0345A4FE987B7C62FDCBE4012134411A3B1AD9CA3F37C22C2D6D7C56CEFEC42F36B6AA91 +99C2BE215000000100BBFF43055905D1000C00A9406A01030F08450B8B03D903D30B0601 +08010B2B033208320B5D03660A600B08030203080908B3040304030B0A0BB30202030302 +03080908B3040304030B0A0BB30202030303610A010A07040304070A04020C0C0203090A +0A6B090109040202040309040B0835050301350B002FED3FED1117392F2F2F5D332F1239 +012F332F1217392F2F2F5D332F313087107AED87C0018710ED8708C00187107AED87C001 +8710ED8708C0015D71052135090135211521011501210559FB6202A1FD69046DFC850288 +FD6603B4BDBF029C0277BCB0FDA748FD730000010090FF3F05FC05D1000B003B40250307 +050009350A0270007F09020414005A6F017F010201010D0514095A00086008700803082F +5DE4ED11332F5DE4ED5D003FFD3C3C2F3C313001231123112111231123352105FCC8C6FD +B0C6C8056C0523FA1C05E4FA1C05E4AE0001007100000541045D000B002B401703070500 +093E0A05041A00B001010D051A09B0100801082F5DE4ED11332FE4ED003FFD3C3C2F3C31 +300123112311211123112335210541CABCFE3CBCCA04D003BFFC4103BFFC4103BF9E0001 +008AFE590490061E0021002C4018000004401E00111115400D0D0F231F2302001000091A +10192F33FD322F2F5D003FFD322F3FFD322F313001232E01232207061511140706232226 +2735331E013332373635113437363332161704900A2073208134356869BC346D310A216C +228135346868BD3A6636055708153D3D95FB9DCE6D6E0B0AB208153D3D950463CC6F6E0B +0A0000020097021303B005F000230030005740370A0A06211B0916212E0925215529600E +6029700E70290B02082552111120081C1C1853200201012E5308061D1125022A1D0B002B +2A000B2F33ED2F1239FD32322F003FED332F3FFD322F1112392FED12393130015D012335 +0E01070E01232226353436373E0137353426272E012322060723353E013332161503350E +01070E0115141633323603B0AA1C312C2D514980AF5D4D4EEF88242122573054A8270E2D +B84DD9BEAA45B736404E5B5E5283022A5E1425131415AA846A8724241F0612354013120A +300EAC0D20A99FFE74F504100F124D444C4C430000020079021303E405F0000B00170031 +40205D015D055207520B046A0F6515020F530902155303060C2A40000100122A00062F33 +ED2F5DED003FED3FED5D31305D0114022322023534123332120734262322061514163332 +3603E4F4C1C9EDEDC9C1F4B687787A86867A78870401EBFEFD0109E5E5010AFEFCEBACAC +AEAAAAADAB000001006B0000062105F00027006240440909090D1A091A0D2C092C0D3403 +300530113413460346136A1A641D64216A24101925140204160B341F0226183501160825 +1202191214081502141C272222290E15171C2FC4ED11332FC4123939ED2FED2FED003F3C +FD3C3FED12173931305D2901113E01373E01353426232206151416171E01171121352135 +26023510002120001114020715210621FDA443842D2F38F8E2E2F83A2F2F7F44FDA401B4 +A8D90172013601360172D9A801B40185275A373A9970C8FDFDC86E9E38395727FE7BAE7C +580132CC0116015AFEA6FEEACCFECE587C0000030068FFE3073F047C00390043005200B9 +40840B190B1D1C192604200D3604320D383D34414204420D4A3D4241520D5237554B630D +6137654B13161D4B2A512E622E7B0D7E137C1E7D24732E73387C4B0B47013C2170430143 +124333033018403D36042C2C283F30040B0B073F0F0A5041180A433A011A474412213304 +00470F2D012D0C0C3A1A00472D1B008F544054014D1B001B855310F632ED5D10E4113939 +10ED332F2F5D2F1217392FFD1139003FED3FED332F3FED332F3FED111217392F5D33FD32 +31305D015D01211416171E013332363733150E01232226270E01070E0123222635343637 +362437353426272E012322060723353E01333216173E0133321215272E01272E01232206> +<07032E01350E01070E01151416333236073FFCCD3C37348E566FD5420C4ED56DA6ED4C15 +5C323F947396D36C655F0124A22E2928703C4FB35A0D37CE659FD33945CA7DD9FBB60525 +20226D4F85B41991141569C0524F61747663C1022F72A234302D5334CD233B686713501C +242FC2987C992A271C033D41551717112A24BF0F265D5B5268FF00FB3E446625272C968C +FE6B35844B030915145B535F5C560003005DFF6C047104D900170021002B007840560008 +0F140A19292604001800250200180025020914001800253D1D322B4D1D422B0721261825 +04291B3E0609121504030F04293E030A21261825041E221B0009061215040C00902D0F2D +1F2D3F2D6F2D041E1B0C852C10F6ED5D10E411173910ED111739003FED3F121739FD1117 +3931305D5D5D015D011000232226270723132E01351000333216173733071E01252E0123 +22061514161701342627011E013332360471FEE8EB548F3B856EAB4B530117ED578E3674 +6F9B4C54FEBC2563379BAA222302442322FE40275F3B96AE022EFEEFFEC42A27C601004D +E2930111013D2C23ACE74CE0DC1D1DDCD2619436012B619836FD611F1ED900020071FFE2 +03BE05D100030020006D404C0F221F2202131E231E3A053A144B05400D400E400F43165C +05520F6F05650E651A7A057A0910127F1301131007120155030320201C34070A022B0303 +101F70130113130A200401041915040A2F33ED2F5D12392F5DED332FED003FFD322F3FED +331239395D2F31305D015D01233533130E01232226353436373E01373533110E01070E01 +151416333236373302C8CCCCF653BA70D7F9453B3A9D44B33C9E2E3644997967C5390A04 +FED3FA571E28D1AB62963E3E6529E1FECF2161282F7C4E716F4225000002012300000203 +05D1000300070027401707070055030305080F0901045D032B055D0F02200202022F5DE4 +FDE45D003F3FED332F3130012335331323133301F9CCCC0AE01AAA04FED3FA2F04370001 +00D2003905B002FA000500294018000002540F0401044007013007400702012A40000100 +00042F332F5DED5D5D002F5DFD322F313025231121352105B0ABFBCD04DE390221A00001 +0086FF6906C906FC0008004A402C15073307440772070407070806140302030207090829 +08590869080408000100010100040351060607080208002F2F1239392FED012F2F332F31 +308710DD5DC0C08710FD08C0005D09012301233521090106C9FC9066FE80ED0189013902 +DA06FCF86D03E18BFCCB065C0001FFDCFF37050005EF002B0077404D070B001F2E08270C +270F2E212925350D300F400E410F59226607660C0E0C0B0807201D1E21221D220F2D1F2D +020920201D2209041600160B081E462121281200000449280216161A4900120112002F5D +FD322F3FFD322F1112392FED393930012F2F1217392F2F5D8710C0C0C0FDC0C0C0313001 +5D01232E012322060F01211521030E01070E012322262735331E01333236371323353337 +3E01373E013332161705000A1D7229797E232A0141FEA3671D5C4041985C2950340A215E +2C7F812367D9F52A1A5C3E3E99573A4F3405290A1A77A0C28AFE1686B034352A0709B40E +1480A701EA8AC67BA833332C0A08000200F300CA0598045000190033006D40490A010606 +050E08130A1B06200528082D5B0452115B1E522B680B6432790B743210272730541D1A23 +541D1A002A012A0D0D1654030009542A0300101929000033291A0C290D26291A272F33ED +3CED2FED332FED002F333333ED2F2FED332F2F5D3333ED2F2FED332F31305D010E012322 +26272E0123220607233E01333216171E0133323637130E01232226272E0123220607233E +01333216171E0133323637059714B69E4D8C3841682C4B541C9B17B39F488E3B3D6B2D4C +59139E19AEA348903927802E4E56149D13B79E4D8A3A237C364B541B0450C2C64B2D3437 +607CB6C44A2E303B6D7DFDFCB8C34B2D1F4C6E7CC0C84A2E1C4F637A000200320000059E +05D100030006004F403148024703025A056A050205041A000003061A010102390236036B +0264037B02750306020305030000080105010203065401002FED3F1239012F11332F1739 +5D31308710FD8710FD04C0005D015D290101210902059EFA94023201080127FE50FE5105 +D1FAD7047BFB8500000200A600A2047A04760006000D005940107305730C0204400C1037 +0B400C103706B8FFC0B30C10370DB8FFC0401B0C103703000300070A0A07040500010100 +000C0B084007010707082F332F5D123939332F332F123939002F332F1239392F2F31302B +2B2B2B015D2501350115090105013501150901047AFDF00210FE9B0165FE52FDDA0226FE +8D0173BF01A35501A2BCFEEFFEEFD901BE5901BDC4FEDAFEDA00000200AE00A204820476 +0006000D005740107C037C0A0204400C10370B400C103702B8FFC0B30C103709B8FFC040 +1A0C10370C080C080505010403014000010000010A0B08070107082F33332F1239392F33 +2F5D123939002F332F39392F2F31302B2B2B2B015D090135090135010501350901350104 +82FDDA0173FE8D0226FE3CFDF00165FE9B02100260FE42C401260126C4FE4357FE5DBC01 +110111BCFE5E000300B2000005DA00DF00030007000B0025401405010206040A55090800 +2B0101042B0505082B092FED332FED332FED003FED173931302123353305233533052335 +3305DACCCCFDD2CCCCFDD2CCCCDFDFDFDFDFFFFF001A0000055E08010236002400000117 +004300640175000BB602000C0E050025012B3500FFFF001A0000055E07C8023600240000 +011700D700330175000BB60200180B050025012B3500FFFF0073FFE105DA07C802360032 +0000011700D7008B0175000BB6020031240F0325012B3500000200780000081C05D10016 +002500554039001C0022301C3022401C40227204720A721C741D72230B14351111011834 +10350D0317341535010811141417170E1203070073271F1507682610F6ED10E61117392F +FD32003FEDED3FEDED12392FED3130015D29012224272602353412373E01332115211121 +152111210511232206070E01151416171E0133081CFBCEC4FEFD6791B3AE984FF9E8042E +FD0502FBFD0502FBFC407A92B55F7481716D5BD09236415B0146CFD7013C603344B0FE68 +B0FDD7040479203642F8ABABEE4439280003006AFFE10776047C0024002B00370094406C +2604200D3204300D32293B2E323032343B364004400D40294D2E403040344D36530D5314 +5C165C1A531C5322620D621C6222700D72221B013C2B121E2B030F283D21042F3F1B040B +0B073F0F0A353F150A1E122B011A7F2C012C0C0C251A002C18008F393F3901321B188538 +10F6ED5D10E4113910ED332F2F5DFD323939003FED3FED332F3FED3FED1217392FED3130 +015D01211416171E013332363733150E01232226270E01232200111000333216173E0133 +321215272E012322060F0134262322061514163332360776FCDC3C34348D526DCD460C62 +BF69A8E84A45D183E9FEEF0117E38CC84447D78FE1ECB703918D8BAF10B8A49399A0A792 +92A5021B689831312F4F38CD2A347A686F78013C01110115013979726A81FEF4EF2A9B9B +A4927DD7D5E0CCD4D7D500010099023C047D02DC00030018400C0154020000050F051F05 +02022F5D11332F002FED313001213521047DFC1C03E4023CA00000010099023C076702DC +00030011B6015402000005022F11332F002FED3130012135210767F93206CE023CA00002 +FFED03E503160614000300070052B502180D103701B8FFE8B3090C3700B8FFE840090910 +3706180D103705B8FFE8B3090C3704B8FFE8401309103701000501050502060100B10202 +04B1062FED332FED003F3C332F5D3C3130012B2B2B2B2B2B0123013303230133031686FE +F1F0EF86FEF1F003E5022FFDD1022F000002009603E503BF0614000300070050B90004FF +E8400E0D10370518090C37061809103700B8FFE840200D10370118090C37021809103701 +000501050503070100B1020204B1000601062F5DED332FED003F3C332F5D3C3130012B2B +2B2B2B2B090123132301231303BFFEF186A5A4FEF186A50614FDD1022FFDD1022F000001 +FFED03E5018606140003002EB502180D103701B8FFE8B3090C3700B8FFE8400D09103701 +00010101020100B1022FED003F335D2F3130012B2B2B0123013301868AFEF1F403E5022F +000100A003E5023906140003002FB90000FFE8401A0D10370118090C3702180910370100 +010101030100B1000201022F5DED003F335D2F3130012B2B2B090123130239FEF18AA506 +14FDD1022F00000300D2000705BA051100030007000B00414029000B010B5608AC045407 +0F0101015602AC0F070107400D01300D400D0204AB000B2D05AB01400A010A2F5D3CE4FD +3CE45D5D002F5DF4ED5D10FDF4ED5D313001231133012135210123113303BDEEEE01FDFB +1804E8FE03EEEE03FE0113FD2BA0FD2B0113000200ACFFC805E00554000300070057403B +4804470658045706680467067F047006087F057007020705000301000330036003900304 +03B200023002600290020402B220010406020002000201192F3333182F2F123939002F1A +19FE5DEE5D11173931305D015D090705E0FD66FD66029A01BDFE43FE4301BD028EFD3A02 +C602C6FD3A01DDFE23FE2300FFFF003DFE64047F05DB0236005C00000116008EDD000016 +400F02100E600E700E0301000E0B040025012B355D35FFFF0006000004E607500236003C +00000117008EFFED01750019401302000E400E500E600E700E0501000E090500252B355D +35000001FF9A0000034B05D10003001D401138034803680065016903050100030000022F +332F003F2F3130015D09012301034BFCF4A5030C05D1FA2F05D100010000FFE504CA05EC +003300CC408758040102B52F0103B81D010237184718571867187718E718F71807013A00 +4A005A006A007A00FA0006032C06502998090109230F5020F71201081218122812581204 +00121203151827190119191D341502002833010133332F34030A272001022320292C0400 +0F12090604260C082A182A282A03002A21210C18007135103407073426150C683410F4ED +12392F103C10F63C11392FC45F5D111217391117395F5D003FED332F5F5D333FED332F5D +331112392F5F5D5D3CFD3CDD5D3CFD3C5F5D5F5D5F5D5F5D31305F5D250E012322000323 +37332E013534363723373312003332161715232E01232204072107210E01151416172107 +211604333236373304CA6CB97EF3FE8331862C4B02020202772C5D3A0174F38DBF541050 +C67C9DFF003001DB2CFE3C02030202017C2CFEC4310108969DB2440F3E3326012E010476 +152F161A34187601010128292DD1413DCFB17618341A172E1576B6D13F3D000100BA00AC +02E0046C0006002C400972050104400C103706B8FFC0400C0C1037030300040501000001 +2F332F123939002F332F31302B2B015D2501350115090102E0FDDA0226FE8D0173AC01B4 +5901B3C7FEE7FEE7000100C200AC02E8046C0006002C40097D030104400C103702B8FFC0 +400C0C10370505010403010000012F332F123939002F332F31302B2B015D090135090135 +0102E8FDDA0173FE8D02260260FE4CC701190119C7FE4D000002004400000453061E0003 +001E005B40370B103A10601A741A04014402031515193F1100070A3E1D0D050509080B14 +0160051A006004140A0492201D071A0B0D0A400D10370A891F10F62B3232FD3210E61139 +10E4FDE42F2F003F3C3F33FD323FFD322F3FED3130015D01233533032311211123112335 +333534363332161715232E012322061D01210453D0D011BCFDF9BC7F7FC8B73E65290A1C +6A22796A02C90518C3FA2503C2FC3E03BF9E31C1CF0D07AA08146B8C2800000100440000 +0447061E001A004E402D6C077A0702191A191A053E16000C0F3E091205010E08100A011A +000A0F00921C090C1A10120F400D10370F891B10F62B3232FD3210E6113910ED2F2F003F +3C3F33FD323FED33332F2F31305D2123112E012322061D01211521112311233533353436 +33321617370447BC2B8B35A2850149FEBDBC7F7FE9DE45902CBC056D080C6C8C2C9EFC41 +03BF9E31BFD10E040800000100BB007C045B06140013005740390B0E0F1011080609AA0A +0712130001040605AA060A060C030C010F151F150210630063020407080B0C0D0E111201 +0A022803090563700301032F5DF63C10ED173910E6E65D003F2F1239392FED17392FED17 +3931300125132313053505110535050333032515251125045BFE6D058405FE6D0193FE6D +01930584050193FE6D019301FB05FE7C018405810501A20581050184FE7C058105FE5E05 +000100FD01FF01EC031A00030016400C02560108002D2F013F0102012F5DED003FED3130 +0123113301ECEFEF01FF011B0001FFF6FEEC018F011B0003002EB90000FFE840190D1037 +0118090C370218091037010F0301011F03010300B1022FED002F5D335D2F3130012B2B2B +09012313018FFEF18AA5011BFDD1022F0002FFF6FEEC031F011B000300070051B90004FF +E8400E0D10370518090C37061809103700B8FFE840210D10370118090C37021809103701 +0005010505030F071F07020700B1020204B1062FED332FED002F5D3C332F5D3C3130012B +2B2B2B2B2B0901231323012313031FFEF186A5A4FEF186A5011BFDD1022FFDD1022F0007 +0095FFE30B9305ED000B000F001B00270033003F004B00C640900908060A0918061A083C +073E1808170A1818171A193C163E2908260A2918261A283C253E460D480F560D580F680E +17791F7625792B7631794376490625512F034F030203031F5109020F030E08432B513D20 +19401902191949315137130A4F0C400E020C0E462A003A013A402A3A003401342E2A0016 +01163416282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D12 +3939ED33332F5DED2F5D33ED2F5DED2F2F5D003F3CFD3C332F5D3CFD3C3F3F3FED332F5D +ED5D3130015D011406232226353436333216250123090114062322263534363332160134 +262322061514163332360134262322061514163332362514062322263534363332160734 +262322061514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6 +BAFABB596466585866645904935964665858666459043EBEB2B5BABDB2B6BAB259646658 +586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADCDDE0DADA01B8AC8888ADAD8787 +FE17AC8888ADAD8787AEE0DADCDDE0DADADFAC8888ADAD878700FFFF001A0000055E0801 +023600240000011700D600280175000BB602000F0B050025012B3500FFFF00C80000049D +0801023600280000011700D600260175000BB60100100C020325012B3500FFFF001A0000 +055E08010236002400000117008DFFF80175000BB602000C0C050025012B3500FFFF00C8 +0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500 +FFFF00C80000049D080102360028000001170043003C0175000BB601000D0D020325012B +3500FFFF0089000002D508010236002C00000117008DFF120175000BB601000D0D040925 +012B3500FFFF005D0000030808010236002C0000011700D6FF270175000BB60100100C04 +0925012B3500FFFF007E000002E207500236002C00000117008EFF240175001940130200 +104010501060107010050100100D0409252B355D3500FFFF0089000002D508010236002C +000001170043FF3E0175000BB601000D0D040925012B3500FFFF0073FFE105DA08010236 +003200000117008D00780175000BB6020025250F0325012B3500FFFF0073FFE105DA0801 +023600320000011700D6008F0175000BB6020028240F0325012B3500FFFF0073FFE105DA +08010236003200000117004300AA0175000BB6020025250F0325012B3500FFFF00B2FFE1 +052908010236003800000117008D006E0175000BB60100201F0D1D25012B3500FFFF00B2 +FFE105290801023600380000011700D6005B0175000BB60100221E0D1D25012B3500FFFF +00B2FFE1052908010236003800000117004300AA0175000BB601001F1F0D1D25012B3500 +000100BB00000177045D0003001E4011020501087F05010592001A7F010101880410F65D +FDE65D003F3F3130212311330177BCBC045D00010136051103E1068C0006003A40275905 +5606690566067A0573060601020350056005700503050560030103500060007000030000 +042F332F5D002F5D332F5D1239393130015D01230B0123133303E19FB9B89BE4E3051101 +00FF00017B00000100ED051D042C06530019003940233902350E4902450E04190D190952 +0F101F1002101652100D600301031928000C28000D2F33ED2FED002F5D3333ED2F5DED33 +2F2F31305D010E01232226272E0123220607233E01333216171E0133323637042C0B846F +365C292F412734340483088E67325D2A2F49213339030653989A27252B2B5A4C979A2724 +29295C4600010118053703FE05D10003001440090253100101010000022F332F002F5DED +31300121352103FEFD1A02E605379A0000010113050E0402068C000D0056403A6508650C +7508750C040D5006600670060306060AAA094003F00302D19003E003029003E003028B00 +03018950030150030159030D2A00072A00062F33ED2FED002F5E71725E5D5E5D715E5D5E +ED332F5D3C31305D010E0123222627331E013332363704020AC5A9A9C509A60C6B5B596B +0E068CA8D6D6A8847878840000010221051802F505DB0003000EB50244010015012FED00 +2FED31300123353302F5D4D40518C3000002012D050903E907B1000B00170045402E0F51 +090009300902313009015009600970090309091551030C29200030000200003000600003 +D0000100001229062FED332F5D7172ED002FED332F5D725E715EED313001140623222635 +343633321607342623220615141633323603E9CC9290CECC9293CB917558587576575875 +065E8FC6C5908FC4C48F567776575776760000010161FE59037000140014002440150B02 +1B012B013901041207070B53030D0E2A0000062F332FED003FFD322F2F31305D05140623 +22262735331E0133323635342627331E010370B79225742D091A58326862060399020659 +A2AC0E0CA00A1A4E581D491913340002015605160477068C000300070042B54500450402 +00B8FFE8B30E103704B8FFE840190E10370750036003700303030305019F000100000204 +0204062F33332F2F332F5D002F33332F5D333130012B2B5D09012313230123130477FEFE +8BA9B0FEFE8BA9068CFE8A0176FE8A0176000001019FFE5F037C000A0014002440150E04 +1E042B043B04040A14141053030D000D2A00062F33ED2F003FFD322F2F31305D010E0123 +222635343637330E011514163332363733037C344B2A8BA90D069B0606535A24511108FE +790E0C9E8F263E1A1B3C1E524E1B080000010132051103DD068C0006003A402754015902 +64016B0274017B020606050250036003700303030360020102500060007000030000032F +332F5D002F5D332F5D1239393130015D01032303331B0103DDE4E3E49FB9B8068CFE8501 +7BFF00010000000100180000048005D1000D0047402A3B0B4B0A5A0A7A0A04020B050804 +090309090106030C3501080A030A00000F0F0F01080B140503026C0E10F63232FD325D11 +332F392F2F003FED3F12392F2F12173931305D29011107353711331101150111210480FC +52BABAC6015DFEA302E8021798A395031AFD78011BA3FEE8FE0700010018000002360614 +000B003D4023490559056905030407010A040B05050B0B030801030800050D92000A011A +050704880C10F43232FD3232E62F2F003F3F12392F332F12173931305D01071123110735 +37113311370236B5BCADADBCB5037A91FD1702608D9F8A0318FD7194FFFF0086FFE50502 +0801023600360000011700DF004D0175000BB6010034311A0025012B3500FFFF006EFFE5 +03D7068C023600560000011600DFAE00000BB601003734180025012B3500FFFF007E0000 +050808010236003D0000011700DF00320175000BB601000D0A020625012B3500FFFF005D +000003E3068C0236005D0000011600DF9400000BB601000D0A050625012B35000002017A +FE780228061400030007002940160F094F090201060106050201050B00041F014F050105 +2F5D3CFD3C003F3F1239392F2F3130015D01231133112311330228AEAEAEAE02F6031EF8 +64031E000002000E000005BC05D100120025005240333816481666026811041B1E083C0B +0B071A340C031F3407087600011D1D0713150074270F274027602703091B1E140B09076C +2610F63232FD322F5D10F6ED12392F5D003FED3FED12392FFD393931305D011402070E01 +23211123353311213204171612073426272E012B011121152111333236373E0105BCB193 +66FBCDFE88C4C40174DA01025898AACF7A7958C68ABC0169FE97BC8FD5596F6F02E7CBFE +B65B3F3802E48F025E3F375FFEC4D6AFF0453227FE4C8FFDC62A3947E8000002006AFFE1 +0471061E001F00310084405B190D290D32013420392B362D45014C0D44204A2B442D5A2B +542D6F05741E7421100C03293F090F121A1D041B10100903161B1B3F164F160216022F3E +030A1C111A1D1C030011120F0C26051F162F160216231316090000092C14062FED11332F +1239ED2F5D17391217392F2F003FED3F5D332F111239392F1217392FED123931305D0110 +00232200353400333216172E01270527372E012735211E01173717071612013E01353426 +272E012322061514163332360471FEE4F1E5FEEB0112CA6C9B56208757FEF842ED54905D +0127236225D242BA99A6FEDE313403024BA55693A9A98F427B027DFEBCFEA8010EF5E201 +08353570D64AA2618E43512F1019431A80616D93FE9BFD8A3BA99620371E2D2BAF98B4AE +2C00FFFF0006000004E608010236003C00000117008DFFE40175000BB601000B0A050025 +012B3500FFFF003DFE64047F068C0236005C00000116008DDD00000BB601000A09040025 +012B3500000200C80000049605D100120021005C403E391F491F551180108011051B3400 +0701071A34200C010C0C07090A0309080F231F23021315200030004000700004006F230F +233F23020C1B071400096C2210F632FD32325D10F65DED5D003F3F1239392F5DED2F5DED +3130015D011406070E012B011123113311333216171E01073426272E012B011133323637 +3E010496463C4EDB97C6C6C6CD85C243535ECE343830805AC4A777982F2C2903135CA939 +4B48FEBE05D1FEF22D2C35AA7D486B231E19FDCD292D2966000200B9FE64049006140013 +0020004D4035320239153220430249154220561267127E087C1C0A0E0906174211040C01 +1E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED +3F3FED12393931305D011406070E012322262711231133113E0133321203342623220607 +111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F51A44B5073499DB0023C +88E14E4A512628FE2C07B0FDD43F55FECFFEECCAC84639FD87241AD4000100DC023C05B0 +02DC0003001E401100540F02010240050130054005020000012F332F5D5D002F5DED3130 +0121352105B0FB2C04D4023CA000000101230069056904AF000B00264017D702D80802A7 +0201D705D80B02A80B0105840294020202192F5D002F3130015D71005D71250709012709 +01370901170105696FFE4CFE4C6F01B8FE486F01B401B46FFE48D86F01B8FE486F01B401 +B46FFE4801B86FFE4C00000101230236039205D5000F002E4018055006060C030E03AA01 +0E0505020F0F0C0E2A02100301032F5D33ED39322F2F332F003FFD323F332FED31300121 +35331123353236373E01373311330392FD99EAF22D6C1E252C0387DD02367A0238700D0C +102C28FCDB00000100CF023603C705EF001D0045402D24152518361535184C105E106D10 +651866197D1075180B0F0F0B521302021C52010E00001C02082A16101610022F33332F2F +ED1239332F003FFD323FED332F3130015D0121353E01373E013534262322060723353E01 +333216151406070E01072103C7FD0864A733834A6B5A59AC300D47AF57B4BB6173379B42 +022002369C3E6E29676754454C3D1FB41A239D7D63975A2B6629000100CF020F03BC05F0 +002E007740162A033903450C4A1F540C5C1F6B0864237D0874230A27B8FFC040390B0E37 +2C2B15520F16010F161F164F165F16CF16FF16061621211D52160625020A0A0E52060F1A +2A281622112A2216282C04091000010000092F332F5D121739ED2F2F2FED003FED332F3F +1239ED332F2F5D71ED393931302B5D011406070E012322262735331E013332363534262B +01353332363534262322060723353E0133321615140607151E0103BC42383994595EA54A +0E29C35D648576708F80706B63684DC32C0E4AAD5AAFC16E595F8303314B712223211E1C +B3243B474B553C8D4D443D473E24B21B23886A59721A08116F00FFFF00AB000007A305D5 +0036023B9200003700BB023700000117023C0404FDC300204015020E08020E400E600E02 +010B2B0B5B0B6B0B7F0B045D11355D1135003F35FFFF00AB0000074105D50036023B9200 +003700BB023700000117023E0384FDC3002640190302100803020E1F0E5F0E7F0E03010B +2B0B5B0B6B0B7F0B045D11355D113535003F3535FFFF008C0000077905ED0026023DA600 +002700BB029100000107023E03BCFDC30036402603023608030236103630367F36030131 +003134314B315F316B317B3106000900093F094F09035D11355D11355D113535003F3535 +0001003C0000047405D10011005840330C0F09512F063F060206060B02344F0501050510 +0B01341003200301080803032F00010000130E01050A140F0E2F0B3F0B020B2F5D3333FD +32322F11332F5D332F392F5D003FED2F12392F5DED12392F5DED39393130012111211521 +1121152111231123353311210474FD3E028AFD76014AFEB6C0B6B603820526FE55ABFEEF +8BFECC01348B0412FFFF0073FFE305A208010236002A0000001700D900CF0175FFFF006C +FE590443068C0236004A0000011600D9FE00000BB6020037311A2325012B3500FFFF0089 +000002D507500236002C0000011700DAFF240175000BB601000D0C040925012B35000001 +0086FE59050205EC004700C240990B0B0A1F0036003A1B0B1B1F13362F0B2A1F292F2436 +24463F0B391F3427392A34363441481F4427482A43364B3E44415F035A05523257365544 +6B026F046A30643264366642604679057A2D703670377541754486292B20400E10371F40 +0E10371A060028313F06341D38383C343402212125341D0A101014530C0D0F0F172A0937 +3F153128150031371D0904200074490F49704902206A4810E65D10E611173910ED2FED2F +2FED332F003FFD322F3FED332F3FED332F1112173931302B2B5D011406070E01071E0115 +14062322262735331E01333236353426270E012322242735331604333236353426272E01 +272E013534243332041715232624232206151416171E01171E01050251492C683E0303B3 +9A25742D091A523868620302142515A1FEFF850E71012882B8CD61634BAF62C6BF013CF3 +9D0106650E55FEEB919FC1607940EC52A6A801A957AA3B233711162C199DB10E0CA20A1C +4E5818291201023C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E +28152CB20001006EFE5903D70478004A00AA40810820090C37090204321902173224202B +3B34203A3B43204B3B5A1C5C2D5237534652496B1C6B2D6237624662497C1C7C28743779 +3F74428B0188248531873F1D170300252F4006351A80390139393D3E35041E1E223E1A09 +0D0D1153090D0C0C142A0638401B2F251B002F381A06041D008E4C0F4C1F4C3F4C5F4C7F +4C051D864B10E65D10E611173910ED2FED2F2FED332F003FFD322F3FED332F3FED332F5D +1112173931305D2B011406071E011514062322262735331E01333236353426270E012322 +262735331E0133323635342726272E01272E01353436373E013332161715232E01232206 +15141716171E011716171603D77F6F0205B79225742D091A5832686203021528177CCF46 +0A59DA647C8C26266C288135937B393A38AD6B64CD440A48CE63678E2B2A5E34812B8347 +4701426BA32A13361AA2AC0E0CA00A1A4E58182D0F02023B23D3434F5056422222180918 +0E27976E457A302F373123C935494F4E452323160C180A1E494AFFFF0073FFE505460801 +0236002600000117008D006E0175000BB601002D2C0C1525012B3500FFFF0069FFE703F3 +068C0236004600000116008DCE00000BB601002423090F25012B3500FFFF0073FFE50546 +0801023600260000011700DF00A80175000BB601002E2B0E1525012B3500FFFF0069FFE7 +03F3068C023600460000011600DFF600000BB601002522090F25012B35000002006CFFE1 +04FB0614001B0028006F404A3B05380C3C2232243E284B054A0C4E2245244F2859086908 +70120D0114511A17171018011304072041100403082642070A160088011617131C041A1A +01922A1F2A3F2A02231B010A852910F632ED5D10F632FD3232323210E42F003FED3F3FED +1239393F12392F3CFD3C31305D01231123350E01232202113436373E0133321617352135 +213533153301112E0123220615141633323604FBB8BC4DAD6EC6ED524444B66059864CFE +95016BBCB8FE8C4F73499CB2879750A404F4FB0C754252012E01118EDB4D4C4F2427CE86 +9A9AFB9902792218D6CCC3CD47000001FFFC0684051A06FC00030011B601500200000502 +2F11332F002FED313001212721051AFAE705051E06847800000100FD01FF01EC031A0003 +0016400C02560108002D2F013F0102012F5DED003FED31300123113301ECEFEF01FF011B +FFFF001A0000055E0801023600240000011700D900310175000BB60200110B050025012B +3500FFFF0068FFE1041D068C023600440000011600D9D600000BB602003A340B2625012B +35000002001AFE5F062B05D1001B001E00C840900F051F052E053E05401D700806381C4A +0E450F590E570F051D1E1D1C0A77098709020914100F101D1E0B770C870C020C140D0D0E +570E580F7D0E730F040B34301E401E701E031E091E1D030D0E031B1B1753030D107A0D01 +0D080000142A060F20010E0F1D06040D0C102410391042105A106A1074100710106E200F +20010A0D2B0D360D4D0D550D650D7C0D070D641F10E65D5D10F42F5D1217395D2FED332F +003F5D3C3FFD322F3F1217392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D +005D010E012322263534363703210323012101230E0115141633323637330902062B344B +2A8BA91E0679FD7C92C9021E0108021E610607535A24511108FD91FEFBFEFAFE790E0C9D +90406A150154FE6105D1FA2F1B351B524E1B08033102DBFD250000020068FE5F052E0478 +003A00470099406A0B11052B1A12162B2A0544225F25544065166C2562407B127B1D7F25 +703F0F0C041B04390559166916053A3A3653030D0A103C3D301940190219192810242420 +3F28044541100A3009080000332A060F25012506193B091A2F25132F91490F491F493F49 +03421B13854810F6ED5D10E4113910FD3232322F5D2FED332F003F3C3FED3FED332F1112 +392F5DED12393FFD322F31305D015D010E0123222635343637350E01070E012322263534 +3637362437353426272E012322060723353E01333216171E011511230E01151416333236 +373301110E01070E01151416333236052E344B2A8BA90D041955282F7A5297D26D656601 +1EA42D2A28703D4AB6610A37D06576AF403F421D0607535A24511108FE3456E944516474 +7763A4FE790E0C9E8F263B1377113D12171FC89B7F9D2D2D20081D40541817102725BF0F +24272F2E926CFD0A1B321E524E1B0801FB013705141317615560614DFFFF00C8000005B2 +0801023600270000011700DF00280175000BB60200211E080F25012B35000003006CFFE1 +062706140003001700240072B90000FFC0404A0E10370118090D3702180910373D073D1E +34203B244D074F1E45204B245A0A6A0A70140B02020316011506091C4112040508224209 +0A0000021618061A02041F263F26021F1B040C852510F632ED5D2F33FD32322F332F003F +ED3F3FED1239393F33332F31305D012B2B2B010323130123350E01232202113436373E01 +33321617113303112E012322061514163332360627FA7F98FEFDBC51B067C8EB514544B5 +6158884BBCBC4C78479EB0889650A40614FE0701F9F9EC75464E013401118EDE4E4C5025 +2701E4FAFF0281221ADCCAC7CF47FFFF000E000005BC05D1021600E70000000100C8FE5F +04CD05D10020005C40390C041C042D043D04041235000F100F020F0F090E350B03133516 +090820201C53030D00192A0006060C10030A1473220F22010F1314140A6C2110F432FD32 +5D10E61117392F33ED2F003FFD322F3F3CED3FED12392F71ED31305D010E012322263534 +3637211121152111211521112115230E01151416333236373304CD344B2A8BA90B06FDC7 +03D5FCF1030FFCF1030FFE0607535A24511108FE790E0C9E8F24331D05D1B0FE68B0FDD7 +B01B351B524E1B080002006AFE5F0460047C002C0033007B40560D1E1A1E2604290D2B1E +34043A0D3C1E3B3244044B0D4B32590D502A6C0D602B790D783212191915531D0D013C33 +3323303D29040F230B0B073F2309122A20201A1A0C0C2D1A008F350F351F353F35033301 +1B26853410F6FD325D10F4ED332F3C11332FED003FED332F12393FED12392FED3FFD322F +31305D01211416171E013332363733150E01070E011514163332363733150E0123222635 +343637260011100033321215272E01232206070460FCC93E36348F5672E7310A4A9B5102 +03535A24511108344B2A8BA90604F8FEEB012BF4E2F5B701939697B30C021B6799313030 +5B2CCD1F3109143012524E1B089F0E0C9E8F18321212012A010401120142FEF8F32A94A2 +B284FFFF00C80000049D0801023600280000011700DF00220175000BB601000F0C020325 +012B3500FFFF006AFFE60460068C023600480000011600DFFD00000BB602002320120025 +012B3500FFFF00C80000047608010236002F00000117008DFEC00175000BB60100080702 +0325012B3500FFFF00AB0000025108010236004F00000117008DFE8E0175002FB5700270 +030203B8FFC0B3090C3702B8FFC04011090C3701044F049F040201000605020325012B35 +005D11352B2B5D00000200C80000047606140005000900464016070C0B0D370808090102 +030435010800000B0F0B0106B8FFEA40110E1037080C0B1037060608041408016C0A10F6 +32ED2F332F2B2B5D11332F003FED3F3F332F3130012B2901113311210B0123130476FC52 +C602E8C3FA7F9805D1FADF0564FE0701F900000200BB000003540614000300070042400D +010C0B0D370202030601050800B8FFEA40190E1037020C0B103700000F021F0202020204 +1A7F050105880810F65DFD322F5D332F2B2B003F3F33332F3130012B0103231303231133 +0354FA7F98FCBCBC0614FE0701F9F9EC0614000200C80000047605D1000500090036401E +07562F0801080801020304350108062D07070100000B0F0B010414016C0A10F6ED5D1133 +2F12392FED003FED3F12392F5DED3130290111331121032311330476FC52C602E89CE9E9 +05D1FADF0157010B000200BB00000362061400030007002D401A05560606010201010807 +2D6F067006020606001A7F010101880810F65DED332F5DED003F3F12392FED3130212311 +33012311330177BCBC01EBE7E70614FBF4010900FFFF00C8000005380801023600310000 +0117008D00780175000BB601000C0B050925012B3500FFFF00B90000045F068C02360051 +00000116008D0000000BB6010019180E1625012B3500FFFF00C800000538080102360031 +0000011700DF00A20175000BB601000D0A050925012B3500FFFF00B90000045F068C0236 +00510000011600DF1C00000BB601001A170E0225012B3500FFFF0073FFE105DA08010236 +00320000011700DD008C0175000DB703020029260F0325012B353500FFFF006AFFE10471 +068C023600520000011600DDD800000DB70302001D1A060025012B353500FFFF00C80000 +059808010236003500000117008DFFF60175000BB602002221060B25012B3500FFFF00B9 +00000372068C0236005500000117008DFF380000000BB6010015130A1225012B3500FFFF +00C8000005980801023600350000011700DF000A0175000BB602002320060B25012B3500 +FFFF009200000372068C023600550000011700DFFF600000000BB6010016130A0325012B +3500FFFF0086FFE5050208010236003600000117008D00140175000BB6010033321A1F25 +012B3500FFFF006EFFE503D7068C0236005600000116008D9400000BB601003635063225 +012B350000010000FE5904EE05D1001B0048402E0C071C072C073C07040C0C1053080D01 +18351A030216080B0B132A050F1D1F1D4F1D03005B050114185B4F1901192F5DF4FD32E4 +5D2FED332F003F333FFD323FFD322F31305D0121111E011514062322262735331E013332 +3635342627231121352104EEFDEC0309B79225742D091A58326862050332FDEC04EE0521 +FB04144822A2AC0E0CA00A1A4E581E36170521B00001003EFE5902FD059E0030006F4046 +0C080D1A19081E1A2B082F1A3C08070D0D1153090D20251C3E22201F0503171830302C3F +18094F327F32020C0C142A06182306031C008C321D22251A1F1D4F1C7F1C021C883110F6 +5D3232FD322F10E61117392FED332F5D003FFD322F1239393F3333FD322F3FFD322F3130 +5D250E01071E011514062322262735331E01333236353426272322263511233533113311 +211521111416171E01333236373302FD0C1C100204B79225742D091A58326862030214AB +B27F7FBC0184FE7C0818164D4F2E64160A0A030703122C18A2AC0E0CA00A1A4E58172F10 +B7CB02529E0141FEBF9EFE0358632B28251B0900FFFF0000000004EE0801023600370000 +011700DFFFEE0175000BB601000B08060725012B35000002003EFFEA037A0705001B001F +0073404C0B041C042A042A1D2A1E3A1D3A1E4A1D4A1E551C641C691E741C791E0E1F1F1E +0B10073E1E0D0B0A051B1B173F03094F217F21021C1C1E1E100E008C21080D101A0A0800 +4F077F070207882010F65D323232FD322F10F63211392F332F5D003FFD322F3F333333FD +322F2F332F3130015D250E012322263511233533113311211521111416171E0133323637 +331303231302FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A7DFA7F980A0E12B8 +CB02529E0141FEBF9EFE0358632B28251B090652FE1101EFFFFF00B2FFE1052908010236 +00380000011600DB63500079405B02010900210140215021A02103EF102101902101BD00 +210150218021028B10214021702103B021C021F021039021C02102599021C021E0210310 +21602190210331002101E021010F211F214021502180210521020100241E0D1D25012B35 +3500115D71725E71725E5D71725E5D725E5D725E5D715E353500FFFF00B1FFE1045707B1 +023600580000011600DB0000000DB70201001D17091625012B353500FFFF00B2FFE10529 +0801023600380000011700DD00780175000DB7020100241F0D1D25012B353500FFFF00B1 +FFE10481068C023600580000011600DD0A00000DB70201001D18091625012B353500FFFF +007E0000050808010236003D00000117008D00070175000BB601000B0D050625012B3500 +FFFF005D000003E3068C0236005D00000117008DFF680000000BB601000B0D050625012B +3500FFFF007E0000050807500236003D0000011700DA00390175000BB601000B0A050625 +012B3500FFFF005D000003E305DB0236005D0000011600DA9200000BB601000B0A050625 +012B3500000100C80000048A05D10005001F401003013504030000070F07010214036C06 +10F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D100030073 +FFE105DA05F0001700230027006D404F040004060B0C0B1217001706190C191257015705 +53075F0B580D58115F13531710253560260126260976097915021B3415022134090A2726 +27260F18150373290F29010F291F293F29031E150F682810F6ED5D5D10F6ED1239392F2F +003FED3FED5D12392F5DED3130015D011612151402070E01232224272602353412373624 +33321613100023220011100033320003213521051E5B6163595CFBA19DFEFF5A5A61605C +5801059AA0FF47FEFCE1E3FEFD0108DEDE0107ACFD8D0273052664FEDEB8B8FEDD616566 +6863630120B9B6012167626869FD610122013BFEC5FEDEFEDBFEC901370106B300030069 +FFF0062405E1001D002A00370058403624182C321525062B32091509081603082A1E2532 +65006A0F041E150032150F00072B1518250407140F080839381F393F396F399039045D11 +12392FC4ED173910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01 +071523352E01272E01353436373E01373533151E01171E01073426272E0127113E01373E +0101110E01070E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F +4B57CE403B3A8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A +524AD88C88CC4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01 +363737AA6170B63A2D3C0002006CFFE10443047C00130020005740162A032A203C1A301C +38204F1A421C4820580668060A10B8FFC040230B1037120502110518410E0401081E4205 +0A1114021A0092221F223F22021B1B08852110F6ED5D10F6FD3232003FED3F3FED123939 +3F31302B5D2123350E01232202113436373E0133321617353303112E0123220615141633 +32360443BC51B067C8EB514544B56158884BBCBC4C78479EB0889650A475464E01340111 +8EDE4E4C502C2734FCB6027C221FDCCAC7CF47000002006AFFE104730614001900280086 +4029031C0520171526153B0A3A0E3A1C3E214C0A490E4A1C4F2153176B0E7B0E7A207B21 +1136264626021DB8FFE04034121C371D180A11371D171D0C050F133E1001263F030A1111 +001D0C0F1A1B00140F00902A0F2A1F2A3F2A6F2A040F0F231B06852910F6ED332F5D10E4 +113910ED11393911332F003FED3FFD323F33332F2B2B5D31305D01100023220011343637 +3E01372E012735211521151E01171E01073426270E01070E011514163332360473FEEBEE +F1FEEB564045B45C4CB466032AFDCF44DE5D9676C26E6E4291423F55AA9C99A60227FEF0 +FECA012F01068DC5404852113F8748B39E0A2E9C5488FBA487E45608303532AE7FC9D0D3 +0001006DFFE603EE0478003D007C40432612263B363B49014418590154186A016F0B6418 +79017A0B7418792274350F0C2C3F2B2B03161A1A1E3E16043D3D393F0309192B40090C37 +2B241B10100C2B19040900B8FFC0401009143700003F7F3F803F02331B09863E10F6ED5D +11332F2B1217392FED2F2B2F003FED332F3FED332F1112392FED3931305D250E01232226 +272E0135343637352E01353436373E013332161715232E01232206070E01151416171E01 +3B0115232206070E01151416171E01333236373303EE6BCE734FA446455771795B6C5F41 +40A24F62A45A0D42C3642D4E2A233338302D68356F9E3E642A2931342925653866E8470D +40302A2028277F5E6090260718845C5975222120211CCF33380B140F432C3D440F0E03A6 +0911114A3B354A151314483E0002006AFFE1050F047C0011001D004D40163A15351B4A15 +451B040E3F0D05153E09041B3F030A0FB8FFC040190B0D370E0E090C0F0306121B00901F +1F1F6F1F02181B06851E10F6ED5D10F4ED121739332F2B003FED3FED3FED5D3130011000 +232200111000333216172115211E010734262322061514163332360471FEE7E9F1FEEC01 +1AED376A1D01E0FEE03E44C2A49AA1A4A79C98A8022EFEE7FECC013C01110113013B1609 +A549C27FD7D6E0CDD1DAD7000001000A000003EE045D0007003840230301043F06054000 +4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32 +2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A50002 +0068FE6405EA047A001D0024007840163515740F022110090C37213E1A040F0522037717 +0117B8FFF0400F090C37173E0609050C75147A1E0211B8FFC040250D103711112217041A +05050C1E1B3A0001008F260F261F264F266026040F2601141B0C852510F6ED5D5D10F45D +ED12392FED3939332F2B5D003F3FED2B5D39393F3FED2B31305D011000051123112E0127 +2E01353412373315060215141617113E0133200003342623113E0105EAFEA9FEF3BB82DD +51555E7685E58894E1BD214B270130015DC3E0C1CED30240FEFDFEC40FFE72018E065145 +4AC4869F01128A1163FEF6A7BDE60603E80201FED5FEFBB8DBFCB20AE8000002FFFCFE59 +051AFFAE000300070020400F02500101080650050D0400000905022F3311332F33003FED +12392FED31300521352111213521051AFAE2051EFAE2051ECA78FEAB7800FFFF01230000 +03DC05D10036000400000117000401D90000001E40140302200D5F0D6F0D030D01000005 +10057F0503052F5D35352F5D35350001009A022A03C605F00016004DB90014FFE0B3090C +3715B8FFE0B3090C3713B8FFF84017171B370110130D0D085313020E03012A000018100B +2A0DB8FFC0B3090A370D2F2BFD3211332FED003F3FED332F1239332B31302B012B012311 +3426272E012322060711231133153E013332161503C6AC0E15164D40418D41ABAB4BA254 +9AA6022A0215466A2424234332FD4503AB683E45B9AB000200C8FFE508CA05D1004E005D +00E240210B18044D19012E18204D55316A186631654D791375487952735A0D05200E1037 +3DB8FFE040310E103711001A46043B033F400B0D373F3F433E3B4F3501353B351E37213E +34243134032C573450290129292B56342C0307B8FFC0403C0B0D3707070E3E0309202B3A +4F4A4F0237341F1A20201A330606461A381D3E1A3E1A3E111A00005F0F5F014F13225F33 +7F33023333572A13702B012B2F5DFD32332F5D39ED5D11332FED33332F2F123939ED332F +1112392FED39395D002F2F3FED332F2B3FED12392F5DED1217392FED393933332F5D2FED +332F2B1112173931302B2B5D0114062322262735331E01171E01333236353426272E0127 +2E013534363723112311230E01070E012B01112311333216171E011733353315213E0133 +32161715232E01232206151416171E01171E01013426272E012B0111333236373E0108CA +E2BE6ABA3D0917472D356145667943552A62377E6E0F12DDB57C0C3B2F4DCCA030BCF486 +B44847580A78B5017F24733155B53E0940B15B59723B562E642E7284FA5E36372F83572E +1178962F2F2701429BC23C22D31331161A1E4C5A4844160B131026956E254426FC4E03B2 +45792F4D4DFDD505D12D302F9364DCDC12183024C935494E4F4648170C180C1E8E024F4D +75241F1DFDA32D2F306DFFFF0089FFEB063E05D10036002C00000117002D035400000005 +B20F23015D00FFFF00AFFE59043D05DB0036004C00000117004D02280000001840115023 +60237F23030302500C600C7F0C030C2F5D35355D000200000000052706140016001A0065 +B90017FFE8403F0D10371818090C3719180910370315161575150318181701100D084213 +040E05010D08171740190119100B1A19300D500D700DAF0DCF0D050D0D021A00911C10F6 +ED332F5D33FD322F5D332F003F3C3F3FED12393F332F31305D012B2B2B2123113426272E +012322060711231133153E0133321615090123130527BC1218195E4B4DA84DBCBC58BC63 +B5BEFC72FEF18AA5027C4D87262A294C3BFCBE045D7C4952DACD033FFDD1022F000100D5 +0366028705D100030027B90000FFE840140D10370118090C3702180910370101030300B1 +022FED003F332F3130012B2B2B090123130287FED688C205D1FD95026B00000200D50366 +041805D1000300070050B90004FFE8400E0D10370518090C37061809103700B8FFE84020 +0D10370118090C37021809103746000101050503070304B13F0601060600B1022FED332F +5DED003F3C332F3C3130015D2B2B2B2B2B2B09012313210123130287FED688C20281FED6 +88C205D1FD95026BFD95026B00040095FFE3080705ED001B001F002B003700CA400C471D +481F561D591F681E050BB8FFE040160E103701200E10371F1D1C071D171D021D291E1E1F +29B8FFF44012090B37230C090B374F0D401B7A2F75350417B8FFE8404A0E103711180E10 +371F031B1B17512F034F0302030D030D115109022F51202940290229293551230A1E0840 +1E011C1E322A00260126262C2A1C1E062020390F39010D2000010000142A062FED332F5D +335D11332F123939ED332F5DED2F2F5D003F3FED332F5DED3FED33332F2F5DED332F3F2B +2B5D2B2B3130018710ED5D87C0002B2B015D010E012322263534363332161715232E0123 +220615141633323637330901230901140623222635343633321607342623220615141633 +3236032D1E934EC0D9DDBC417F3F0E3C73396D7F7B71497A250E02F5FCF4A5030C028ABE +B2B5BABDB2B6BAB2596466585866645902BE1232E6D2C9F22121AD3233959C9698422302 +68FA2F05D1FBCCE0DADCDDE0DADADFAC8888ADAD87870002000FFFE8028605D3001B002B +006E400D531D621D701C0316180B113705B8FFF040310B0F37001A010B1C051B1B051612 +120F5216092550050347080112121F2908401114372F0801081C1B001A0008030B2A01B8 +FFC0B3101437012F2BED17332F33322F5D2BED332F5D003FED3FED332F1112392F17392B +2B31305D13371134363332161514020711141633323637150E012322263D0107133E0135 +3426272E01232206070E01150FB17B6F607C78A51D1B1A44693771395C6B4FF8622F0D0D +0A190F0F19060B0C01A6EB01C7E299826D5CFEF7E6FE61592B214AA22C2B727FE162022B +A980371E30110C0D0C0E156E5800000200920000044203B0000300070025401507CB0101 +05CB0307CB010105CB00031003300303032F5DED332FED002FED332FED31301321112113 +1121119203B0FC504C031803B0FC500364FCE80318000001008301BD0252038C00030017 +400B02020300000002300202022F5D332F002F332F3130011121110252FE31038CFE3101 +CF000002008301BD0252038C000300070023401306CB020205CB0304CB000006CB000230 +0202022F5DED332FED002FED332FED313001112111052111210252FE310183FEC9013703 +8CFE3101CF4CFEC9000100B10088042203F9000B0021401409090F032F034F0303030606 +00009000A00003002F5D332F002F5D332F3130133400333200151400232200B10102B7B6 +0102FEFEB6B7FEFE0240B70102FEFEB7B6FEFE0102000002007001AA026603A0000B0017 +0065400B06102326370610171A3700B8FFF0B323263700B8FFF04015171A3712CB06060C +CB000910171A3709100B0E3703B8FFF0B3171A3703B8FFF040130B0E3715CB03030FCB00 +0920093009600904092F5DED332FED2B2B2B2B002FED332FED2B2B2B2B31300132161514 +06232226353436172206151416333236353426016B689393686893926949666748486766 +03A093686893936868934C674849666649486700FFFF001A0000055E073C023600240000 +011700D80031016B000AB602000C0B0607252B35FFFF0068FFE1041D05D1023600440000 +011600D8D900000AB6020036371D26252B35FFFF0073FFE5054608010236002600000117 +00D600A90175000AB601002F2B0F15252B35FFFF0069FFE703F3068C0236004600000116 +00D6F4000011400C014026502602002622060F252B5D3500FFFF0073FFE5054607500236 +00260000011700DA00A80175000AB601002C2B0F15252B35FFFF0069FFE703F305DB0236 +00460000011600DAF5000011400C012024302402002425060F252B5D3500FFFF00C80000 +049D073C023600280000011700D80033016B000AB601000E0F0203252B35FFFF006AFFE6 +046005D1023600480000011600D8F700000AB6020022231200252B35FFFF00C80000049D +0801023600280000011700D900400175000AB60100120C0203252B35FFFF006AFFE60460 +068C023600480000011600D9FE00000F400A027026010026201515252B5D3500FFFF00C8 +0000049D0750023600280000011700DA004F0175000AB601000E0F0203252B35FFFF006A +FFE6046005DB023600480000011600DA0000000AB6020022231218252B35FFFF0073FFE3 +05A208010236002A0000011700D600D00175000AB601002925070F252B35FFFF006CFE59 +0443068C0236004A0000011600D6FB000011400C0230354035020035311A23252B5D3500 +FFFF0073FFE305A207500236002A0000011700DA00CE0175000AB601002728070F252B35 +FFFF006CFE59044305DB0236004A0000011600DAF5000011400C0250336033020033341A +23252B5D350000010073FE5905A205EC0038009540200906060E07261D06130E210E350E +4901410E510E6506650B630E740E741C0F2CB8FFE04043090C37323236532E0D28032235 +40230123230C03101017340C021D34030A3131002A0F2B1F2B022B760901221022042B27 +040910216C25753A0F3A403A021A1509683910F4ED5D10F4ED331217392F2F5D2F5DED33 +2F003FED3FED332F1112392F5DED12393FFD322F3130012B5D0534262722242726023510 +002132041715232E01272E012322001110002132363711213521110E01071E0115140623 +22262735331E0133323603820302ADFEE066677001A1016C7F010999121F763945AF6FFA +FEDD0130010660BF48FE7102535AD45E0103B79225742D091A583268626B152B0F5F6061 +0123C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAEFD8129460F0E2516 +A2AC0E0CA00A1A4E0003006CFE590443068C002300300034009F406F243234320233200D +10373D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C057020 +112F343F344F3403343433331E220512211528401E0407070B40030D2E41150731315033 +603302333300180F0601062124121A0006180092361F363F36022B1B18853510F6ED5D10 +E4113910FD32322F5D1112392F5D332F003FED3FED332F3FED1239393F11332F332F5D31 +305D012B5D2510002122262735331E01333236373E013D010E01232202113436373E0133 +321617373303112E01232206151416333236130323010443FEFEFEF459A9520A2EC86460 +7E23231E559B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A534B3F301117FFE +E4FEF61917C012352E29276E446644430121010790D14C474F272830FCD60261221DD0C6 +BCC23F058EFE8A017600FFFF00C80000053B08010236002B0000011700D600760175000A +B60100100C060B252B35FFFF00B90000045F08010236004B0000011700D600220175001A +4012014F1B6F1B9F1B031B112601001B170808252B35002B5D3500020020000005E305D1 +001300170060403D0E1201160408520B400C0F370B0B0C05350017101702170B10170304 +070C03070000120F150303140278190F19401950190309090B0E16030614076C1810F6ED +1739332F5D10F6ED1739332F002F3F1217392F71ED12392F2BED17393130012311231121 +11231123353335331521353315330135211505E3A8C6FD19C6A8A8C602E7C6A8FE92FD19 +0455FBAB02D9FD2704558CF0F0F0F0FEA8CCCC00000100130000045F0614001E00504030 +031D161D751D0317140E51111112180D08421B041201010D08150F021A0091201F206020 +02141517030B1A110F0D881F10F63232FD17325D10F6ED2F2F003F3C3F3FED123912392F +ED393931305D2123113426272E0123220607112311233533353315211521113E01333216 +15045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC63B5BE027C4D87262A294C3BFCBE +04F4869A9A86FEED4952DACD0002002C0000033307C8000B0025006DB9001BFFD040400B +10370E300B10370C0C15520F1C1F1C021C191C192252700F010F0F09043206030A033201 +0825280F0C1F0C020C1828190C276D080B5A0A1405025A19036D2610F432ED32FDED32E4 +332FED2F5DED003FED323FED32332F5DED33332F2F5DED332F31302B2B29013533112335 +2115231133130E01232226272E0123220607233E01333216171E013332363702D5FDB4C3 +C3024CC3C35E077D663453262D3C20302D0288037E683351282A431D2E31019804A19898 +FB5F0730989724262B2A5B4B88A6242528295B470002FFF200000241063C0003001D0054 +40347C0673130204040DAA1440090C37141114111AAA0707020501081DAD0440090F3704 +10AD117F1F011F9204001A117F010101881E10F65D32FD32ED5D2FED2F2BED003F3F332F +ED33332F2F2BED332F31305D21231133131406232226272E012322061523343633321617 +1E01333236350177BCBCCA6750283A1E202D17232170684E2F3220212C162421045D01DF +81821A202322454181821B1F2322483E0002005F000002FF073C000B000F004D40150E32 +0D0D09043206030A033201082F0F3F0F020F0EB8FFC040150B0D370E0F116D0A080B5A0A +140305025A0E036D1010F632F43210FDF43210E6332F2B2F5D003FFD323FFD32332FED31 +302901353311233521152311331321352102D5FDB4C3C3024CC3C32AFD6002A09804A198 +98FB5F060A9A0002FFFC0000023605D1000300070032401D025301010605057F00700202 +00027F0901099200041A027F050105880810F65D32FD32E65D2F2F5D002F3F332FED3130 +01213521032311330236FDC6023ABFBCBC05379AFA2F045D00020080000002DF07D3000B +00190059401F0C701201121216AA0F0F09043206030A0332010819290C400B0E370C1329 +12B8FFC040130B0F37120C1B6D080B5A0A1405025A12036D1A10F432ED32FDED32E4332F +2BED2F2BED003FED323FED32332FED332F5D333130290135331123352115231133131406 +232226353314163332363502D5FDB4C3C3024CC3C30A939C99979E454D49489804A19898 +FB5F073BA8CFCFA886726E8A00020001000002300668000D0011004840150006060A5003 +0310050F0D2900400B103700072906B8FFC040130B1037067F13011392000E1A067F0F01 +0F881210F65D32FD32E65D2F2BED2F2BED002F3F332FED332F3331300114062322263533 +1416333236350323113302308B8C8A8E924145414427BCBC06689AC0BE9C7A6B6283F998 +045D00010089FE5F031C05D10020004F402D1C20090C3709043206030A03320C01081717 +13531B0D1818102A1E1E0B02226D0A080B5A0A140305025A036D2110F4F43210FDF43210 +E61112392FED332F003FFD322F3F33FD323FFD3231302B21233533112335211523113315 +230E011514163332363733150E012322263534360174EBC3C3024CC3C3C2060942582141 +1309245122879A099804A19898FB5F981C29265150130B9E0A0BA08C22350002008EFE5F +024605DB0003001B0056401C0820090C371B1753070D014402400B0D3702030E050D1104 +04142A0AB8FFC040170B17370A0A0E7F1D011D9200600F1A01607F0E010E881C10F65DE4 +FDE4E65D11332F2BED332F002F333F3F2BED3FFD3231302B01233533130E012322263534 +3637113311230E0115141633323637330183D4D4C3245122859C2508BC3C060742582141 +13090518C3F8990A0B9E8E3F6F19040BFBA31A361B5150130B00FFFF002CFFEB034D0801 +0236002D0000011700D6FF6C01750014B1011AB8FFC040090B0E37001A160415252B2B35 +0002FFC2FE5902AF068C0015001C005540340A011C0102551B651B751B0318161A1B1B1A +1A123E150507070B40030D1A1A4F1301137F06010616121A1306160370150115921E10F4 +5D1732ED2F2F5D2F5D332F003FFD322F3FED332F332F1239395D31305D05140623222627 +35331E01333236373E01351123352137230B012313330209C8A828832C0A1C5F2D485816 +160DE901A5A69FB9B89BE4E31BC4C8100CB30B1C282828715103849EB40100FF00017B00 +FFFF00CDFE59057505D10236002E0000011600DCFB00000AB601001A0C0500252B35FFFF +00C1FE5904AF06140236004E0000011700DCFF7C00000011400C01301A401A02001A0C05 +0A252B5D3500000100C1000004AF045D000B007D40512802D801DB090309010F0D1F011D +021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A0802 +050A0507050105080B02600A700A020A0A00000D200D400D0208031A05890C10F4FD325D +11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0015D +7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B045DFDD102 +2FFDFC00000100C8FE59047605D1001A003F40240C20090C37111115530D0D0203043507 +01081010182A0A0A0105051C0F1C010414016C1B10F4ED5D11332F12392FED332F003F3C +ED3F3FFD322F31302B29011133112115211E011514062322262735331E01333236353426 +02BFFE09C602E8FEE30204B79225742D091A583268620605D1FADFB0122F18A2AC0E0CA0 +0A1A4E581E3E00010005FE5901E906140018003D40240A20090C370F0F13530B0D020104 +01080E0E082A1616017F1A011A92041A7F010101881910F45DFDE45D12392FFD322F003F +2F3F3FFD322F31302B2123113311331E011514062322262735331E013332363534260149 +8EBC6C0105AE8525642809184E285E52010614FA00123724A2AC0C0CA00B174F57153300 +FFFF00C8FE59053805D1023600310000011600DCFE000013400E01201630164016030016 +0A0400252B5D3500FFFF00B9FE59045F047C023600510000011600DC8B000013400E0100 +2310232023030023170D00252B5D3500000100C8FE59053805D10016009D401F00076107 +7107A107040C070B0C1B0736074607540765077507B001B0070A07B8FFC040510B113776 +06010F0102061F01150626013601340646014406560153066006790170060E0406015A01 +550602111115530D0D0207040806030A0104080110100A06010207130A78180F18401802 +0213046C1710F4ED5D10F4FD11393911332F2F003F33333F3C1239393FFD322F31300172 +715D5D002B5D71043501112311210111331114062322262735331E0133320480FD01B901 +330284B9CEB42751250B163A1E7F948A053EFACC05D1FBA00460FA18BFD10806A8050A00 +000100B9FE59045F047C00260045402B03150C191615751504100D084213040E050D081E +1E22531A0D1D1D021A1791281F28602802100B1A0D882710F4FD325D10F6ED332F003FFD +322F3F3F3FED123931305D0435113426272E012322060711231133153E01333216151114 +062322262735331E01333236373603A31218195E4B4DA84DBCBC58BC63B5BECCB4274E26 +0B163C1A4C6117162556024B4D87262A294C3BFCBE045D7C4952DACDFD0FBFCC0706A805 +0A262626FFFF0073FFE105DA0746023600320000011700D8009B0175000AB6020026270F +03252B35FFFF006AFFE1047105D1023600520000011600D8E300000AB602001A1B060025 +2B35FFFF0073FFE105DA0801023600320000011700D9009C0175000AB602002A240F0325 +2B35FFFF006AFFE10471068C023600520000011600D9E400000AB602001E180600252B35 +FFFF00C8FE59059805D1023600350000011600DCF600000AB602002420050D252B350001 +001BFE590372045D002700574034000D100D200D032120090C370C090F131317430A0F05 +1C090826260253220D25251F2A05050913132940297029020C1B1A09882810F4FD325D11 +332F11392FFD322F003FFD322F3F2F3F3CFD322F11123931302B5D1E0133323635342627 +231133153E013332161715232E012322060711331E011514062322262735333C4E285E52 +0102A6BC70AB59312C2C0A2A4F3657A24B840105AE8525642809FA174F57153323045DA5 +5A4B0507C10A094D3DFCFB123724A2AC0C0CA000FFFF0086FFE505020801023600360000 +011700D6004A0175000AB6010035311A00252B35FFFF006EFFE503D7068C023600560000 +011600D6AF00000F400A017F38010038341A00252B5D350000010000000004EE05D1000F +004140250D0A003203030F09043506030F0F111F114F11030B020B085B090D0009140204 +5B4F0501052F5DF432ED393910E4332F2F5D002F3FFD3212392FED393931300121352111 +21352115211121152111230214FEB4014CFDEC04EEFDEC014CFEB4C602E48F01AEB0B0FE +528FFD1C0001003EFFEA02FD059E0023006E40210420090D37181507510A0A0E030F140B +3E110F0E0523231F3F03094F257F250216B8FFC0401E090B3716160713008C250909070C +0A0E111504181A0C07400D103707882410F62B32ED17392F12392F10F63211392F2B5D00 +3FFD322F3F3333FD322F1112392FED393931302B250E012322263D012335331123353311 +331121152111211521151416171E01333236373302FD357D31ABB27F7F7F7FBC0184FE7C +012DFED30818164D4F2E64160A0A0E12B8CBA88601249E0141FEBF9EFEDC865358632B28 +251B0900FFFF00B2FFE1052907C8023600380000011700D700610175000AB601002B1E0D +1D252B35FFFF00B1FFE104570653023600580000011600D70600000AB601002417091625 +2B35FFFF00B2FFE105290746023600380000011700D800630175000AB6010020210D1D25 +2B35FFFF00B1FFE1045705D1023600580000011600D80100000AB60100191A0916252B35 +FFFF00B2FFE105290801023600380000011700D900630175000AB60100241E0D1D252B35 +FFFF00B1FFE10457068C023600580000011600D90100000AB601001D170916252B350001 +00B2FE5F052905D1003400634044231223183D093D2139224C094C214B22771377170A33 +20090C372E2E2A53320D1C24060D031534060A2F2F272A00060023030C1B141E76360F36 +1F364036030F140C6B3510F4ED5D10F6ED1217392FED332F003FED3F1239393FFD322F31 +302B5D053436372206232226272E01351133111416171E01333236373E01351133111406 +070E01070E011514163332363733150E012322260314050509190F8CD0475147C621272C +976A6B962D2721C647512D683D0405535A24511108344B2A8CA8741A271601494852E8A9 +037BFC7B798C394142414239936D038AFC85A2F1502C3B10143C17524E1B089F0E0C9F00 +000100B1FE5F0567045D002A005C40220B0619077A07032720090C370205150905114205 +0A010822221E53260D23231B2A29B8FFC04015091037292914021A17922C1F2C602C020B +1A08872B10F4ED5D10F4FD32322F2BED332F003FFD322F3F3FED3F3C123931302B5D0437 +350E01232226351133111416171E0133323637113311230E011514163332363733150E01 +23222635340395065FAE69B0C4BC101A1B565249AD4BBC1E0607535A24511108344B2A8C +A81D1D7C4B50D7D002D5FD8455792B2C284C3B0342FBA31B351B524E1B089F0E0CA08D24 +FFFF005C0000078D08010236003A0000011700D601690175000AB60100110D0600252B35 +FFFF005600000636068C0236005A0000011700D600BB0000000AB60100110D0600252B35 +FFFF0006000004E608010236003C0000011700D6FFEE0175000AB601000D090500252B35 +FFFF003DFE64047F068C0236005C0000011600D6DD00000AB601000C080400252B350001 +00B900000308061E0010002440140000043F0D0009080000081A6F097F090209891110F6 +5DED332F003F3FFD322F313001232E012322061511231134363332161703080A1F642679 +67BCC2BF3F652A055E09136B8CFB7D0482C2DA0C08000004001A0000055E08000012001E +00210025013F40862B20372040205A18551A501E55206918651A651E0A180B170D4A0646 +125906561278027703082020211F02370187010201140012002021033704870402041405 +05060606091226062912370638124606491258127A0675120B24240C702501251651A00C +F00C02060C160C3F0CF00C040C03340F2170210221212006120405201C401C020C1CB8FF +C0406C393937501C701C021C01050824400E10370F242F240222222440090D372413290F +0F2F0F4F0F8F0F9F0F050F19290009200940098009900905090F270106090F122405050C +0024003A0042005A006A0074000700006E270F27010A052B0535054D05550565057B0507 +05642610E65D5D10E62F5D1217395D2F5DED2F5DED2F2B332F5D2B003F3C2F5D2B335D12 +17392F5DED2F5D72ED2F5D12392F3130015D8710FD5DC0C0C08710FD5DC0C008C0015D00 +5D212303210323012E013534363332161514060727342623220615141633323613090207 +2337055ED394FD8094C901F83139A17373A039302A47393948493838487DFEFEFEFD021D +F39595019FFE6105571F65406D90906D40651FC4364B4A37394B4CFC6602CBFD3505B7CD +CD0000040068FFE1041D07330032003F004B004F00D6B50C0A190A0230B8FFC040880B0E +37590E51215C38690E63216F397B0A7A1474207B380A0208343D3011401102111149084F +4F4E4E43AA062916299F290329400B0D37292F0123494F1F011F291F184149043D41080A +01084E400D10374C4C4E40090C374E4E2640292F2C3F2C022C2C26297F468F4602464600 +0F1F011F1134021A001F0B0091510F511F513F51033A1B0B855010F6ED5D10E6113910FD +32322F5D12392F5DED332F5DED12392F2B332F2B003F3FED3FED33332F5D123911392F2B +5DED332F332F1112392F5DED123931305D012B5D2123350E01070E012322263534363736 +2437353426272E01232206070E010723353E01372E01353436333216151406071E011503 +110E01070E0115141633323603342623220615141633323613032313041DBB1955282F7A +5297D26D6566011EA42E29296D3F3A692A3150130A2369311C259F73739E2E237D87BB56 +E9445164747763A443473939484938384895F3959577113D12171FC89B7F9D2D2D20081D +4156171811140B0D1D07BF0914081E532E6D90906D335B1F22AA9AFE1D01370514131761 +5560614D042C364B4A37394C4D0262FEEE011200FFFF000E0000076D0801023600900000 +0117008D01DE01750011400C020F164F16020016140607252B5D3500FFFF0068FFE3073F +068C023600A000000117008D01690000000AB6030055541B00252B35FFFF0073FF6E05DA +08010236009100000117008D007801750013400E03303A403A603A03003A3B0F00252B5D +3500FFFF005DFF6C0471068C023600A100000116008DE2000011400C03302E402E02002E +2F0C00252B5D35000001015A03400249045D00030014400A01560205032D000201022F5D +ED003FED3130012311330249EFEF0340011DFFFF005C0000078D08010236003A00000117 +004301730175000AB60100100D0600252B35FFFF005600000636068C0236005A00000117 +004300C30000000AB60100100D0600252B35FFFF005C0000078D08010236003A00000117 +008D01690175000AB601000F100600252B35FFFF005600000636068C0236005A00000117 +008D00BF0000000AB601000F100600252B35FFFF005C0000078D07500236003A00000117 +008E016C01750020B10213B8FFC040120D10370F13010100135F13020013100600252B5D +355D2B35FFFF00560000063605DB0236005A00000117008E00BF0000001EB10213B8FFC0 +40100D10370F1301010013010013100600252B5D355D2B35FFFF0006000004E608010236 +003C000001170043000A01750014B1010AB8FFC040090D1037000A0A0500252B2B35FFFF +003DFE64047F068C0236005C000001160043FF000015401001200B300B600B700B04000B +090400252B5D35000001FFED03E40186061300030032B90003FFE4B70D10370101030100 +B8FFAEB30D103700B8FFE840090A0C3700007F0201022F5D332F2B2B003F332F3130012B +010323010186A5F4010F0613FDD1022F0001FFD00685051606FD00030011B60150020000 +05022F11332F002FED3130012135210516FABA0546068578000100890000048B05EE0028 +00934063411253125B1A6312730273129024B603B6240923200551000810082008030808 +1F1C09510F0C1F0C3F0C4F0C040C141418490C01100202284A01080F2A1F2A022327021C +1F20050C08215F1D6F1D7F1D031D0A061306081D13040220004000020000022F332F5D12 +17392F2F332F5D332F3333FD321139395D003FFD323F1239ED332F2F5DED3939332F5DED +393931305D2901353E0137233533352335333534123332161715232E012322061D012115 +21152115210E01071521048BFBFE67620E9DA4A4A3FDCD6998400A3E98568C8B016CFE93 +016DFE8F0F705A0345CF1B817B868C86A7C801012211CE2A30A59094868C86659F2C0B00 +000200B1FFE60511053200180022005F4013380D391C491C580D6A217A21060C100B0D37 +07B8FFF0402A090A37191F290F2615690F790F05013222220F1F32150B0B07330F090C0C +1913260001000024220114122FFD3211332F5DED332F003FED332F2FED12392FED5D2B2B +31305D01211416171E013332363733150E0123200011100021320011272E01272E012322 +06070511FC66423C3AA3607AEA590D82C07FFEC9FEAD01420113FF010CBE02262928875A +9FD50D027884B53E3C3B5648D53637015B0141013A0176FECDFEE92A549133333AD4B100 +FFFF00ABFFE1078305D50036023B9200003700BB023700000117024103F2FDC60016400C +040302100A010B400B7F0B025D1135003F353535FFFF008CFFE107A405ED0036023DA600 +003700BB02910000011702410413FDC600384026040302360A0403023900392039403980 +39FF3905013100315B317B3103000900093F094F09035D11355D11355D11353535003F35 +3535FFFF008AFFE107A405DA0036023FA400003700BB02910000011702410413FDC60038 +4026040302320A040302350035203540358035FF3505012D002D5B2D7B2D03000900093F +094F09035D11355D11355D11353535003F353535FFFF0099FFE1076F05DA00360240A600 +003700BB023100000117024103DEFDC6003640240403020E0A040302116F118011FF1103 +01092B093B0944095B097F0905000400043F04025D11355D11355D11353535003F353535 +00010061FE5901FA00880003002CB90002FFE840170D10370318090C3700180910370F01 +010101000D0202002F332F003F332F5D3130012B2B2B1B01330161A5F4FEF1FE59022FFD +D10000010161FE59037000140014002440150B021B012B013901041207070B53030D0E2A +0000062F332FED003FFD322F2F31305D0514062322262735331E0133323635342627331E +010370B79225742D091A58326862060399020659A2AC0E0CA00A1A4E581D491913340001 +0212050C0305068C000300144009030302002D100301032F5DED002F332F313001032303 +0305319131068CFE8001800000030100050C0418068C00030007000B003F401506050AAF +090902000002072B0640090A37060A2B0BB8FFC0400C090B370B06002D0B100301032F5D +33FD322F2BED2F2BED002F332F12392FED3939313001032303012335330523353302FD31 +803101FDBFBFFDA7BFBF068CFE800180FE8CC3C3C300FFFF00070000055E05D102360024 +00000117019DFDF5FF450012400A020E03020E1F0E4F0E025D1135003F35FFFF00000000 +059005D10037002800F300000117019DFDEEFF4500204014010F030F111011401103011F +0C010C00400101012F5D352F5D355D003F35FFFF00000000062E05D10037002B00F30000 +0117019DFDEEFF4500204014010F030F112011401103011F0C010C00400501052F5D352F +5D355D003F35FFFF0000000003C805D10037002C00F300000117019DFDEEFF4500244018 +010F03011F0C010C00400201020F111F11401150116011055D2F5D352F5D35003F35FFFF +0000FFE1069905F00037003200BF00000117019DFDEEFF45002240150227030F29010227 +1F270101000F000F100F700F035D1135355D11355D003F35FFFF00000000060105D10037 +003C011B00000117019DFDEEFF45002440180109030F0E1F0E2F0E03011F090109001F04 +4004700403042F5D352F5D355D003F35FFFF0000000006D705F0003701BB00B700000117 +019DFDEEFF45002A401E012B03011F2B012B00001C101C201C031C0F2D202D502D602D70 +2D8F2D065D2F5D35115D35003F350004FFCB00000267068C00030007000B000F005C401D +0A090FAF0C0C06070706060205010B2A0A40090F370A0A0404000E2A0FB8FFC04015090F +370F0F0707017F11011192001A7F010101881010F65DFDED5D11332F332F2BED11332F33 +2F2BED002F3F332F332F12392FED39393130212311331303230301233533052335330177 +BCBC0438543801B0ABABFE0FABAB045D022FFE800180FE8CC3C3C300FFFF001A0000055E +05D1021600240000FFFF00C80000052B05D10216002500000002001A0000058605D10003 +00060058403C49056A050205041A000003061A01010215001A0125002A0145004A014B02 +4403590256036B0264037B0275030E020305030000080105010203065401002FED3F1239 +012F11332F17395D31308710FD8710FD04C0005D2901012109020586FA94023201080127 +FE50FE5105D1FAD7047BFB85FFFF00C80000049D05D1021600280000FFFF007E00000508 +05D10216003D0000FFFF00C80000053B05D10216002B0000FFFF0089000002D505D10216 +002C0000FFFF00CD0000057505D10216002E00000001001A0000056205D10006006C404E +0902390258020378017703020203020114000600020314040405490546067C0573060405 +030405002400390042005A006A007400070000080F08010F08010A042B0436044D045504 +65047B0407042F5D5D5D11332F5D002F3F3130015D8710FDC08710FD08C0015D005D2123 +09012301330562D5FE2CFE2CCB022CF00505FAFB05D1FFFF00C8000005F605D102160030 +0000FFFF00C80000053805D102160031000000030072000004BF05D100030007000B0047 +40130535060609013502030A350908054009133704B8FFC0401609133704050504030204 +0908720D0F0D1F0D0209680C10E65D10E41117392F2F2B2B003FED3FED12392FED313001 +213521032135211321352104BFFBB3044D34FC1B03E534FBB3044D0521B0FD08B0FC77B0 +FFFF0073FFE105DA05F0021600320000000100C80000053B05D100070027401703350603 +010501140078090F0940095009030414056C0810F6ED5D10F6ED002F333FED3130212311 +2111231121053BC6FD19C604730521FADF05D100FFFF00C80000049605D1021600330000 +000100760000050005D1000C00EB404709040908450B540B6409640A660B9309930A960B +A409A30AA70B0D0608060B1608160B28032708340A340B430A430B5903550B670B760B8B +0399049908B804B808EB04EB08150BB8FFC0B32529370AB8FFC0B325293709B8FFC0B325 +293708B8FFC04030262937030203080908B3040304030B0A0BB302030264048D02020403 +0203080B3501083505030403A009B009D0090309B8FFC04023191E371009200960097209 +D009E00906090703040B0908070602000010000200000E022F11332F5D1217392F2F5D2B +71332F003FED2FED11173931305D011087ED87C01087ED8708C0012B2B2B2B5D71290135 +090135211521011501210500FB76026CFDA80448FCC0024AFD8A039AB80258020EB3B0FE +061AFDA3FFFF0000000004EE05D1021600370000FFFF0006000004E605D10216003C0000 +FFFF00440000053805D10216003B0000000100B30000064405D10023006240402515251E +021B067518011834380948096F090309192209030810030822142311141023071B180714 +108008A008B0080320255025702503080825240F253F25025D1112392F5D5DC4ED393910 +C42FED2FED002F3F1217392F5DED5D393931305D011406070E01071123112E01272E0135 +1133111416171E01171133113E01373E013511330644514D50E197C59AE24B4E51C63B34 +359A62C5619C353836C6038E9DD74345460AFEBE01420B484245D69C0243FDA66D8E2C2D +2F0703E4FC1C082D2E318571025A0001006C0000062005F00027007D40125B195B256C1A +641D64216C24791A79240821B8FFC0B3090B371DB8FFC0403B090B373002301440024014 +041925140204160B341F02261835011608251202191214081502141C272222290F29010F +291F299029A029040E15171C2FC4ED5D5D11332FC4123939ED2FED2FED003F3CFD3C3FED +1217395D31302B2B5D2901113E01373E01353426232206151416171E0117112135213526 +023510002120001114020715210620FDC03C772C2D34FEDCDCFE342D2D763CFDC0019A9D +CB0177013101310177CB9D019A01832658393B9F6ACEF9F9CE6A9F3B395826FE7DAE7C5A +0138C20114015EFEA2FEECC2FEC85A7CFFFF007E000002E207500236002C00000117008E +FF240175001940130200104010501060107010050100100D0409252B355D3500FFFF0006 +000004E607500236003C00000117008EFFED01750019401302000E400E500E600E700E05 +01000E090500252B355D3500FFFF006CFFE10443068C0236012E00000116019DE200000A +B6020024210800252B35FFFF006DFFE603EE068C0236013000000116019DCC000013400E +014041504170410300413E1219252B5D3500FFFF00B9FE64045F068C023601C600000116 +019D1D00000AB601001A170E16252B35FFFF00A000000193068C023600D500000117019D +FE8E0000000BB601000704020325012B3500FFFF00B1FFE2045C068C023601D100000116 +019EFB00000F400903020100221F0717252B35353500000200B9FE64048D061400180037 +0077404F16200D1037070F4A1B4326433756267929062E200D0F3733200D103705200D10 +371615203E5F21012121032B3E0C0135400309080C15120F200120281B12122008191B00 +90391F390132071A08883810F6FD325D10F6ED1239392FED2F5D1239003F3FED3FED1239 +2F5DED393931302B2B2B5D012B011400232226271123113436333216171E011514060715 +1E01073426272E012B0135333236373E01353426232206070E0115111E01333236048DFE +F3CD4FB03FBCFDDF5A953B39448B7F9FBCC2453A3B924924244282272E2D8A6D49682120 +1E42964895A101BCCAFEF82C2AFE2405D2E0FE2B2E2B8A5B7FBD25111AC797596F1F2016 +A01D1E2262557074352C2C753EFCA2261F9D0001003DFE64047F045D0008006940497507 +01070607081A00010007061A04050505030C0A001A002A004A0059006900750007000505 +15052505450556056605730507050001011A059004A0040204040A091F0A4F0A5F0A035D +1112392F5DC4ED10C42F5D2F5D003F3F31300187FDC08710FD08C0005D09011123110133 +0901047FFE37BCFE43CC0157015A045DFBDBFE2C01D40425FCC4033C0001006CFE6403D6 +0614002F0058401D4600570065287F1178207D21061D1A3E1B012D3F0F070C1A1A19121C +07B8FFE04018090C37000701071C070BB40303310F313F3102231B12853010F6ED5D1133 +2FED33332F5D2B2F1239392F003F2FED3FED3931305D251E011514060723353E01353426 +2B012226353412373E013735213521150E01070602151416171E01171E013B013216039A +201C5A43B35A4C3D2F91E5DE5C4E4BC56CFE3402E875E55A5972060C0A31272479385647 +664B285B2854A93F0E4F7745394CE8E58C01007770CD5E099E874ECE7875FEE88F224828 +264B18160534000100B9FE64045F047C00160038402303151615731503100D084213040E +05010C0D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3F3F3FED12 +3931305D0123113426272E012322060711231133153E0133321615045FBC1218195E4B4D +A84DBCBC58BC63B5BEFE6404184D87262A294C3BFCBE045D7C4952DACD0000030089FFE1 +04750614001700240031006CB9002FFFD6B30A0D3729B8FFD640400A0D37212A0B0D371B +2A0B0D37662C01263E0F241F24022424061E3E3A124A120212012C3E3506450602060A25 +181A0000331F333F330224261A800C900C020C2F5DFD325D11332FFD32003F5DED3F5DED +12392F5DED5D31302B2B2B2B011406070E01232226272E01353412373E01333216171612 +072E01272E01232206070E010705211416171E01333236373E0104752E243AD29898D23A +252D2D2639D39797D339252EBD043120296C4F4F6C29222F040272FD8E2E2428704F4F70 +28242E0300BEFD548789898754FDBEAE010753828A8A8254FEFA548FD6364639394637D5 +8FA18EE93E453E3E453EE900FFFF00BB00000177045D021600D50000000100C1000004A8 +045F001800D3403B0601060216182618451856186618071C023A0169027A029701A602A6 +18C70208020203C60101860101011A001800090801F90801080B0A03090109B8FFEE4040 +10183709B402181703177F0301091808020305010C1010143F0C05060505011A172A1736 +178017A417051517251777179417E917F917060917180201050F0F00B8FFF04013090E37 +00001A0F1A1F1A3F1A0308031A05891910F6FD3C5D11332F2B332F17395D71002F2F3F3F +FD322F111217395D3130018710C0C07AF52B7118C0C004C07172018710FD5D7108C0015D +71212301071123113311013E013332163315232E01232206070304A8F8FE3D70BCBC0180 +487F3F1C3C070B102F0D2F4D1DFB01E96DFE84045DFDDA01A14F3802A602022F21FEF100 +0001003D0000047F061400070085401305040502020306011A07000002031A04040505B8 +FFF0401C0C10372B002604200703050402030601000806680701070506030400B8FFC040 +260910370C001C004B005A006A00790006008D090F090103041304440455046504760406 +04820810E65D5D10F65D2B1117395D2F003F3F17393130015D2B8710FDC01087FDC008C0 +08C0012123090123010333047FCDFEB8FE97C401D1D7D3033DFCC3042001F400000100B9 +FE640465045D00150046402C12200B0D3703200B0D37080205140B051042050900080A0C +0102131A0092171F1760179017030D091A0A881610F6FD3C5D10F6FD3939003F3F3FED3F +3C12393931302B2B2123350E012322262711231133111E013332363711330465BA4A874E +4B7854BCBC209E5B5D8836BC764E3D3650FDF305F9FCBA2752433C034000FFFF003D0000 +047F045D02160059000000010068FE64041106140046008A403C0F020F06090E1B0E241E +24283415361E36284428473C562D563C691779170F1918333F32320C24213D22013F3F0C +030C191C3232232121122B1B1C04B8FFD6400E090C37040408B4231C1280000100B8FFC0 +400B090C370000483A1B12854710F4ED11332F2B5D123939ED332F2B2FED12392F2F332F +1239003F2FED3FFD3212392FED393931305D0514060723353E013534262B012226272E01 +353436373E0137352E01353436373523352115212206070E01151416171E013B01152122 +06070E01151416171E013B013216171E0104115B42B45C4B3A2E8C8CB93F424532302C89 +4C7D96575AE40338FF00446D302D3641332D7650AAFED942692F2B334B403F995A1C4467 +211F226055A83F0E4F7844374E36393C97584E84353145130B1CA56853873A069A9E1D22 +2066434F621A1716A52827256A3B66721919072F25235F00FFFF006AFFE10471047C0216 +00520000000200B9FE640494047C0011001E0042402C3A17351E4A17431E560D05060315 +3E0F041C400309080C121B3A004A00020090201F206F200219071A08881F10F4FD325D10 +F65DED003F3FED3FED123931305D011000232226271123113436373E0133320003342623 +220615111E013332360494FEEBDE41A348BC47423EBB66F30100C2A0929E8D49774BA2B0 +0241FEFEFEAB242BFE2B04227BB9423E42FEDAFEDFDACCC0B6FE6D221DDE00010069FE64 +03FA04770029005C40120C020C06201325233614362340237A1F0817B8FFE040140E1037 +3F194F190219191D3F1504030C263F0B04B8FFD64011090C370418180408B400002B201B +12852A10F4ED11332FED33332F2F2B002FED3F3FED332F5D31302B5D0514060723353E01 +3534262B012226272E013510002132161715232E01232206151416171E013B01321603FA +5E3EB1564D3C2D5C75C64B49530137010354A0430C5E9D44A6BD393232814B64738E6057 +AA3B0E4B7947364F3C4342D092010E0144251BD33E32EEC1708E2D2C2799000100B1FFE2 +045C045D00170030401F1607050F3E0903560366037903880305030A151A0091191F1901 +091A06871810F6ED5D10F6ED003F5DED3F333130011406232226351133111416171E0133 +3236373E01351133045CF4E2DFF6BC14201F6B5C56731E1D15BC0197DADBD7DE02C6FD7F +5D782E2B2B2C2C2C7B5A028100010030FE640488045D000B00A240492A02250839023408 +4B02440879020710091A0A0B0A071A060506011A000B00031A04050402050B080A000606 +0A0405064A0445066A0465067A04770608040C0605080B050204040A00B8FFE040100A10 +3700000D2F0D010604200A1037042F2BC45D11332F2BC4121739003F3F5D111739313001 +8710ED8710ED8710ED8710ED4B535840140B030A070002030A0601080409070005040906 +010F0F0F0F59005D0123090123090133090133010488D5FEA6FEA2CB01BCFE4FD5014F01 +53CBFE4FFE64026BFD95030202F7FDA80258FD11000100B0FE6405E3045D0023006B4047 +1B062618751802183D39094909020919220903081005080C221A3F237F230223111A3010 +7010021023071B18071A109008C008025025602502080825240F25010F251F253F25035D +5D1112392F5D5DC4ED393910C42F5DED2F5DED003F3F1217392F5DED5D39393130011406 +070E01071123112E01272E01351133111416171E01171133113E01373E0135113305E360 +4F52C873BB73C753505FBC4B34388643BB4386383B44BC01BE72A835373705FE68019806 +343936A772029FFD9C718723261E0403C7FC39051C27287B7802640000010071FFE20611 +045D003D0079402D361F3632441F4432551F55326804680F691A69377D1A7D370C283B28 +0903061605210D303E060A3A400C0E3718B8FFC040240C0E37361B001B1B13003A29090A +291A18139028A028C0280328283F3E1F3F3F3F6F3F035D1112392F5DC4C4ED393910C4C4 +2FED2FED2B2B003FED39393F1217392F31305D011406070E0123222627230E0123222627 +2E013534123733150602151416171E01333236373E01371133111E01171E01333236373E +01353402273533161206112F33379D7360A2250627946671A333332F7290E4879F101E1A +5D47334714161D06BA091C1518393A465E1B19169D89E4907201F760C14B505963434462 +5D4C4CBF61AA0115A7116CFECCB742713F37491911122C0F0248FDB8112C111316473937 +7A41B601346D11A7FEEBFFFF00050000022D05DB021600770000FFFF00B1FFE2045C05DB +023601D100000116008EFB000015400F02301D501D601D0301001D180717252B355D3500 +FFFF006AFFE10471068C0236005200000116019DE200000AB602001B180600252B35FFFF +00B1FFE2045C068C023601D100000116019DFB00000AB601001B180717252B35FFFF0071 +FFE20611068C023601D400000117019D00B60000000AB60100413E1300252B35FFFF00C8 +0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500 +0001FFFF0000060705D1002500614025652476240216341F1F061E1A351B03093506182F +073F074F077F0704070717590F010F1500B8FFC04014090D370000270F27011A1F1D011D +1D1F17141A182F33FD32322F5D2F5D11332F2BED5D12392F5D002F2FED3FFD3212392FED +31305D011406070E012B0135333236373E01353426272E01232111231121352115211121 +3216171E010607534957AF8A6E5D5B782F38343135329583FEEBC6FE520468FE0C015398 +BF554C4901CC6CB13A4530B11022286F4E4B73232213FD220521B0B0FE6824423BAEFFFF +00C80000048A07ED023601EB00000117008D003501610015401001300840086008700804 +0008070405252B5D350000010073FFE5053905EC002A006A400C3A1C491C58057606790C +0511B8FFE040370A103701200A103720341D1D0F032A2A26340309131317340F021E1E13 +000010000200002C0F2C010F2C1F2C2F2C3F2C041D206C09682B10F6FD325D5D11332F5D +33332F003FED332F3FED332F1112392FED31302B2B5D250E012322242726023534123736 +243332161715232E01232206070E01072115211416171E013332363733053963EC91A9FE +EE61616969625F0112A98CF65F104EF98D6DAE4846580F0334FCC258474AC4708AF75010 +4127356863630120B7AF011F66626C3427DF40523A3B3BAD72AD8BD94648494A4300FFFF +0086FFE5050205EC021600360000FFFF0089000002D505D10216002C0000FFFF007E0000 +02E207500236002C00000117008EFF240175001940130200104010501060107010050100 +100D0409252B355D3500FFFF002CFFEB02EA05D10216002D000000020012FFFD08A205D1 +000E003D0066B3460C0130B8FFACB30A10371EB8FFC0401D0B0E37073437371618353503 +28282C352408341637081416163500150FB8FFF440110E11370F713F2F3F011813003501 +3535282F332F5DED5D10F62BFD11392FFD32002FED2FFD322F3FED12392FED31302B2B5D +013426272E01232111213236373E01371406070E01232111210E01070602070E01070E01 +2322262335331E01333236373612133612372111213216171E0107D33235379083FEEC01 +0F858F363834CF554754C098FDEEFDF0030B0308251D1D492F306544153C0C0E0A1E0F24 +401647430E050B040391015298C0554C4901C94B72232510FDCB1A252769556CB0374238 +052171D955D6FEEC595A6B2B2C2603C001021617470146012D62014487FDB823423BAE00 +000200C80000088305D1000E002700554020171E07342121161F1B030834161A560F0120 +1F081400166F160216161900150FB8FFF4400F0E11370F71294029011D19141A6C2810F6 +FD325D10F62BFD11392F5DED39395D002F2FED3F3312392FED39393130013426272E0123 +2111213236373E01371406070E0123211121112311331121113311213216171E0107B432 +35379083FEEC010F858F363834CF554754C098FDEEFD65C6C6029BC6015298C0554C4901 +C94B72232510FDCB1A252769556CB037423802DEFD2205D1FDB80248FDB823423BAE0001 +FFFF000005FD05D1001D00504032000E48175817600E620F700E700F0708011A350B0B01 +07033504031301131412121F5F067F0602060306070014037F0101012F5D33FD32322F2F +5D11332FED002F333FFD3212392FED123931305D2123112135211521113E01333216171E +01151123113426272E01232206070273C6FE520468FE0C5FF66765AA3D3D45C6161E2079 +646AC3660521B0B0FE2D1F33323534A373FE11018C4A8C2B2E312622FFFF00CD00000575 +07ED023601F200000117008D003C01610010400A01702301002321050025012B5D350002 +0006FFF904E6078F001A002800AF405A29033801461955140419191A1814171617161716 +191A130001001617181A010500070B0B0F35071B0F21702102212175250125AA0F1E011E +1E0003281A1B221A702101211B2100700A010A360156016501760104160A01031700B8FF +E0401409103700002A502A012A400910371720091037172F2B2B5D11332F2B1217395D2F +5D1139392F5DED2FED003F332F5DED5D332F5D332FED322F11121739018710FDC008C001 +8710FD08C03130005D09010E01070E012322262735331E01333236373E013F0101330901 +030E0123222627331E013332363704E6FDCA225D3634612D2872100E0F462D14481C203F +1624FDD6DB01B301862105C9A8A8C905B602605E5F5F0205D1FB1B4C621B19110801B902 +09060B0C34324F044FFC92036E01BEA6A8A8A67063627100000100C8FEAF053B05D1000B +0032401C060203043409000B0913000002061407780D400D700D020314026C0C10F6ED5D +10F6ED12392FED002F2F33ED3F33313029011133112111331121112302A4FE24C602E7C6 +FE24BB05D1FADB0525FA2FFEAF00FFFF001A0000055E05D1021600240000000200C80000 +052C05D100120021003E40256311011A340C0C070B3508031B3407080A0A131556000100 +71230F234023020C1B14076C2210F6FD325D10F45DED332F003FED3FED12392FED31305D +011406070E0123211121152111213216171E01073426272E01232111213236373E01052C +554754C098FDE403E5FCE1015C98C0554C49CF3235379083FEE20119858F36383401CD6C +B037423805D1B0FE6823423BAE724B72232510FDCB1A25276900FFFF00C80000052B05D1 +021600250000000100C80000048A05D10005001F401003013504030000070F0701021403 +6C0610F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D10002 +000AFEAF059E05D1000D00130049402A09121A124A110310340A030C1307340301051013 +0A0A070E140C0C0113200001000015131307070413052FED392FED11332F5DED392FED12 +392FED002F332FFD32323FED31305D01231121112311333612112111332111210A010705 +9EBCFBE4BC78829B03728DFEADFE0E0E9476FEAF0155FEAB0201D602B1019AFADF0475FE +9BFDAFBFFFFF00C80000049D05D102160028000000010020000007A805D1003700C7402E +093318332933401D40244135541D54247518711D73240B27133333351A130E0C0E020116 +09103701130037000708B8FFEA405A091037081309090A271F1A032C223237070A0C0E33 +35072C02142D350409021521052C03002F0A20375F0A50376F0A6037062C2C0137022733 +350600C5220414051515080A070C0E1A0609C51F0505393810393F395F397F39045D1112 +392F33F41739322F10FD32F41739322F5D002F3F1739FD322F121739FD111739018710FD +2BC08710FD2BC08710FD8710FD3130005D21230123112311230123012E01272E01272E01 +2B0135333216171E01171E01171133113E01373E01373E013B0115232206070E01070E01 +0707A8F2FDF469C46BFDF4E6025158682013251C1B533C3C47A7B23D0B1E0F2C8F56C45C +912E121D093CB5A5473C424B1E1D25132A7D3E02A9FD5702A9FD5702FE3A9C693D571C1B +18B17FAD1E5824696608029DFD610663702C5519AC80B1171C1B5B3A8587270000010051 +FFE5048505EC0040007F40145401583B6701693B7F0B7F0C7031703274380932B8FFE040 +3F0B10370B200B10373E3D1D3420200934703001303029343402100D7F0D020D0D113409 +0A3D1E0B0D37171E0B0D37236C3A1E1E3D3A030C171503734231310C2F332F10F6ED1217 +392F2FED2B2B003FED332F5D3FED332F5D1112392FED393931302B2B5D011E0115140607 +0E012322262735331E01333236373E01353426272E012B0135333236353426272E012322 +06070E010723353E01333216171E0115140607151E010416303F5B4650E68593FB4A0F63 +F97148A83436313C33339159C9B3ADD2352E2D6F4C4E843B3064170D4BF87E7BB14B4E52 +A37D347602CD2A816669AA3C4444371EDE3B4B2A292D6F454F651F1E1BA97F7836521818 +151E1411340DDB2036272C30885A7FB01B0F092F000100C80000053905D1000900644023 +0B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D07B8 +FFE840240B0F3702100C0F3707060102040308030308030807021400780B0F0B400B0207 +14046C0A10F6ED5D10F6FD113939003F3F1217392B2B31305D7121231101231133110133 +0539C5FD1CC8C502DBD104A9FB5705D1FB690497000200C800000539078F000900170093 +40320B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D +0A0F10701002101014AA0F0D010D0D07B8FFE840330B0F3702100C0F3707060102040308 +030308171A500A600A020A111A100A10000403080702140078190F194019020714046C18 +10F6ED5D10F6ED113939111239392FED2F5DED003F3F1217392B2B332F5DED332F5D3331 +305D7121231101231133110133030E0123222627331E01333236370539C5FD1CC8C502DB +D1B505C9A8A8C905B602605E5F5F0204A9FB5705D1FB69049701BEA6A8A8A67063627100 +000100CD0000057505D1002000AF407909011F01290127203A0137204B0147205C016500 +6720760074200D1F200A0D370C200A0D370202038801C8010201B30020001E661B861B02 +1B13120D120D121B1E04152002322F08010808000716351503070305000D121B1E200504 +4F150115150F2220003000400004500001006E22402201080414056C2110F6FD325D10F6 +5D5D322F5D121739002F2F3F3FED1112392F5DFD39121739018710FD5DC031300187107A +FD5D1808C0012B2B5D2123012311231133113E01373E01373E01373E013B011523220607 +0E01070E01070575FEFDA387C6C6335A28284E1E0D231245B9B44F53454E1F1D2B17346B +5A02A7FD5905D1FD6401121917553E1B522DA686B1191D1A583B847C2E0000010012FFFD +051805D10021003DB9001BFFACB309103709B8FFC0401A0B0E370335200301131317350F +01140078238F230103132020122F332FED5D10F6ED002FFD322F2F3FED31302B2B212311 +210E01070602070E01070E012322262335331E0133323637361213361237210518C6FDE6 +030B0308251D1D492F306544153C0C0E0A1E0F24401647430E050B04039B052171D955D6 +FEEC595A6B2B2C2603C001021617470146012D6201448700FFFF00C8000005F605D10216 +00300000FFFF00C80000053B05D10216002B0000FFFF0073FFE105DA05F0021600320000 +000100C80000053B05D100070027401703350603010501140078090F0940095009030414 +056C0810F6ED5D10F6ED002F333FED31302123112111231121053BC6FD19C604730521FA +DF05D100FFFF00C80000049605D1021600330000FFFF0073FFE5054605EC021600260000 +FFFF0000000004EE05D102160037000000010006FFF904E605D1001A0080403C29033801 +461955140419191A1814171617161716191A130001001617181A010500070B0B0F350700 +03700A010A360156016501760104160A01031700B8FFE0401409103700001C501C011C40 +0910371720091037172F2B2B5D11332F2B1217395D2F5D003F2FFD322F11121739018710 +FDC008C0018710FD08C03130005D09010E01070E012322262735331E01333236373E013F +010133090104E6FDCA225D3634612D2872100E0F462D14481C203F1624FDD6DB01B30186 +05D1FB1B4C621B19110801B90209060B0C34324F044FFC92036E00030069FFF0062405E1 +001D002A00370058403624182C321525062B32091509081603082A1E253265006A0F041E +150032150F00072B1518250407140F080839381F393F396F399039045D1112392FC4ED17 +3910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01071523352E01 +272E01353436373E01373533151E01171E01073426272E0127113E01373E0101110E0107 +0E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F4B57CE403B3A +8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A524AD88C88CC +4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01363737AA6170 +B63A2D3CFFFF00440000053805D10216003B0000000100C8FEAF05BE05D1000B0032401C +0602030B08043501080514080800130D40090B370A0A0D0414016C0C10F6ED11332F2BED +392FED003FFD322F3F3331302901113311211133113311230502FBC6C602DDC68DBC05D1 +FADD0523FADDFE010001008E000004EA05D10019003B40243511451154116C0974160502 +0C1435050500180C030017011400781B0F1B010D140C6A1A10F6ED5D10F6FD32002F3F33 +12392FED123931305D2123110E01232226272E01351133111416171E0133323637113304 +EAC681DD6463AC3F3F47C6142323726B71D652C60276282A313535A47201FCFE67577930 +2F2F281E02B1000100C80000077605D1000B003640200A06020308043401091400C60814 +05041401C605050D0C1F0D3F0D500D700D045D1112392FF4ED10FDF4ED002FFD323F3333 +31302901113311211133112111330776F952C6022EC6022EC605D1FADB0525FADB052500 +000100C8FEAF080305D1000F004140260A0602030C080434010F0D13000009140CC60814 +05041401C6050511101F113F1150117011045D1112392FF4ED10FDF4ED332FED002F2FFD +32323F33333130290111331121113311211133113311230747F981C6022EC6022EC68DBC +05D1FADB0525FADB0525FADBFE0300020000000005F405D1000E00210046401D07341B1B +1618351903083416560F011B08144F167F160216161900150FB8FFF4400A0E11370F7123 +0F2301192F5D10F62BFD11392F5DFD325D002FED3FED12392FED3130013426272E012321 +11213236373E01371406070E0123211121352111213216171E0105253235379083FEEC01 +0F858F363834CF554754C098FDEEFE660260015298C0554C4901C94B72232510FDCB1A25 +2769556CB03742380521B0FDB823423BAE00000300C80000069505D1000E001F00230055 +4016440D0107341919161703083416220321560F0100150FB8FFF4B30E11370FB8FFC040 +150C10370F0F21142078250F25702502190814166C2410F6FD325D10F6FD322F2B2BED5D +002F3F2FED3F12392FED31305D013426272E01232111213236373E01371406070E012321 +113311213216171E010123113304533235379083FEEC010F858F363834CF554754C098FD +EEC6015298C0554C490173C6C601C94B72232510FDCB1A252769556CB037423805D1FDB8 +23423BAEFDC505D1000200C80000052205D1000E001F003C401007341919161703083416 +560F0100150FB8FFF440110E11370F71210F21402102190814166C2010F6FD325D10F62B +ED5D002FED3F12392FED3130013426272E01232111213236373E01371406070E01232111 +3311213216171E0104533235379083FEEC010F858F363834CF554754C098FDEEC6015298 +C0554C4901C94B72232510FDCB1A252769556CB037423805D1FDB823423BAE0000010061 +FFE5052905EC002A0070400A3A1C491C640676060426B8FFE0403E0A10370B200A103718 +34191928092424203428020D0D11340909060316035603031A24171403732C0F2C010F2C +1F2C2F2C3F2C04241824180F0C1F0C020C2F5D33332F2F5D5D10F6ED11395D003FED332F +3FED332F1112392FED31302B2B5D0116121514020706042322262735331E01333236373E +01352135212E01272E012322060723353E0133320404616068696366FEEFA38DFE571051 +F78D7BCC444849FCD303230E5C4747B46689F057115DFE85AC010F052C60FEE4C2ACFEDF +676A6B3625DB414D574B50C980AD77AF3939374D43DC27356000000200C8FFE107D305F0 +000B001E006240427814010903060915161A1C5616591C7916761C080C34131E1314031C +03341602100309341C090F13190615180C3F0C580C6F0C040C0C0F0015197320120E140F +6C1F10F6FD3210F6ED12392F5DED1239002F3FED3F3FED1217392FED5D31305D01100023 +2200111000333200012311231133113312002120001110002120000705FEFFDBDDFEFE01 +03DCDB0101FB79F0C6C6F924016A0113013F016CFE90FEC5FECCFE9102E801280135FECC +FED7FEDBFEC90136010EFD3005D1FDAC012D0146FE63FE95FE93FE6601890002002C0000 +04DE05D10010001F0066400C28033506471C5A0759170504B8FFE8403209103703041305 +0506060F113440030103030012340F03000519150904060309045F050105120114007821 +0F2140216021035D10F6FD322F5D17392FED002F2F3FED12392F5DED12393130018710FD +C02B005D212311210123012E01353436373E0133210311212206070E01151416171E0133 +04DEC6FEBFFE43EE01DE96A55F4E47BE7301EAC6FED256682B2E3425292D82560250FDB0 +026E33D5B372A5373228FD240232161D1F7043506A292C1EFFFF0068FFE1041D04780216 +0044000000020074FFE1047C061D00270039006440160C1F35043D29303940044B294039 +6512751273330A33B8FFC0402B0B0D3722062B41002510250225250619411800373F060A +223118180C281B03903B1F3B3F3B02311B0C863A10F6ED5D10F6ED12392F1239003FED3F +ED12392F5DED123931302B5D011E01151400232226272602353436373E01373E01373E01 +37150E01070E01070E01073E01333216133426232206070E01151416171E0133323603EE +4648FED4DB6CB640504F0E19144D3548EBC24F883642814080CF303535084BB3655EAE0F +B29257A04802033A352E6C3E97AA03B846C786FAFEB6494C5F0121D04B9B6C5DAC354959 +11070904AD0408060B3E3135AB4D36493EFE22B9B7372E19431CAED840362DDA000300B9 +00000453045D0015002400330061400C0A0305141A0315147623050CB8FFD6402F090C37 +12112C3C4F1E011E1E071D3D08052D3D0708161B122C0F0F07251B00100D10370090350F +35011E2C1A07883410F6FD325D10F42BED12392F1239ED003FED3FED12392F71ED393931 +302B5D011406070E01232111213216171E0115140607151E01033426272E012B01113332 +36373E01133426272E012B0111333236373E010453413940977BFE3201B07D7F383F3B5E +4A6381FD1F202A694DC4EB4A4724261D3B243D26584EF1B270792C2C2B0152517E2A2F2A +045D111D216A48537A220A1889017D243A101505FECE0B161841FE4237451D1207FE930F +19194800000100B9000003BB045D0005001F4010013F040503700001000007021A038806 +10F6ED11332F5D002F3FED313001211123112103BBFDBABC030203B8FC48045D00020009 +FEF404AF045D000D00130053401C3B124A12020105103E0A050C13073E0310C90A0A070E +1A0C0C01C900B8FFC040120B0E370000152F153F1502131A070704C9052FED392FED5D11 +332F2BED392FED12392FED002FFD32323FED2F3331305D01231121112311333612112111 +3321112106020704AFAFFCB8AF79757302BE87FEBDFEAF0D8053FEF4010FFEF101ACC101 +F90103FC43031FFBFE628600FFFF006AFFE60460047C0216004800000001003400000632 +045D003100D840123A0E3A2D4A0E4A2D5F0C5F2F6F0C6F2F0826B8FFE0B3090B3715B8FF +E0401A090B3724B42D2D2F17B40E0C0E020116091037011A0031000708B8FFEA405E0910 +37081A09090A241C1703291F3C31070A0C0E2F2D072902112A3F040902121D052905002E +0A21315E0A51316F0A60317F0A7031082929013102242D2F0600C71F041A051212080A07 +0C0E170609C71C0505333210333F334F336F33045D1112392F33F41739322F10FD32F417 +39322F5D002F3F1739FD322F121739FD111739018710FD2BC08710FD2BC08710FD8710FD +3130002B2B5D21230123112311230123012E01272E012B0135333216171E01171E011711 +33113E01373E01373E013B0115232206070E01070632E3FE9A5BBA51FE8AD901AF314B1F +1B4A5435457C962D091B0A216740BA4069210B1B082C947D4535554B191C4D2D01FEFE02 +01FEFE0202491A60615542A2647D1A43174C3F0401E4FE1C04404B1942197B66A2465159 +631900010041FFE603C20478003D007FB7263475127D3C032FB8FFE0404C0D103708200D +10373B1B3FAF1CBF1C021C1C06313F2D902DA02D032D2D293E3104200A300A020A0A0E3F +06091C2E231B372E1C373B0409141B00903F7F3F803F02800990090209400B0F37092F2B +5D5D10F6ED1217392FED2F2F003FED332F5D3FED332F5D1112392F5DED3931302B2B5D01 +1406070E012322262735331E01333236373E01353426272E012B0135333236373E013534 +26272E012322060723353E01333216171E0115140607151E0103C2574444A45274D2660D +49E26A326A272A32312A297430A371288128343D3024255B2366C5430D53BE5F4E9B4342 +546D5C677A01395E822827242C2ECE4046131518433A3C48121208A2060D113E442F3D11 +110C3734CF1B221C2222755658851D071989000100B900000466045D00090044402D0B02 +0407020D030103380B103702380E10370706010204030805030808021A00920B1F0B600B +0203071A04880A10F6ED395D10F4FD39003F3F12173931302B2B5D712123110123113311 +01330466BAFDB7AABA0243B00347FCB9045DFCC5033B000200B900000466061500090017 +0073404C0B020407020D030103380B103702380E10370A0F1001101014500D0D07060102 +04030805030817C91F0A2F0A020A11C900101010201003100A100408021A0092191F1960 +190203071A04881810F6ED395D10F6FD391239392F5DED2F5DED003F3F121739332FED33 +2F5D3331302B2B5D7121231101231133110133030E0123222627331E01333236370466BA +FDB7AABA0243B06B05B1A9A9B105AB015B58595A010347FCB9045DFCC5033B01B894A6A6 +94695E5C6B00000100C1000004A9045D001A0093404D0120090E371B02271A360E321635 +1A0502011A001A000A1B0F2B0F020FB41618160A0F181604121A023C2F08010808000713 +3F12050705010508561A9600961AB600B61A05021A181604121200B8FFC04011090E3700 +001C0F1C1F1C0208031A05891B10F6FD325D11332F2B332F17395D003F3C3F3FED111239 +2F5DFD39121739018710FD71C03130018710FDC0015D2B2123012311231133113236373E +01373E013B0115232206070E010704A9F6FE3066BCBC5D72280E1B0D349C9256534F5924 +2859320200FE00045DFE1E434A1B3D1C7170A243545E5D180001001DFFFE043E045D0021 +003FB9001BFFACB30D103709B8FFC0401C0D1037023E2105001313173F0F011A00922303 +1A20203020022020122F332F5DED10F6ED002FFD322F2F3FED31302B2B212311210E0107 +0E01070E01070E012322262335333216333236373E01373E013721043EBCFE5F03060307 +201A183B2222533111410A0A081E0A183312333E0A040703030103BF539A3EA7C7423E4D +1F1E1E02A4020E1332EEE152E166000100B9000004D9045D000C0078401335093A0B4503 +4A0470037F04060B400D103709B8FFC0403D0D10377B027B05790A030A2A090B37050A02 +030904400E103704200D0F373F04010404070B09050107090A0B0305021A00920E0F0E20 +0E02051A07880D10F6ED5D10F6ED111739002F333F3312392F5D2B2B1217393130002B5D +012B2B5D2123110123011123113309013304D9BAFEEA8CFEECB0E301300126E70372FDC2 +023EFC8E045DFD8F0271000100B900000460045D000B0032401C033F0808050A07050105 +0809021A00920D1F0D600D0208031A05880C10F6FD325D10F6FD32003F333F3312392FED +31302123112111231133112111330460BCFDD1BCBC022FBC01F7FE09045DFE3C01C4FFFF +006AFFE10471047C021600520000000100B900000460045D000700254015033F06050005 +011A0092091F09600902041A05880810F6ED5D10F6ED002F333FED313021231121112311 +210460BCFDD1BC03A703BBFC45045D00FFFF00B9FE640490047C0216005300000001006A +FFE703FD04770021005A40430F234F235F23032B01220E2A1624183A01350E3A16351849 +014F0A440E4F1641185901550E6901650E7A01730E131010143F0C0421211A3F03090F00 +0023171B09852210F6ED11332F3C003FED332F3FED332F31305D015D250E01232226272E +013510002132161715232E01232206151416333236373E01373303FD73A5527ACC494951 +0128010161BB4E0B5DB555A7B7B6A83B75302651100B463629474848DC93010B013F3627 +D14744E0C7C7DC1E1813350D0001000A000003EE045D0007003840230301043F06054000 +4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32 +2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A5FFFF +003DFE64047F045D0216005C00000003006FFE64064B061400230030003D007A40105622 +011D011B1E0C09040627353F2118B8FFF040400E0F3718043B2E3F0F06100E0F3706090B +0C392436384924463804241B00C809311B1E2B04091A0C381B12C8800C900C020C0C3F3E +0F3F1F3F3F3F503F803F055D1112392F5DFDED10ED173910FDED5D003F3F2B33FD323F2B +33FD321217393F31305D011406070E01232226271123110E01232202113436373E013332 +16171133113E0133321203342623220607111E0133323605112E01232206151416333236 +064B4C3F3EA259436327BA3D4F54C1F04E3F3DA5523C6331BA2E7C3FC6E2C18888374A3F +2F3F3A8D9BFD7627503187A18F87355B024C95E54A4A4E2E13FE3301CD1E23012E010D8D +DD4B494D251E01E1FE1F1B28FED5FEECBFDE1219FD171619D9AA02E91219CED2C3E01D00 +FFFF003C00000480045D0216005B0000000100B9FEF404DE045D000B0041400F0602050B +08043F01051A080800C90AB8FFC04015090D370A0A0D0D40090E378F0DAF0D02041A0188 +0C10F6ED5D2B11332F2BED392FED002FFD322F3F33313029011133112111331133112304 +2FFC8ABC0226BC87AF045DFC4503BBFC45FE52000001008E0000041F045D0016003C4025 +0C061C062C06750E040209113F0505001509050014011A0092183F18010A1A0009100902 +092F5DED5D10F6FD32002F3F3312392FED123931305D2123110E01232226351133111416 +171E01333236371133041FBC5BA662B4BEBC101A1A5E5445A23CBC01AD1C22B1A70196FE +CA40652524261B12021D000100B900000649045D000B003D40260A06020508043F010809 +1A00CA081A05041A01CA8005A0050205050D0C0F0D200D500D700D045D1112392F5DF4ED +10FDF4ED003FFD323F333331302901113311211133112111330649FA70BC01AEBC01AEBC +045DFC4503BBFC4503BB000100B9FEF406D0045D000F004A402E0A0602050C08043F0108 +0E0DC90000091A0CCA081A05041A01CA80059005A00503050511100F111F113F116F1104 +5D1112392F5DF4ED10FDF4ED392FED002F3FFD32323F3333313029011133112111331121 +1133113311230621FA98BC01AEBC01AEBC87AF045DFC4503BBFC4503BBFC45FE52000002 +000A000004C4045D000E0021004A4015750D01073D4F1B9F1B021B1B16183F1905083D16 +0FB8FFF04016090B371B081A161619001B0F8F230F231F232F2303192F5D10F6FD11392F +FD322B002FED3FED12392F5DED31305D013426272E012B0111333236373E01371406070E +0123211121352111333216171E01040223282A6B64B0AC646E282925C24138429676FE55 +FEB80204F47E8B453A3A0157334D18190AFE8411181A473A518429322A03B8A5FE4D1A33 +2B86000300B9000005A2045D000E001F0023005A4016200523073D4F199F190219191617 +05083D167900010FB8FFF04022090B37001B500F600F700F030F0F231A2292250F253025 +402570250419081A16882410F6FD325D10F6FD322F5DED2B5D002FED3F12392F5DED2F3F +3130013426272E012B0111333236373E01371406070E012321113311333216171E011333 +1123036923282A6B64B0AC646E282925C24138429676FE55BCF47E8B453A3ABBBCBC0157 +334D18190AFE8411181A473A518429322A045DFE4D1A332B8602B1FBA300000200B90000 +0435045D000E001F00424013073D4F199F19021919161705083D167900010FB8FFF04013 +090B37001B0F8F210F212F210219081A16882010F6FD325D10F6ED2B5D002FED3F12392F +5DED3130013426272E012B0111333236373E01371406070E012321113311333216171E01 +037323282A6B64BAB6646E282925C24138429676FE4BBCFE7E8B453A3A0157334D18190A +FE8411181A473A518429322A045DFE4D1A332B8600010053FFE703F604770021007DB532 +0442040210B8FFD640090B0D37152A0B0D371DB8FFD6403F0B1037082A0B1037123D1313 +061F1B1B173E1F049F0A010A0A0E3E0609141C111A0390232340090D371C2F133F134F13 +03131C1380099009020940090C37092F2B5D33332F5D2F2B10F6ED1139003FED332F5D3F +ED332F1112392FED31302B2B2B2B5D011E011510002122262735331E0133323637213521 +2E012322060723353E01333216035D4950FEC9FEFC66BF430D3CC66D9DC40CFDCC023314 +BE8E5BB4570D3FC2677CC803ED46D290FEEAFEB8301BCE2F49C0BA979E9F3D43CE193A44 +000200B9FFE1064C047C000B001E005640363A0335094A034509040C3E131E1314031C03 +3F16041005093F1C0A0F1319061A2F0C010C0C0F001B1990202F203F2002120E1A0F881F +10F6FD325D10F6ED12392F5DED1239002F3FED3F3FED1217392FED5D3130013426232206 +15141633323625231123113311333624333200111000232200058AA69399A1A89292A7FC +D3E8BCBCED190111C7E70112FEF2EBDEFEF5022ED7D5DFCDD4D7D5A2FE06045DFE3BE7FD +FEC4FEEEFEF1FEC201200002004300000413045D0010001F0069B3721C0104B8FFE8403D +0910370304B4050506060F113C030300123D0F0500050909190902191B70090109040603 +09040A051A054A055A0580059005060512011A0092210F21015D10F6FD322F5D17392F5D +ED5D002F2F3FED12392FED12393130018710FDC02B015D212311230123012E0135343637 +3E0133210311232206070E01151416171E01330413BCDDFEA6DD01789186503D3C9C5C01 +AEBCED4D442827251724256A4101BBFE4501CD28A586597C27261BFDF201780A16164B2C +37441E1D1500FFFF006AFFE6046005DB0236004800000116008EF9000014400D03302560 +250202002520120025012B355D3500010013FE6D046206140035006A4044051C1E261E28 +59056905721D0617140E51111112180D08421B0412012F3E2A2A012A0D150F5F2E6F2E7F +2E032E2E0D001A2191371F37603702141517030B1A110F0D883610F63232FD17325D10F6 +ED12392F5D2F2F002F2F5DED3F3FED123912392FED393931305D0026272E01272E012322 +0607112311233533353315211521113E01333216171416151406070602070E01232A0127 +35333236133E013503A501010113191A594650AC4CBCA6A6BC0141FEBF58C162B1BB0303 +020103544746B96A17182A44BB9C09010102064B2B5080292B294D3AFCBE04F4869A9A86 +FEED4952DEC92F6B4B3A703AB0FEFF50504E029EF60150224B2EFFFF00B9000003BB0682 +0236020B00000116008D9AF6000AB6010009070405252B350001006AFFE7040A04770021 +006EB53B0A4B0A021BB8FFD640090B0D37162A0B0D370EB8FFD640340B1037012A0B1037 +193D1818030C1010143E0C0421211D3E03092018301840180318171810031A008E232340 +090D371A1A09852210F6ED2B10E61117392F5D003FED332F3FED332F1112392FED31302B +2B2B2B5D250E01232226272E013510002132161715232E01232206072115211E01333236 +3733040A4E9F7B7DD14C4C52012B010D68BB450C40C2658FC719023CFDC10AC4A46CBD3E +0C302029474849DC92010501453620CB324E9CA197B2C8443200FFFF006EFFE503D70478 +021600560000FFFF00AF0000018305DB0216004C0000FFFF00050000022D05DB02160077 +0000FFFFFFC2FE59021505DB0216004D00000002001DFFFE06F4045D000E003D0072B900 +30FFACB30D10371EB8FFC0401D0D1037073D4F379F3702373716183E350528282C3F2409 +3D167900010FB8FFF0401E090B3737081A161635001B890F010F8F3F0F3F0118C9203530 +35023535282F332F5DED5D10F45DFD11392FFD322B5D002FED2FFD322F3FED12392F5DED +31302B2B00353426272E012B01113332363736371406070E01232111210E01070E01070E +01070E012322262335333216333236373E01373E01372111333216171E01063223282A6B +64B0AC646E2829E74138429676FE55FE5F03060307201A183B2222533111410A0A081E0A +183312333E0A0407030301F47E8B453A3A012037334D18190AFE8411181A81518429322A +03BF539A3EA7C7423E4D1F1E1E02A4020E1332EEE152E166FE4D1A332B86000200B90000 +06F4045D000E0027005D4017171E073D4F219F21022121161C20051A083D167900010FB8 +FFF0401F090B37211E081A16161A001B890F010F8F290F292F294F29031D191A1A882810 +F6FD325D10F65DED11392FED39392B5D002FED2F3F3312392F5DED39393130013426272E +012B0111333236373E01371406070E0123211121112311331121113311333216171E0106 +3223282A6B64B0AC646E282925C24138429676FE55FDF3BCBC020DBCF47E8B453A3A0157 +334D18190AFE8411181A473A518429322A0210FDF0045DFE4D01B3FE4D1A332B86000001 +00130000045F0614001E00504030031D161D751D0317140E51111112180D08421B041201 +010D08150F021A0091201F20602002141517030B1A110F0D881F10F63232FD17325D10F6 +ED2F2F003F3C3F3FED123912392FED393931305D2123113426272E012322060711231123 +3533353315211521113E0133321615045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC +63B5BE027C4D87262A294C3BFCBE04F4869A9A86FEED4952DACDFFFF00C1000004A90682 +0236021200000116008DF9F60011400C01001D401D02001D1C0611252B5D35000002003D +FE64047F06150007001500BD404C04063406440650066006700606090307051903170546 +0149035800570179030902071A000100051A0403044900460402080F0E010E0E12500B0B +0003020405020C15C908400B0E37080FC90EB8FFC040110B0E370E080E04026801010102 +03030400B8FFC040220910370C001C004A006A007A0005008D170F170103041304450465 +0475040504821610E65D5D10F65D2B1117395D2F1139392F2BED2F2BED003F3F12393933 +2FED332F5D333130015D8710FD8710FDC0015D005D0901231301330901130E0123222627 +331E0133323637047FFD74C9D0FE43CC0157015A0805B1A9A9B105AB015B58595A01045D +FA0701D20427FCC4033C01B894A6A694695E5C6B000100B9FEF40460045D000B003F4027 +0A060520030103083E00050802C93F034F037F0303030305091A00920D1F0D600D02081A +05880C10F6ED5D10F6ED12392F5DED003F33ED2F5D3F3331302901112311211133112111 +330460FE84AEFE83BC022FBCFEF4010C045DFC4403BC000100C80000048A076B0007002B +B90006FFC040140D10370606003503030205130606090114026C0810F6ED11332FED002F +3FED332F2B31300111231121113311018EC60308BA0521FADF05D1019AFDB600000100B9 +000003BB05CE00070033B90006FFC0401A0E10370606003F03050205C97006010606090F +0901011A02870810F6ED5D11332F5DED002F3FED332F2B313001112311211133110175BC +0254AE03B8FC48045D0171FDEA00000100CB023C073502DC00030011B601540200000501 +2F11332F002FED3130012135210735F996066A023CA0000400C8000008B905ED00090015 +0021002500A7403E080718073A014901440646075801540656076F0160067F0170060D09 +0D0613190D16137A19751F0625533F224F220222221F401214371F51300D010D0D19B8FF +C040321214371951130202030807040106030100220F2302232223220A1CC910100A0006 +0102071300000416C90A0A270213046C2610F6ED11332FED12392FFD1139391112392FED +1239392F2F5D002F3F1217393FED2B332F5DED2B332F5DED5D3130015D21230111231121 +0111330114062322263534363332160734262322061514163332360121152104FFF5FD72 +B401330250B403BABDB2B6BABEB2B5BAB25865675757676558FE6201B8FE480534FACC05 +D1FB4004C0FE63E0DADADFE0DADCDDAC8888ADAD8787FDE89E00000100B900000460045D +000700254015033F06050005011A0092091F09600902041A05880810F6ED5D10F6ED002F +333FED313021231121112311210460BCFDD1BC03A703BBFC45045D00000101190235028F +05D5000800214011035004040703010E0307002A03000101012F5D33ED392F003F3F332F +ED3130012311233532363733028FA5D1667E0989023502A9752C5600000100EF023D039F +05ED001D0043B90011FFE040250D10370F0F0B521302021C51010E00001C01082A261636 +166616761604160F160F000101012F5D33332F2F5DED1239332F003FFD323FED332F3130 +2B0121353E01373E013534262322060723353E01333216151406070E010721039FFD505B +86276D40584C468F290F41974D9DA9526A318D3701F2023D94456825676D52464A3C20B3 +1B229E7A5D945E2B6A29000100E6021C037305ED002E0074400F6C096C227E097E220455 +0C5A1F0226B8FFE0403B0B0E3703200B0D372C2B15510F16010F161F164F165F16CF16FF +16061621211D51160625020A0A0E51060F1A2A281622112A2216282C04090000092F332F +121739ED2F2F2FED003FED332F3F1239ED332F2F5D71ED393931302B2B5D015D01140607 +0E012322262735331E013332363534262B01353332363534262322060723353E01333216 +15140607151E0103733C30357B4F528F4111259A4F546E645B8C7D575F52574299251140 +964F98AA614D5075033A47702225201E1CAF233B4948533B8B4C423C473E23AF1B228C62 +57711A08106D000200B3023D03BD05ED000A000D003A401E6D067E06020609010D51050C +05030702030E00070B042A09000D060101062F332F12393333FD39392F003F3F1239392F +ED3939323130015D012315233521350133113321110103BDA396FE2F01D295A3FECBFE9F +0319DCDCB9021BFDB10190FE7000000100E6021C037505DA002A004840176F087F08021D +1D1A5125250621511E030A0A0E51060F00B8FFEA400F090C371F21291E1F1E09142A0000 +092F332FED1239392FED2F2B003FED332F3FED12392FFD322F31305D011406070E012322 +262735331E01333236373E01353426272E012322060711211521153E01333216171E0103 +75322F3088574E953C1025924E2C521C1D171F1D1E59353B6C260255FE4814310E547634 +373C0363457A2A2B331C1A9F1436171C1D43272A391415110E0601F08BCF02021722246F +000100F3023503A505DA000600414025560101030100012A020203630073000200000351 +0503020E030002100910370202040000042F332F12392F2B1239003F3FFD322F3130015D +8710ED87C0015D0901230121352103A5FE2AB901F0FDED02B2054EFCE7031A8B000300C5 +021B039105EE001900280037005D40420F0B0F151F0B1F152A022A0439023904492B582B +0A0F251F2526103610042F09261604031D5110023551030F1A2A13202A0D292A090D1316 +04067000010000322A062FED332F5D121739ED2FED2FED003FED3FED1217395D31305D01 +140623222635343637352E0135343633321615140607151E01033426232206151416171E +01173E01133426272E01270E011514163332360391CB9BA7BF5E595246B99095B5505261 +5BBE574F465D302D17482E392618374217582A3A387650516D033579A19F784F78260429 +64476A8D87683F7D2304276B016433483F36263D140A1F0B254FFE79323B1E0A1C0F205D +304A5F4E00020073FFE1068B05F0002800340075400978180176097915021BB8FFC04045 +0910371B694F0001002302031A090A0905151A0915155A095515062C3415023234090A22 +1E2926151B00030F291503360F361F3680369036BF36CF36060F36012F150F683510F6ED +5D5D10D6ED121739D4FDC4003FED3FED5D1239393FDD5DED2B5D31305D011E0115140207 +0E01232224272602353412373624333216171E01173E013534262735331E011514060110 +0023220011100033320005A11F1A63595CFBA19DFEFF5A5A61605C5801059AA0FF591819 +144F43160CA00D0B78FEF9FEFCE1E3FEFD0108DEDE0107044958A663B8FEDD6165666863 +630120B9B6012167626869611B2121044044245B17092F46326C82FE8D0122013BFEC5FE +DEFEDBFEC90137000002006AFFE104C30584001D0029005640391A20090C373A2135274A +21452704151B690D050003213F0904273F030A14102918090C1B03061E1B00902B0F2B1F +2B3F2B6F2B04241B06852A10F6ED5D10F6ED121739DCFDC4003FED3FED12393FFDCD5D31 +302B011000232200111000333216173332363534262735331E01151406071E0107342623 +22061514163332360471FEE8EBEDFEE90117ED33602B5D5A4A160CA00D0B736C4548C2AA +9799A9AA9896AB022EFEEFFEC4013C01110111013D0F104147245B17092F46326A80144D +D98BD9D3D3D9D2D9D700000100B2FFE1067506F8002B004C40342A20090F37252B6A1C03 +0D032615390649067615041534060A2420290F2801281B14002D0F2D402D6F2D7F2D902D +050F140C6B2C10F6ED5D10DEEDD45DFDC4003FED5D3F3FFDC431302B011406070E012322 +26272E01351133111416171E01333236373E0135113332363534262735331E0115140623 +052947514DCE898CD0475147C621272C976A6B962D2721D85A4A160CA00D0BACA00256A2 +F1504C464A4852E8A9037BFC7B798C394142414239936D038A4147245B17092F46328384 +000100B1FFE105A505840025005C403E0B0619077A070323200910371E246A1505020509 +051142050A011D19290F21012114021A40000100270F276F27025F279027A027C027EF27 +050B1A08872610F6ED5D7110D671ED32D45DFDC4002F3FED3F12393FFDC431302B5D2123 +350E01232226351133111416171E0133323637113332363534262735331E011514062B01 +0457BC5FAE69B0C4BC101A1B565249AD4BD05A4A160CA00D0BACA0027C4B50D7D002D5FD +8455792B2C284C3B03424147245B17092F46328384000001020905110342068C00160042 +4029BF0301030606050C50146005010504ADC005D005020540090D370505110940111437 +09290F000100112FDD5DED2B12392F2B5DED002F5DD4ED12392FC55D3130011406071523 +353E013534262322060723353E01333216034242426E2F3026211F251803134926516605 +F8404E1544790C27271827090969060C560000010221FE8202F5FF450003001340090144 +8F0201020015012FED002F5DED31300123353302F5D4D4FE82C3FFFF0154051602FA068C +001600430000FFFF021D051603C3068C0016008D00000002013605110514068C0006000A +004DB90006FFF040100E103705100E10370802010708040305B8FFC040110E1037050560 +0301036007700702070900B8FFC0B50E10370000042F332F2BD6CD5D002F5D332F2B1217 +392F3130012B2B01230B012313332103231303E19FB9B89BE4E30217DA817C05110100FF +00017BFEF6010A0000020003051103E1068C0006000A004AB90006FFF040100E10370510 +0E10370802010809040305B8FFC040180E1037050560030103006F097F0902090704400E +103700042F332BD6CD5D2F002F5D332F2B1217392F3130012B2B01230B01231333012303 +3303E19FB9B89BE4E3FE6181DADF05110100FF00017BFEF6010A00020136051104C00752 +0006001D008EB90006FFF040120E103705100E1037BF0A010A0D0D0C13501BB8FFC0400B +0E10371B0C02010C030305B8FFC0402A0E10370505600301030BADC00CD00C020C400910 +370C0C18104011143710290F07010718400C10371800B8FFC040090E1037000060040104 +2F5D332F2BD42BDD5DED2B12392F2B5DED002F5D332F2B1217392FD42BED12392FC55D31 +30012B2B01230B01231333251406071523353E013534262322060723353E0133321603E1 +9FB9B89BE4E301C342426E2F3026211F251803134926516605110100FF00017B32404E15 +44790C27271827090969060C560000020125051103F307DE000600200064B90006FFF040 +200E103705100E10370710520F171F17A0170317141D520A400D11370A01020305B8FFC0 +40110E10370505600301032029070013291400B8FFC0B40E103700042F332BD6ED2FD6ED +002F5D332F2B123939D62BED3CDD5DED3C3130012B2B01230B01231333130E0123222627 +2E0123220607233E01333216171E013332363703E19FB9B89BE4E3F606865F35491C183A +192B22058C05875F36491C163B192A240405110100FF00017B015289902919162D3E4788 +912A19142E3E47000002014204E703D506FB000D0011003C40251110400F1A3710001006 +0AAA3F030103600E700E020E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D +002F5DEDCD39392F2BCD313001140623222635331416333236353703231303D5B29897B2 +A2555253555EDA817C0646A3BCBCA37C64647CB5FEF6010A0002014204E703D506FB000D +0011003C4025100F400F1A370F000F060AAA3F0301036F107F1002100E0D2A0E0F001F00 +8F000300072A062FEDD45D39ED2FCD5D002F5DEDCD39392F2BCD31300114062322263533 +1416333236350723033303D5B29897B2A2555253555281DADF0646A3BCBCA37C64647C55 +010A0002014204E703D5071E000D002400634040111414131A0F2201221340091A371300 +13060AAA3F0301031213400910371313001F101F201F031F1728500E600E700E030E0D2A +0E0F001F008F000300072A062FEDD45D39ED2F5DEDCD5D392F2BCD002F5DEDCD39392F2B +D45DCD12392FC531300114062322263533141633323635271406071523353E0135342623 +22060723353E0133321603D5B29897B2A2555253551237375C272822191C1E1402103C21 +42570646A3BCBCA37C64647C5B34431238650A2120191D080757060A45000002012504E7 +03F307DE000D0027005840100E17520F1E1F1E021E1B245220110111B8FFC04025090C37 +11006006700602060AAA3F0301031A291B0627290E0D2A0F001F008F000300072A062FED +D45DEDD4ED10D6ED002F5DEDDD5D39D62B71ED3CDD5DED3C313001140623222635331416 +33323635130E01232226272E0123220607233E01333216171E013332363703D5B29897B2 +A255525355C006865F35491C183A192B22058C05875F36491C163B192A24040646A3BCBC +A37C64647C019889902919162D3E4788912A19142E3E47000001020905110342068C0016 +00524035BF0301030606050C50501460147014031409900501C76005010504ADC005D005 +020540091037050511094011143709290F000100112FDD5DED2B12392F2B5DED002F5D5E +5D5ED45DED12392FC55D3130011406071523353E013534262322060723353E0133321603 +4242426E2F3026211F251803134926516605F8404E1544790C27271827090969060C5600 +00020136065403E1080100060020007D404A0702170202141D50200A010A1050076F1701 +0F1770170217010205400D1137050920039003A003B003045910032003C00303C003D003 +0231D003E003025003010F037003020320280700B8FFC040090E10370013281400042F33 +D6ED2F2BD6ED002F5D71725E71725E715ECD2B39392F5D713CEDDD71ED3C31305D012327 +07233733130E01232226272E0123220607233E01333216171E013332363703E1A9AFAEA5 +F8BBEC0B705025491C1B3E141D2806860A6F5227432122301A1B2B0506545959AD010052 +6B190D0D1A202D4E6F17101016232A0000020142064803D50801000D0011005A403E5010 +6010020A50FF03015F030103007F0601060F109F10026F10FF1002106F11010F11701102 +11590E690E720E030E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D002F5D +71DD5D71D45D3CDD7172ED5D313001140623222635331416333236353707233703D5AB9E +9EACA24B5D5A4D4FC681680738589899573058592FC9D8D800020142064803D50801000D +001100644033500E600E020A50FF03015F030103007F0601060F0E9F0E026F0EFF0E020E +6F11010F1170110211561066107D1003100E0D2A0EB8FFC0400F090D370E0F001F008F00 +0300072A062FEDD45D392BED2FCD5D002F5D71DD5D71D45D3CDD7172ED5D313001140623 +222635331416333236350723273303D5AB9E9EACA24B5D5A4D5681C6DF07385898995730 +58592F0FD80000020142064803D50801000D0024008E4062111414131A6F22010F227022 +02223F134F13021340111537130013060A5009900301B0030159700301310F033F037003 +CF0304031213400915371313501F601F701F03001F101F201F301F401F051F17C00E010E +0D2A0E0F001F008F000300072A062FEDD45D39ED2F5DCDCD5D71392F2BCD002F5D5E715E +5D715EEDCD39392F2B712F5D71CD12392FC5313001140623222635331416333236352714 +06071523353E013534262322060723353E0133321603D5AB9E9EACA24B5D5A4D2E2E2E4D +231F1C15191A0E020E321B364A0738589899573058592F612B380F2F54091E1817160805 +4905083900020142064803D50801000D0027009240111B2450DF1101110E17506F1E010F +1E011EB8FFC040520D10371E00060A50099003B00302F0030159200330034003C003D003 +E003066003700302C003D0030231A003B003025003E003020F033F03CF0303031A281B1B +0627280E0E0D2A0F001F008F000300072A062FEDD45DED3C10ED103C10ED002F5D71725E +5D71725E5D715EEDCD322F2B5D71ED3CDD71ED3C31300114062322263533141633323635 +370E01232226272E0123220607233E01333216171E013332363703D5AE9B9BAFA26C3C3C +6BA20B705025491C1B3E141D2806860A6F5227432122301A1B2B050706546A67572E2828 +2EFB526B190D0D1A202D4E6F17101016232A000201360668051008010006001D0088B900 +06FFF0401A0E103705100E1037BF0A010A0D0D0C400E10370C13500F1B011BB8FFC0403A +0D10371B0102030F0570050205050F0301030BADC00CD00C020C400910370C0C18104011 +143710290F07010750006000700003180000600401042F5D332FD45DDD5DED2B12392F2B +5DED002F5D332F5D1239392F2B5DEDC42B392FC55D3130012B2B01232707231333051406 +071523353E013534262322060723353E0133321603E19FB9B89BE4E3021342426E2F3026 +211F25180313492651660668CECE014944404E1544790C27271827090969060C5600FFFF +001AFE82055E05D10236002400000116024B2F00000AB602000D0E0500252B35FFFF0068 +FE82041D04780236004400000116024BBA00000F400A027F36010036370B00252B5D3500 +FFFF001A0000055E080102360024000001170256002F0175001A401202501C0102101C40 +1C701C03001C0B0500252B5D35005D35FFFF0068FFE1041D068C0236004400000116024A +BA000011400C025F457F45021D45340B00252B5D3500FFFF001A0000055E07ED02360024 +00000117024E002F01610011400B0302400F01000F0B0500252B5D353500FFFF0068FFE1 +04F4068C0236004400000116024EE0000013400D030240385038022938340B00252B5D35 +3500FFFF001A0000055E07ED0236002400000117024F002F01610011400B03020F0F0100 +0F0B0500252B5D353500FFFFFFE3FFE1041D068C0236004400000116024FE0000013400D +030240385038022938340B00252B5D353500FFFF001A0000055E08010236002400000116 +025C2F00001740110302400FA00FB00FC00F04000F0B0500252B5D353500FFFF0068FFE1 +04A0075202360044000001160250E0000013400D030240385038022938340B00252B5D35 +3500FFFF001A0000055E0801023600240000011602572F00000CB70302000F0B0500252B +3535FFFF0068FFE1041D07DE02360044000001160251E0000013400D0302403850380229 +38340B00252B5D353500FFFF001AFE82055E07ED023600240000003700D6002F01610116 +024B2F00001840110300141505002502400F01000F0B0500252B5D352B35FFFF0068FE82 +041D068C023600440000003600D6E0000116024BBA00001E4016037F3D01003D3E0B0025 +0240385038022938340B00252B5D352B5D35FFFF001A0000055E08010236002400000116 +02582F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236004400000116 +0252E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000055E08010236 +00240000011602592F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236 +0044000001160253E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000 +055E08010236002400000116025A2F00000CB7030200110B0500252B3535FFFF0068FFE1 +041D071E02360044000001160254E0000011400B0302403A01293A340B00252B5D353500 +FFFF001A0000055E08010236002400000116025B2F00000CB7030200110B0500252B3535 +FFFF0068FFE1041D07DE02360044000001160255E0000011400B0302403A01293A340B00 +252B5D353500FFFF001AFE82055E0801023600240000003700D9002F01750116024B2F00 +001D4013025011011103001B1C0500250200110B0500252B352B3500115D3500FFFF0068 +FE82041D068C023600440000003600D9DD000116024BBA0000184011037F44010044450B +002502293A340B00252B352B5D35FFFF00C8FE82049D05D10236002800000116024B2600 +000AB601000E0F0100252B35FFFF006AFE820460047C0236004800000116024BF900000A +B6021F22231218252B35FFFF00C80000049D08010236002800000117025600260175001C +401401501D0101001D201D501D601D04001D0C0203252B5D35005D35FFFF006AFFE60460 +068C0236004800000116024AF9000018B4026F310131B8FFC040090A1137323120120025 +2B2B5D35FFFF00C80000049D07C8023600280000011700D7002601750012400B01501901 +0100190C0203252B35005D35FFFF006AFFE604600653023600480000011600D7F900000A +B602002D201200252B35FFFF00C80000053A08010236002800000117024E002601750016 +400D0201501001020100100C0203252B3535005D3535FFFF006AFFE6050D068C02360048 +00000116024EF900000CB703021E24201200252B3535FFFF00290000049D080102360028 +00000117024F002601750016400D0201501001020100100C0203252B3535005D3535FFFF +FFFCFFE60460068C0236004800000116024FF900000CB703021E24201200252B3535FFFF +00C80000053608010236002800000116025C26000013400D0201101020100200100C0203 +252B5D353500FFFF006AFFE604B9075202360048000001160250F9000013400D03020024 +2024021E24201200252B5D353500FFFF00C80000049D0801023600280000011602572600 +000CB7020100100C0203252B3535FFFF006AFFE6046007DE02360048000001160251F900 +000CB703021E24201200252B3535FFFF00C8FE82049D0801023600280000003700D60026 +01750116024B2600001D40130110501001020015160203250100100C0203252B352B3500 +5D113500FFFF006AFE820460068C023600480000003600D6F9000116024BF9000014400E +031E292A120025021E24201200252B352B35FFFF0089000002D508010236002C00000117 +0256FF2401750016400E01501101015011010011100409252B5D35005D35FFFF00960000 +01CF068C023600D500000117024AFE8D0000000AB6010009080203252B35FFFF0089FE82 +02D505D10236002C00000117024BFF240000000AB601000E0F0409252B35FFFF00AFFE82 +018305DB0236004C00000117024BFE8E0000000AB602000A0B0203252B35FFFF0073FE82 +05DA05F00236003200000117024B009B0000000AB6020026270F03252B35FFFF006AFE82 +0471047C0236005200000116024BE200000AB602001A1B0600252B35FFFF0073FFE105DA +080102360032000001170256009601750022400B0250340102503470340234B8FFC04009 +090B370034240F03252B2B5D35005D35FFFF006AFFE10471068C0236005200000116024A +E200000F400A02701D01001D1C0600252B5D3500FFFF0073FFE105DA0801023600320000 +0117024E00960175001E401403025028010302202850288028030028240F03252B5D3535 +005D3535FFFF006AFFE104F6068C0236005200000116024EE200001940130302001C201C +501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA08010236003200000117 +024F009601750016400D030250280103020028240F03252B3535005D3535FFFFFFE5FFE1 +0471068C0236005200000116024FE200000CB70302001C180600252B3535FFFF0073FFE1 +05DA08010236003200000117025C009600000015400F0302202850288028030028240F03 +252B5D353500FFFF006AFFE104A2075202360052000001160250E200001940130302001C +201C501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA0801023600320000 +01170257009600000015400F0302202850288028030028240F03252B5D353500FFFF006A +FFE1047107DE02360052000001160251E200001940130302001C201C501C801CB01C0500 +1C180600252B5D353500FFFF0073FE8205DA0801023600320000003700D6009601750117 +024B00960000001D4013025028012803002D2E0F0325020028240F03252B352B3500115D +3500FFFF006AFE820471068C023600520000003600D6E2000116024BE2000014400E0300 +212206002502001C180600252B352B35FFFF0073FFE1068B08010236024600000117008D +007801750014400D025036603602020036360F03252B35005D35FFFF006AFFE104C3068C +0236024700000116008DE200000AB602002B2B0600252B35FFFF0073FFE1068B08010236 +024600000117004300AA0175001A40120250366036020250367036020036360F03252B5D +35005D35FFFF006AFFE104C3068C02360247000001160043E2000011400C02502B602B02 +002B2B0600252B5D3500FFFF0073FFE1068B080102360246000001170256008F01750012 +400B02503A0102003A390F03252B35005D35FFFF006AFFE104C3068C0236024700000116 +024AE200000AB602002F2E0600252B35FFFF0073FFE1068B07C8023602460000011700D7 +008B01750012400B02504201020042350F03252B35005D35FFFF006AFFE104C306530236 +02470000011600D7C400001540100210372037403750370400372A0600252B5D3500FFFF +0073FE82068B05F00236024600000117024B009A0000000AB6020037380F03252B35FFFF +006AFE8204C305840236024700000116024BE200000AB602002C2D0600252B35FFFF00B2 +FE82052905D10236003800000116024B6200000AB6010020210C00252B35FFFF00B1FE82 +0457045D0236005800000116024BFD00000AB60100191A0916252B35FFFF00B2FFE10529 +080102360038000001170256006201750012400B01502301010023220C00252B35005D35 +FFFF00B1FFE10457068C0236005800000116024AFD00000AB601001C1B0916252B35FFFF +00B2FFE1067508010236024800000117008D007C01750014400D01502E602E0201002E2D +0C00252B35005D35FFFF00B1FFE105A5068C0236024900000116008DEE00001840100160 +28010130284028020028290900252B5D35005D35FFFF00B2FFE106750801023602480000 +0117004300AA0175001C401401502D602D0201402D602D802D03002D2D0C00252B5D3500 +5D35FFFF00B1FFE105A5068C023602490000011600430200001840100160270101502760 +27020027270800252B5D35005D35FFFF00B2FFE106750801023602480000011702560062 +01750012400B01503101010031300C00252B35005D35FFFF00B1FFE105A5068C02360249 +00000116024AFD00000AB601002B2A0800252B35FFFF00B2FFE1067507BE023602480000 +011700D70062016B000AB60100392C0C00252B35FFFF00B1FFE105A50653023602490000 +011600D7FD00000AB6010033260800252B35FFFF00B2FE82067506F80236024800000116 +024B6200000AB601002E2F0D00252B35FFFF00B1FE8205A505840236024900000116024B +FD00000AB6010028290800252B35FFFF0006000004E608010236003C000001170043FFE4 +0175001B400A01500A600A0201500A01B8FFD3B40A0A0401252B5D35005D3500FFFF003D +FE64047F068C0236005C000001160043DD000013B5016009700902B8FFDDB40909040025 +2B5D3500FFFF0006FE8204E605D10236003C00000116024BEC00000AB601000A09040125 +2B35FFFF003DFE64047F045D0236005C00000117024B010400000012400D010A0F0A2F0A +4F0A6F0A7F0A055D1135FFFF0006000004E608010236003C000001170256FFEC01750018 +401001500E0101C00ED00E02000E0D0302252B5D35005D35FFFF003DFE64047F068C0236 +005C00000116024AC900000F400A01500D01000D0C0400252B5D3500FFFF0006000004E6 +07C80236003C0000011700D7FFEC01750012400B01501601010016090500252B35005D35 +FFFF003DFE64047F06530236005C0000011600D7DD00000AB6010015080400252B350003 +006CFEBD04FB0614001B0028002C007E40523B05380C3C2232243E284B054A0C4E224524 +4F285908690870120D2AB52B0114511A17171018011304072041100403082642070A2C2B +2C2B010A1600881617131C041A1A01922E1F2E3F2E02231B010A852D10F632ED5D10F632 +ED32323232ED2F111239392F2F003FED3F3FED1239393F12392F3CFD3C2FED31305D0123 +1123350E01232202113436373E0133321617352135213533153301112E01232206151416 +3332361321352104FBB8BC4DAD6EC6ED524444B66059864CFE95016BBCB8FE8C4F73499C +B2879750A4EAFCB4034C04F4FB0C754252012E01118EDB4D4C4F2427CE869A9AFB990279 +2218D6CCC3CD47FDE286FFFF00ED051D042C0653001600D700000002008A009104900498 +0023002F004D40332D290B0802231D1A141108172F0501052729050F1701170F311F3102 +24290B0802231D1A1411080E202001202A29200F0E010E2F5D33ED2F5D121739ED5D002F +5D33ED2F5D121739ED31300107270E01232226270727372E01353436372737173E013332 +16173717071E011514060727342623220615141633323604906EEC2C4A342E5724EC6DE9 +1718161AEA6FEB24572D2C5825EA71EB1818191765694B496B694B496B01016EEA1A1619 +17EC71EA25592B34492BED6EEB17191817EA6DED2653302D5824A949706E4B4A6F6D0000 +0002000000000000FF4C00780000000000000000000000000000000000000000037D0000 +01020103010401050106010701080109010A010B010C010D010E010F0110011101120113 +011401150116011701180119011A011B011C011D011E011F012001210122012301240125 +0126012701280129012A012B012C012D012E012F01300131013201330134013501360137 +01380139013A013B013C013D013E013F0140014101420143014401450146014701480149 +014A014B014C014D014E014F0150015101520153015401550156015701580159015A015B +015C015D015E015F0160016101620163016401650166016701680169016A016B016C016D +016E016F0170017101720173017401750176017701780179017A017B017C017D017E017F +0180018101820183018401850186018701880189018A018B018C018D018E018F01900191 +01920193019401950196019701980199019A019B019C019D019E019F01A001A101A201A3 +01A401A501A601A701A801A901AA01AB01AC01AD01AE01AF01B001B101B201B301B401B5 +01B601B701B801B901BA01BB01BC01BD01BE01BF01C001C101C201C301C401C501C601C7 +01C801C901CA01CB01CC01CD01CE01CF01D001D101D201D301D401D501D601D701D801D9 +01DA01DB01DC01DD01DE01DF01E001E101E201E301E401E501E601E701E801E901EA01EB +01EC01ED01EE01EF01F001F101F201F301F401F501F601F701F801F901FA01FB01FC01FD +01FE01FF0200020102020203020402050206020702080209020A020B020C020D020E020F +0210021102120213021402150216021702180219021A021B021C021D021E021F02200221 +02220223022402250226022702280229022A022B022C022D022E022F0230023102320233 +023402350236023702380239023A023B023C023D023E023F024002410242024302440245 +0246024702480249024A024B024C024D024E024F02500251025202530254025502560257 +02580259025A025B025C025D025E025F0260026102620263026402650266026702680269 +026A026B026C026D026E026F0270027102720273027402750276027702780279027A027B +027C027D027E027F0280028102820283028402850286028702880289028A028B028C028D +028E028F0290029102920293029402950296029702980299029A029B029C029D029E029F +02A002A102A202A302A402A502A602A702A802A902AA02AB02AC02AD02AE02AF02B002B1 +02B202B302B402B502B602B702B802B902BA02BB02BC02BD02BE02BF02C002C102C202C3 +02C402C502C602C702C802C902CA02CB02CC02CD02CE02CF02D002D102D202D302D402D5 +02D602D702D802D902DA02DB02DC02DD02DE02DF02E002E102E202E302E402E502E602E7 +02E802E902EA02EB02EC02ED02EE02EF02F002F102F202F302F402F502F602F702F802F9 +02FA02FB02FC02FD02FE02FF0300030103020303030403050306030703080309030A030B +030C030D030E030F0310031103120313031403150316031703180319031A031B031C031D +031E031F0320032103220323032403250326032703280329032A032B032C032D032E032F +0330033103320333033403350336033703380339033A033B033C033D033E033F03400341 +03420343034403450346034703480349034A034B034C034D034E034F0350035103520353 +035403550356035703580359035A035B035C035D035E035F036003610362036303640365 +0366036703680369036A036B036C036D036E036F03700371037203730374037503760377 +03780379037A037B037C037D037E037F0380038103820383038403850386038703880389 +038A038B038C038D038E038F0390039103920393039403950396039703980399039A039B +039C039D039E039F03A003A103A203A303A403A503A603A703A803A903AA03AB03AC03AD +03AE03AF03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF +03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE03CF03D003D1 +03D203D303D403D503D603D703D803D903DA03DB03DC03DD03DE03DF03E003E103E203E3 +03E403E503E603E703E803E903EA03EB03EC03ED03EE03EF03F003F103F203F303F403F5 +03F603F703F803F903FA03FB03FC03FD03FE03FF04000401040204030404040504060407 +04080409040A040B040C040D040E040F0410041104120413041404150416041704180419 +041A041B041C041D041E041F0420042104220423042404250426042704280429042A042B +042C042D042E042F0430043104320433043404350436043704380439043A043B043C043D +043E043F0440044104420443044404450446044704480449044A044B044C044D044E044F +0450045104520453045404550456045704580459045A045B045C045D045E045F04600461 +04620463046404650466046704680469046A046B046C046D046E046F0470047104720473 +047404750476047704780479047A047B047C047D052E6E756C6C106E6F6E6D61726B696E +6772657475726E057370616365066578636C616D0871756F746564626C0A6E756D626572 +7369676E06646F6C6C61720770657263656E7409616D70657273616E640B71756F746573 +696E676C6509706172656E6C6566740A706172656E726967687408617374657269736B04 +706C757305636F6D6D610668797068656E06706572696F6405736C617368047A65726F03 +6F6E650374776F05746872656504666F757204666976650373697805736576656E056569 +676874046E696E6505636F6C6F6E0973656D69636F6C6F6E046C65737305657175616C07 +67726561746572087175657374696F6E0261740141014201430144014501460147014801 +49014A014B014C014D014E014F0150015101520153015401550156015701580159015A0B +627261636B65746C656674096261636B736C6173680C627261636B657472696768740B61 +7363696963697263756D0A756E64657273636F7265056772617665016101620163016401 +650166016701680169016A016B016C016D016E016F017001710172017301740175017601 +7701780179017A0962726163656C656674036261720A627261636572696768740A617363 +696974696C646509416469657265736973054172696E670843636564696C6C6106456163 +757465064E74696C6465094F646965726573697309556469657265736973066161637574 +65066167726176650B6163697263756D666C657809616469657265736973066174696C64 +65056172696E670863636564696C6C6106656163757465066567726176650B6563697263 +756D666C65780965646965726573697306696163757465066967726176650B6963697263 +756D666C657809696469657265736973066E74696C6465066F6163757465066F67726176 +650B6F63697263756D666C6578096F6469657265736973066F74696C6465067561637574 +65067567726176650B7563697263756D666C657809756469657265736973066461676765 +72066465677265650463656E7408737465726C696E670773656374696F6E0662756C6C65 +74097061726167726170680A6765726D616E64626C730A7265676973746572656409636F +707972696768740974726164656D61726B056163757465086469657265736973086E6F74 +657175616C024145064F736C61736808696E66696E69747909706C75736D696E7573096C +657373657175616C0C67726561746572657175616C0379656E036D75310B706172746961 +6C646966660973756D6D6174696F6E0770726F647563740370693108696E74656772616C +0B6F726466656D696E696E650C6F72646D617363756C696E65034F686D026165066F736C +6173680C7175657374696F6E646F776E0A6578636C616D646F776E0A6C6F676963616C6E +6F74077261646963616C06666C6F72696E0B617070726F78657175616C09696E6372656D +656E740D6775696C6C656D6F746C6566740E6775696C6C656D6F74726967687408656C6C +697073697306416772617665064174696C6465064F74696C6465024F45026F6506656E64 +61736806656D646173680C71756F746564626C6C6566740D71756F746564626C72696768 +740971756F74656C6566740A71756F7465726967687406646976696465076C6F7A656E67 +650979646965726573697309596469657265736973086672616374696F6E044575726F0D +6775696C73696E676C6C6566740E6775696C73696E676C726967687402666902666C0964 +616767657264626C0E706572696F6463656E74657265640E71756F746573696E676C6261 +73650C71756F746564626C626173650B70657274686F7573616E640B4163697263756D66 +6C65780B4563697263756D666C6578064161637574650945646965726573697306456772 +617665064961637574650B4963697263756D666C65780949646965726573697306496772 +617665064F61637574650B4F63697263756D666C6578064F677261766506556163757465 +0B5563697263756D666C65780655677261766508646F746C657373690A63697263756D66 +6C65780574696C6465066D6163726F6E05627265766509646F74616363656E740472696E +6707636564696C6C610C68756E676172756D6C617574066F676F6E656B056361726F6E06 +4C736C617368066C736C61736806536361726F6E06736361726F6E065A6361726F6E067A +6361726F6E0962726F6B656E626172034574680365746806596163757465067961637574 +650554686F726E0574686F726E056D696E7573086D756C7469706C790B6F6E6573757065 +72696F720B74776F7375706572696F720D74687265657375706572696F72076F6E656861 +6C660A6F6E65717561727465720D74687265657175617274657273056672616E63064762 +72657665066762726576650449646F740853636564696C6C610873636564696C6C610643 +61637574650663616375746506436361726F6E06636361726F6E07646D6163726F6E096F +76657273636F7265066D6964646F74064162726576650661627265766507416F676F6E65 +6B07616F676F6E656B06446361726F6E06646361726F6E0644736C61736807456F676F6E +656B07656F676F6E656B06456361726F6E06656361726F6E064C6163757465066C616375 +7465064C6361726F6E066C6361726F6E044C646F74046C646F74064E6163757465066E61 +63757465064E6361726F6E066E6361726F6E094F64626C6163757465096F64626C616375 +7465065261637574650672616375746506526361726F6E06726361726F6E065361637574 +65067361637574650854636564696C6C610874636564696C6C6106546361726F6E067463 +61726F6E055572696E67057572696E67095564626C6163757465097564626C6163757465 +065A6163757465067A6163757465045A646F74047A646F740547616D6D61055468657461 +0350686905616C7068610564656C746107657073696C6F6E057369676D61037461750370 +68690D756E64657273636F726564626C096578636C616D64626C096E7375706572696F72 +0670657365746102494A02696A0B6E61706F7374726F706865066D696E75746506736563 +6F6E64096166696936313234380961666969363132383906483232303733064831383534 +3306483138353531064831383533330A6F70656E62756C6C657407416D6163726F6E0761 +6D6163726F6E0B4363697263756D666C65780B6363697263756D666C65780443646F7404 +63646F7407456D6163726F6E07656D6163726F6E06456272657665066562726576650445 +646F740465646F740B4763697263756D666C65780B6763697263756D666C65780447646F +740467646F740847636564696C6C610867636564696C6C610B4863697263756D666C6578 +0B6863697263756D666C657804486261720468626172064974696C6465066974696C6465 +07496D6163726F6E07696D6163726F6E064962726576650669627265766507496F676F6E +656B07696F676F6E656B0B4A63697263756D666C65780B6A63697263756D666C6578084B +636564696C6C61086B636564696C6C610C6B677265656E6C616E646963084C636564696C +6C61086C636564696C6C61084E636564696C6C61086E636564696C6C6103456E6703656E +67074F6D6163726F6E076F6D6163726F6E064F6272657665066F62726576650852636564 +696C6C610872636564696C6C610B5363697263756D666C65780B7363697263756D666C65 +7804546261720474626172065574696C6465067574696C646507556D6163726F6E07756D +6163726F6E065562726576650675627265766507556F676F6E656B07756F676F6E656B0B +5763697263756D666C65780B7763697263756D666C65780B5963697263756D666C65780B +7963697263756D666C6578056C6F6E67730A4172696E6761637574650A6172696E676163 +757465074145616375746507616561637574650B4F736C61736861637574650B6F736C61 +7368616375746509616E6F74656C65696106576772617665067767726176650657616375 +746506776163757465095764696572657369730977646965726573697306596772617665 +067967726176650D71756F74657265766572736564097261646963616C65780961666969 +303839343109657374696D61746564096F6E656569676874680C74687265656569676874 +68730B66697665656967687468730C736576656E656967687468730B636F6D6D61616363 +656E7410756E646572636F6D6D61616363656E7405746F6E6F730D646965726573697374 +6F6E6F730A416C706861746F6E6F730C457073696C6F6E746F6E6F7308457461746F6E6F +7309496F7461746F6E6F730C4F6D6963726F6E746F6E6F730C557073696C6F6E746F6E6F +730A4F6D656761746F6E6F7311696F74616469657265736973746F6E6F7305416C706861 +04426574610544656C746107457073696C6F6E045A6574610345746104496F7461054B61 +707061064C616D626461024D75024E75025869074F6D6963726F6E0250690352686F0553 +69676D610354617507557073696C6F6E0343686903507369054F6D6567610C496F746164 +696572657369730F557073696C6F6E64696572657369730A616C706861746F6E6F730C65 +7073696C6F6E746F6E6F7308657461746F6E6F7309696F7461746F6E6F7314757073696C +6F6E6469657265736973746F6E6F7304626574610567616D6D61047A6574610365746105 +746865746104696F7461056B61707061066C616D626461026D75026E75027869076F6D69 +63726F6E0372686F067369676D613107757073696C6F6E0363686903707369056F6D6567 +610C696F746164696572657369730F757073696C6F6E64696572657369730C6F6D696372 +6F6E746F6E6F730C757073696C6F6E746F6E6F730A6F6D656761746F6E6F730961666969 +313030323309616669693130303531096166696931303035320961666969313030353309 +616669693130303534096166696931303035350961666969313030353609616669693130 +303537096166696931303035380961666969313030353909616669693130303630096166 +696931303036310961666969313030363209616669693130313435096166696931303031 +370961666969313030313809616669693130303139096166696931303032300961666969 +313030323109616669693130303232096166696931303032340961666969313030323509 +616669693130303236096166696931303032370961666969313030323809616669693130 +303239096166696931303033300961666969313030333109616669693130303332096166 +696931303033330961666969313030333409616669693130303335096166696931303033 +360961666969313030333709616669693130303338096166696931303033390961666969 +313030343009616669693130303431096166696931303034320961666969313030343309 +616669693130303434096166696931303034350961666969313030343609616669693130 +303437096166696931303034380961666969313030343909616669693130303635096166 +696931303036360961666969313030363709616669693130303638096166696931303036 +390961666969313030373009616669693130303732096166696931303037330961666969 +313030373409616669693130303735096166696931303037360961666969313030373709 +616669693130303738096166696931303037390961666969313030383009616669693130 +303831096166696931303038320961666969313030383309616669693130303834096166 +696931303038350961666969313030383609616669693130303837096166696931303038 +380961666969313030383909616669693130303930096166696931303039310961666969 +313030393209616669693130303933096166696931303039340961666969313030393509 +616669693130303936096166696931303039370961666969313030373109616669693130 +303939096166696931303130300961666969313031303109616669693130313032096166 +696931303130330961666969313031303409616669693130313035096166696931303130 +360961666969313031303709616669693130313038096166696931303130390961666969 +313031313009616669693130313933096166696931303035300961666969313030393809 +616669693030323038096166696936313335320270690C6F6E656E756D657261746F720C +74776F6E756D657261746F720E74687265656E756D657261746F720D666F75726E756D65 +7261746F720D666976656E756D657261746F720E736576656E6E756D657261746F720E65 +696768746E756D657261746F7210446F6E74436F6D707265737348544D5808676C797068 +35373908676C79706835383008676C797068353831054F686F726E056F686F726E055568 +6F726E0575686F726E0D686F6F6B61626F7665636F6D620C646F7462656C6F77636F6D62 +096772617665636F6D62096163757465636F6D6208676C79706835393008676C79706835 +393108676C79706835393208676C79706835393308676C79706835393408676C79706835 +393508676C79706835393608676C79706835393708676C79706835393808676C79706835 +393908676C79706836303008676C79706836303108676C79706836303208676C79706836 +303308676C7970683630340941646F7462656C6F770961646F7462656C6F770A41686F6F +6B61626F76650A61686F6F6B61626F7665104163697263756D666C657861637574651061 +63697263756D666C65786163757465104163697263756D666C6578677261766510616369 +7263756D666C65786772617665144163697263756D666C6578686F6F6B61626F76651461 +63697263756D666C6578686F6F6B61626F7665104163697263756D666C657874696C6465 +106163697263756D666C657874696C6465134163697263756D666C6578646F7462656C6F +77136163697263756D666C6578646F7462656C6F770B41627265766561637574650B6162 +7265766561637574650B41627265766567726176650B61627265766567726176650F4162 +72657665686F6F6B61626F76650F616272657665686F6F6B61626F76650B416272657665 +74696C64650B61627265766574696C64650E416272657665646F7462656C6F770E616272 +657665646F7462656C6F770945646F7462656C6F770965646F7462656C6F770A45686F6F +6B61626F76650A65686F6F6B61626F7665064574696C6465066574696C64651045636972 +63756D666C65786163757465106563697263756D666C6578616375746510456369726375 +6D666C65786772617665106563697263756D666C65786772617665144563697263756D66 +6C6578686F6F6B61626F7665146563697263756D666C6578686F6F6B61626F7665104563 +697263756D666C657874696C6465106563697263756D666C657874696C64651345636972 +63756D666C6578646F7462656C6F77136563697263756D666C6578646F7462656C6F770A +49686F6F6B61626F76650A69686F6F6B61626F76650949646F7462656C6F770969646F74 +62656C6F7708676C79706836343908676C79706836353008676C79706836353108676C79 +70683635320573686576610A68617461667365676F6C0A686174616670617461680B6861 +74616671616D617473056869726971057473657265057365676F6C057061746168067161 +6D61747305686F6C616D0671756275747306646167657368056D65746567056D61716166 +0472616665057061736571077368696E646F740673696E646F7408736F66706173757104 +616C6566036265740567696D656C0564616C657402686503766176057A6179696E036865 +740374657403796F640866696E616C6B6166036B6166056C616D65640866696E616C6D65 +6D036D656D0866696E616C6E756E036E756E0673616D656B68046179696E0766696E616C +70650270650A66696E616C747361646905747361646903716F660472657368047368696E +0374617609646F75626C6576617606766176796F6409646F75626C65796F640667657265 +73680967657273686179696D0D6E657773686571656C7369676E0A7661767368696E646F +740D66696E616C6B616673686576610E66696E616C6B616671616D6174730A6C616D6564 +686F6C616D106C616D6564686F6C616D64616765736807616C746179696E0B7368696E73 +68696E646F740A7368696E73696E646F74117368696E6461676573687368696E646F7410 +7368696E64616765736873696E646F7409616C656670617461680A616C656671616D6174 +7309616C65666D61706971096265746461676573680B67696D656C6461676573680B6461 +6C6574646167657368086865646167657368097661766461676573680B7A6179696E6461 +676573680974657464616765736809796F646461676573680E66696E616C6B6166646167 +657368096B61666461676573680B6C616D6564646167657368096D656D64616765736809 +6E756E6461676573680C73616D656B686461676573680D66696E616C7065646167657368 +0870656461676573680B747361646964616765736809716F666461676573680A72657368 +6461676573680A7368696E64616765736808746176646167657308766176686F6C616D07 +62657472616665076B6166726166650670657261666509616C65666C616D6564127A6572 +6F77696474686E6F6E6A6F696E65720F7A65726F77696474686A6F696E65720F6C656674 +746F72696768746D61726B0F7269676874746F6C6566746D61726B096166696935373338 +380961666969353734303309616669693537343037096166696935373430390961666969 +353734343009616669693537343531096166696935373435320961666969353734353309 +616669693537343534096166696935373435350961666969353734353609616669693537 +343537096166696935373435380961666969353733393209616669693537333933096166 +696935373339340961666969353733393509616669693537333936096166696935373339 +370961666969353733393809616669693537333939096166696935373430300961666969 +353734303109616669693537333831096166696935373436310961666969363331363709 +616669693537343539096166696935373534330961666969353735333409616669693537 +343934096166696936323834330961666969363238343409616669693632383435096166 +696936343234300961666969363432343109616669693633393534096166696935373338 +320961666969363432343209616669693632383831096166696935373530340961666969 +353733363909616669693537333730096166696935373337310961666969353733373209 +616669693537333733096166696935373337340961666969353733373509616669693537 +333931096166696935373437310961666969353734363009616669693532323538096166 +696935373530360961666969363239353809616669693632393536096166696935323935 +370961666969353735303509616669693632383839096166696936323838370961666969 +363238383809616669693537353037096166696936323936310961666969363239353909 +616669693632393630096166696935373530380961666969363239363209616669693537 +353637096166696936323936340961666969353233303509616669693532333036096166 +696935373530390961666969363239363709616669693632393635096166696936323936 +360961666969353735353509616669693532333634096166696936333735330961666969 +363337353409616669693633373539096166696936333736330961666969363337393509 +616669693632383931096166696936333830380961666969363239333809616669693633 +383130096166696936323934320961666969363239343709616669693633383133096166 +696936333832330961666969363338323409616669693633383333096166696936333834 +340961666969363238383209616669693632383833096166696936323838340961666969 +363238383509616669693632383836094F646F7462656C6F77096F646F7462656C6F770A +4F686F6F6B61626F76650A6F686F6F6B61626F7665104F63697263756D666C6578616375 +7465106F63697263756D666C65786163757465104F63697263756D666C65786772617665 +106F63697263756D666C65786772617665144F63697263756D666C6578686F6F6B61626F +7665146F63697263756D666C6578686F6F6B61626F7665104F63697263756D666C657874 +696C6465106F63697263756D666C657874696C6465134F63697263756D666C6578646F74 +62656C6F77136F63697263756D666C6578646F7462656C6F770A4F686F726E6163757465 +0A6F686F726E61637574650A4F686F726E67726176650A6F686F726E67726176650E4F68 +6F726E686F6F6B61626F76650E6F686F726E686F6F6B61626F76650A4F686F726E74696C +64650A6F686F726E74696C64650D4F686F726E646F7462656C6F770D6F686F726E646F74 +62656C6F770955646F7462656C6F770975646F7462656C6F770A55686F6F6B61626F7665> +<0A75686F6F6B61626F76650A55686F726E61637574650A75686F726E61637574650A5568 +6F726E67726176650A75686F726E67726176650E55686F726E686F6F6B61626F76650E75 +686F726E686F6F6B61626F76650A55686F726E74696C64650A75686F726E74696C64650D +55686F726E646F7462656C6F770D75686F726E646F7462656C6F7708676C797068383832 +08676C7970683838330959646F7462656C6F770979646F7462656C6F770A59686F6F6B61 +626F76650A79686F6F6B61626F7665065974696C6465067974696C646504646F6E670974 +696C6465636F6D620863757272656E63790000000000000100000C92000102160C000009 +0084000400B4FF9C000400B6FF9C000A0024FF9C000A0090FF9C000F00B4FF2E000F00B6 +FF2E00100024FFCE0010002CFFE20010002DFF9C00100036FFEC00100037FF6A00100039 +FFCE0010003AFFCE0010003BFFB00010003CFF740010003DFFE200100044FFEC00100059 +FFD80010005AFFEC0010005BFFCE0010005CFFD80010005DFFD800100090FFCE001000A0 +FFEC0011000FFF7E00110010FF60001100B1FF88001100B2FF88001100B4FF2E001100B6 +FF2E001D00B2FF7400240010FFCE00240036FFF600240037FF8800240038FFF600240039 +FFC40024003AFFCE0024003CFFB000240057FFEC00240058FFF600240059FFCE0024005A +FFE20024005CFFCE002400B1FFCE002400B2FFCE002400B3FFCE002400B4FF88002400B5 +FFCE002400B6FF880025000FFFEC00250010000A00250011FFEC00250037FFC4002500AB +FFEC002500B1000A002500B2000A00260010FFCE002600AFFFE7002600B1FFCE002600B2 +FFCE0027000FFFCE00270011FFCE00270037FFCE0027003AFFEC0027003BFFF60027003C +FFEC0027003DFFEC002700ABFFCE0029000FFED400290011FED40029001DFFC40029001E +FFC400290022003C00290024FF9C00290037001E00290044FF9C00290048FFCE00290052 +FFCE00290090FF92002900A0FF9C002900A1FFCE002900ABFED4002900B0FFCE002C0010 +FFE2002C00B1FFE2002C00B2FFE2002D000FFFEC002D0011FFEC002D0024FFF6002D0090 +FFF6002D00ABFFEC002E0010FF92002E0032FFEC002E0044FFC4002E0048FFBA002E0052 +FFBA002E0058FFCE002E0059FFB0002E005AFFBA002E005CFFB0002E0091FFEC002E00A0 +FFC4002E00A1FFBA002E00AFFFEC002E00B0FFBA002E00B1FF92002E00B2FF92002F000A +FF88002F0010FF60002F0026FFEC002F002AFFEC002F002D0064002F0032FFEC002F0037 +FF56002F0039FF92002F003AFF9C002F003CFF60002F0059FF92002F005CFF92002F0064 +FFEC002F0091FFEC002F00AFFFEC002F00B1FF60002F00B2FF60002F00B4FF60002F00B6 +FF600032000FFFE200320011FFE200320037FFCE0032003BFFF60032003CFFEC0032003D +FFEC003200ABFFE20033000FFED400330011FED400330024FFCE0033003C001400330044 +FFCE00330048FFCE00330052FFCE00330090FFBA003300A0FFCE003300A1FFCE003300AB +FED4003300B0FFCE0034000FFFE200340011FFE2003400ABFFE200350010FF9C00350037 +FFC40035003CFFEC00350044FFD800350048FFCE00350052FFCE00350058FFEC0035005C +FFC9003500A0FFCE003500A1FFCE003500B0FFC4003500B1FF9C003500B2FF9C003500B4 +FFBA003500B6FFBA0036000FFFEC00360011FFEC00360024FFEC00360036FFEA00360059 +FFE20036005AFFEC0036005CFFE200360090FFEC003600ABFFEC0037000FFEDE00370010 +FF6A00370011FEDE0037001DFF380037001EFF3800370022003C00370024FF8800370026 +FFD80037002AFFD800370032FFCE00370036FFF400370037FFBA00370044FF1000370046 +FF2400370048FF240037004AFF2E00370052FF2400370055FF3800370056FF4C00370058 +FF3800370059FF380037005AFF380037005CFF380037005DFF5600370064FFD800370090 +FF7E00370091FFCE003700A0FF10003700A1FF24003700ABFEDE003700AFFFCE003700B0 +FF24003700B1FF6A003700B2FF6A0038000FFFEC00380011FFEC00380024FFF600380090 +FFEC003800ABFFEC0039000FFEDE00390010FFCE00390011FEDE0039001DFFB00039001E +FFB000390024FFC400390044FF9C00390048FF9C00390052FF9C00390058FFC40039005C +FFBF00390090FFBA003900A0FF9C003900A1FF9C003900ABFEDE003900B0FF9C003900B1 +FFCE003900B2FFCE003A000FFEDE003A0010FFCE003A0011FF24003A001DFFB0003A001E +FFB0003A0024FFCE003A0044FF9C003A0048FF9C003A0052FF9C003A0055FFC4003A0058 +FFC4003A005CFFBF003A0090FFC4003A00A0FF9C003A00A1FF9C003A00ABFF24003A00B0 +FF9C003A00B1FFCE003A00B2FFCE003B0010FFB0003B0026FFF6003B002AFFF6003B0032 +FFF6003B0044FFCE003B0048FFC4003B0052FFC4003B0058FFE2003B005CFFB0003B0064 +FFF6003B0091FFF6003B00A0FFCE003B00A1FFC4003B00AFFFF6003B00B0FFC4003B00B1 +FFB0003B00B2FFB0003C000FFEDE003C0010FF74003C0011FEDE003C001DFF38003C001E +FF38003C0024FFB0003C0032FFEC003C0044FF74003C0047FF88003C0048FF7E003C004A +FF7E003C0050FF9C003C0051FF9C003C0052FF7E003C0053FF9C003C0054FF7E003C0055 +FF9C003C0056FF92003C0058FF92003C0059FF9C003C0090FFB0003C0091FFEC003C00A0 +FF74003C00A1FF7E003C00ABFEDE003C00AFFFEC003C00B0FF7E003C00B1FF74003C00B2 +FF74003D0010FFC4003D0026FFEC003D002AFFEC003D0032FFEC003D003DFFF6003D0044 +FFCE003D0048FFC4003D0052FFC4003D005AFFD8003D005CFFBF003D0064FFEC003D0091 +FFEC003D00A0FFCE003D00A1FFC4003D00AFFFEC003D00B0FFC4003D00B1FFCE003D00B2 +FFCE00440059FFF00044005AFFF60044005CFFF00045000FFFE200450011FFEC0045005C +FFFB004500ABFFEC00460010FFEC00460037FFC4004600B1FFEC004600B2FFEC00480037 +FF7400490005003C0049000A003C0049000C00640049000D00320049000FFF7E00490010 +FFCE00490011FF8800490022006E0049003F00640049004000640049005CFFF600490060 +0064004900ABFF88004900B1FFCE004900B2FFCE004900B40032004900B60032004B0059 +FFEC004B005AFFF6004B005CFFEC004E0010FF9C004E0048FFEC004E0052FFEC004E00A1 +FFEC004E00B0FFEC004E00B1FF9C004E00B2FF9C00500059FFEC0050005AFFF60050005C +FFEC00510059FFEC0051005AFFF60051005CFFEC0052000FFFE200520011FFEC00520059 +FFF10052005BFFEC0052005CFFF1005200ABFFEC0053000FFFE200530011FFEC0053005C +FFFB005300ABFFEC0055000FFEDE00550010FFEC00550011FEDE00550044FFDC005500A0 +FFD8005500ABFEDE005500B1FFEC005500B2FFEC005500B4001E005500B6001E00570010 +FFD80057005CFFF6005700B1FFD8005700B2FFD8005700B40014005700B600140059000F +FF4C00590010FFD800590011FF4C00590044FFD800590048FFEE00590052FFEE005900A0 +FFD8005900A1FFEE005900ABFF4C005900B0FFF1005900B1FFD8005900B2FFD8005A000F +FFBA005A0010FFEC005A0011FFBA005A0044FFEC005A00A0FFEC005A00ABFFBA005A00B1 +FFEC005A00B2FFEC005B0010FFCE005B0046FFEC005B0047FFF6005B0048FFE8005B004A +FFF6005B0052FFE8005B006FFFEC005B00A1FFE8005B00B0FFEC005B00B1FFCE005B00B2 +FFCE005C000FFF42005C0010FFD8005C0011FF42005C0044FFD8005C0046FFEE005C0047 +FFF6005C0048FFEE005C004AFFF6005C0052FFEE005C0054FFF6005C006FFFEE005C00A0 +FFD8005C00A1FFEE005C00ABFF4C005C00B0FFF1005C00B1FFD8005C00B2FFD8005D0010 +FFEC005D0046FFF6005D0047FFF6005D0048FFF4005D004AFFF6005D0052FFF4005D0054 +FFF6005D006FFFF6005D00A1FFF4005D00B1FFEC005D00B2FFEC00640010FFCE006400AF +FFE7006400B1FFCE006400B2FFCE006F0010FFEC006F00B1FFEC006F00B2FFEC0091000F +FFE200910011FFE200910037FFCE0091003BFFF60091003CFFEC0091003DFFEC009100AB +FFE200A1000FFFE200A10011FFEC00A10059FFF100A1005BFFEC00A1005CFFF100A100AB +FFEC00AB00B4FF2E00AB00B6FF2E00B10024FFCE00B1002CFFE200B1002DFF9C00B10036 +FFEC00B10037FF6A00B10039FFCE00B1003AFFCE00B1003BFFB000B1003CFF7400B1003D +FFF600B10044FFEC00B10059FFD800B1005AFFEC00B1005BFFCE00B1005CFFD800B1005D +FFD800B10090FFCE00B100A0FFEC00B20024FFCE00B2002CFFE200B2002DFF9C00B20036 +FFEC00B20037FF6A00B20039FFCE00B2003AFFCE00B2003BFFB000B2003CFF7400B2003D +FFF600B20044FFEC00B20059FFD800B2005AFFEC00B2005BFFCE00B2005CFFD800B2005D +FFD800B20090FFCE00B200A0FFEC00B30024FF9C00B30090FF9C00B4000FFF2E00B40011 +FF2E00B40024FF9C00B40037006E00B40039006400B4003A003C00B4003C006E00B40056 +FFBA00B40057002800B40090FF9C00B400ABFF2E00B50024FF9C00B50090FF9C00B6000F +FF2E00B60011FF2E00B60024FF9C00B60037006E00B60039006400B6003A003C00B6003C +006E00B60056FFBA00B60057002800B60090FF9C00B600ABFF2E00C30037FF2E00C30039 +FF2E00C3003AFF9C00C3003CFF2E00C40037FF2E00C40039FF2E00C4003AFF9C00C4003C +FF2E0000000000010001000100000001000013FF0000001400000000000013F7308213F3 +06092A864886F70D010702A08213E4308213E0020101310E300C06082A864886F70D0205 +05003060060A2B060104018237020104A0523050302C060A2B06010401823702011CA21E +801C003C003C003C004F00620073006F006C006500740065003E003E003E3020300C0608 +2A864886F70D020505000410503EEC935CE1D8D33511E69A791E4594A0820F3F308202C0 +3082022902141389B4D18AE8A7C4BD35C79B8D88CA1FCA535691300D06092A864886F70D +010104050030819E311F301D060355040A1316566572695369676E205472757374204E65 +74776F726B31173015060355040B130E566572695369676E2C20496E632E312C302A0603 +55040B1323566572695369676E2054696D65205374616D70696E67205365727669636520 +526F6F7431343032060355040B132B4E4F204C494142494C495459204143434550544544 +2C20286329393720566572695369676E2C20496E632E301E170D39373035313230373030 +30305A170D3939313233313037303030305A30819E311F301D060355040A131656657269 +5369676E205472757374204E6574776F726B31173015060355040B130E56657269536967 +6E2C20496E632E312C302A060355040B1323566572695369676E2054696D65205374616D +70696E67205365727669636520526F6F7431343032060355040B132B4E4F204C49414249 +4C4954592041434345505445442C20286329393720566572695369676E2C20496E632E30 +819F300D06092A864886F70D010101050003818D0030818902818100D32E20F0687C2C2D +2E811CB106B2A70BB7110D57DA53D875E3C9332AB2D4F6095B34F3E990FE090CD0DB1B5A +B9CDE7F688B19DC08725EB7D5810736A78CB7115FDC658F629AB585E9604FD2D62115881 +1CCA7194D522582FD5CC14058436BA94AAB44D4AE9EE3B22AD56997E219C6C86C04A4797 +6AB4A636D5FC092DD3B4399B0203010001300D06092A864886F70D010104050003818100 +3A119C85053ED2E980FB7BD5A9F4AC79FC05FC953D7123A92B28DF8C136589FE2C87018F +5A9A62CA11A780F4B7BE14B7D156996B086245C6A2A5DA357F0522DE722D048605A77C09 +16931443F0F7164DD6078E9B106C58FE0A3597CA899FDF04709C2A7D618EC1E80B719AA8 +C76662423D959422329822898AFA640824F5D2FA308202CD30820236021500BD119ADA43 +ED21FB46588489CA46889025EE1460300D06092A864886F70D010104050030819E311F30 +1D060355040A1316566572695369676E205472757374204E6574776F726B311730150603 +55040B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369 +676E2054696D65205374616D70696E67205365727669636520526F6F7431343032060355 +040B132B4E4F204C494142494C4954592041434345505445442C20286329393720566572 +695369676E2C20496E632E301E170D3937303531323037303030305A170D393931323331 +3037303030305A3081AC31273025060355040B131E566572695369676E2054696D652053 +74616D70696E672053657276696365311F301D060355040B1316566572695369676E2054 +72757374204E6574776F726B31343032060355040B132B4E4F204C494142494C49545920 +41434345505445442C20286329393720566572695369676E2C20496E632E311730150603 +55040A130E566572695369676E2C20496E632E3111300F06035504071308496E7465726E +657430819D300D06092A864886F70D010101050003818B0030818702818100AB61EDB4AD +8D904790DCB4115E69DC0A7F62900631CDCEFF889146D7493A94E9D4063F9DADA2785AEC +F9FC63454FB80B6E30EFA236AB2D09DFF16F27AB0D516005354F7FCE544FD0B72C42D80B +D08DB85EFFB680D0E396B47F224942106CD398B00156A3C3CF2E9F3AF47FA858A6D72265 +E58CAB789CBCD94742685B2D7DFDB5020103300D06092A864886F70D0101040500038181 +006D60FB995FA469B3D37B702B62231E442051AF2315C77402F949F2271A5CAC86713508 +2BF68FDEE0B596E88BA74BE373C848099DB0DA8BDA1592CA03E509255606E74EA447A5D1 +5746D43856F521CDC3263B2D2532CE9BE2BF4047EAD86D4776E5C030A30F80CE7FD83B7E +A0F9952A312B15FAC814EDDDB0E9554170462D2C7E308209A63082090FA0030201020210 +7966966E83B0D0B601126E9DC0B46571300D06092A864886F70D01010205003061311130 +0F06035504071308496E7465726E657431173015060355040A130E566572695369676E2C +20496E632E31333031060355040B132A566572695369676E20436F6D6D65726369616C20 +536F667477617265205075626C697368657273204341301E170D39383034313630303030 +30305A170D3939303431363233353935395A3082015D3111300F06035504071308496E74 +65726E657431173015060355040A130E566572695369676E2C20496E632E313330310603 +55040B132A566572695369676E20436F6D6D65726369616C20536F667477617265205075 +626C69736865727320434131463044060355040B133D7777772E766572697369676E2E63 +6F6D2F7265706F7369746F72792F43505320496E636F72702E206279205265662E2C4C49 +41422E4C54442863293936313E303C060355040B13354469676974616C20494420436C61 +73732033202D204D6963726F736F667420536F6674776172652056616C69646174696F6E +207632310B3009060355040613025553311330110603550408130A57617368696E67746F +6E3110300E060355040713075265646D6F6E64311E301C060355040314154D6963726F73 +6F667420436F72706F726174696F6E311E301C060355040B14154D6963726F736F667420 +436F72706F726174696F6E30820120300D06092A864886F70D01010105000382010D0030 +8201080282010100B490D226A864E6EB15C3FF6D7B414F0AF96F2A71CE2E1853A63236E0 +D468E135FD4912D896FC65CF531420BE04C97AF5C9706D94ECCCB3AF2A309A32587CB6A9 +6B256799C0E277EA05E5EFE396F7AD0B19A6AE3C8470E2F86F5C4F7D6F0F52458A15D765 +DC3B2005E33DA16C973A0E0B2513ED21CB208E397A628305C9231AFC529DAC9D4C96D73C +4E583D827BEE093556B568C04245A23B31A3FBD895FB55C72CA8A3C3294FCEF493F0031F +7BF1153AA9F8AA5083056D62F08B138838D9E31C0E73C10640BA28C3EBCD9271C7BE66B2 +A15422D60B677CF8877989AC660AAA51FAFD7221FC865DC6F44A0EEC5861234DD0B13A64 +E0139E5EC8856D4C16AF3D07020103A38205DD308205D930090603551D1304023000300B +0603551D0F0404030205A03081880603551D01048180307E80107B96E4D143FD6898F338 +CC6E3BF20B82A16330613111300F06035504071308496E7465726E657431173015060355 +040A130E566572695369676E2C20496E632E31333031060355040B132A56657269536967 +6E20436F6D6D65726369616C20536F667477617265205075626C69736865727320434182 +0502B400000130210603551D040101FF04173014300E300C060A2B060104018237020116 +0302078000300D0603551D0A040630040302064030820436060A2B06010401823702010A +0101FF048204233082041FA029802768747470733A2F2F7777772E766572697369676E2E +636F6D2F7265706F7369746F72792F435053A18203B8818203B454686973206365727469 +66696361746520696E636F72706F7261746573206279207265666572656E63652C20616E +642069747320757365206973207374726963746C790A7375626A65637420746F2C207468 +6520566572695369676E2043657274696669636174696F6E205072616374696365205374 +6174656D656E742028435053290A76657273696F6E20312E302C20617661696C61626C65 +20696E2074686520566572695369676E207265706F7369746F72792061743A0A68747470 +733A2F2F7777772E766572697369676E2E636F6D3B20627920452D6D61696C2061742043 +50532D726571756573747340766572697369676E2E636F6D3B206F720A6279206D61696C +20617420566572695369676E2C20496E632E2C203235393320436F617374204176652E2C +204D6F756E7461696E20566965772C2043412039343034330A55534120436F7079726967 +6874202863293139393620566572695369676E2C20496E632E2020416C6C205269676874 +732052657365727665642E204345525441494E0A57415252414E5449455320444953434C +41494D454420414E44204C494142494C495459204C494D495445442E0A0A5741524E494E +473A2054484520555345204F462054484953204345525449464943415445204953205354 +524943544C59205355424A45435420544F205448450A564552495349474E204345525449 +4649434154494F4E2050524143544943452053544154454D454E542E2020544845204953 +5355494E4720415554484F524954590A444953434C41494D53204345525441494E20494D +504C49454420414E4420455850524553532057415252414E544945532C20494E434C5544 +494E472057415252414E544945530A4F46204D45524348414E544142494C495459204F52 +204649544E45535320464F52204120504152544943554C415220505552504F53452C2041 +4E442057494C4C204E4F540A4245204C4941424C4520464F5220434F4E53455155454E54 +49414C2C2050554E49544956452C20414E44204345525441494E204F544845522044414D +414745532E205345450A5448452043505320464F522044455441494C532E0A0A436F6E74 +656E7473206F662074686520566572695369676E2072656769737465726564206E6F6E76 +657269666965645375626A656374417474726962757465730A657874656E73696F6E2076 +616C7565207368616C6C206E6F7420626520636F6E736964657265642061732061636375 +7261746520696E666F726D6174696F6E0A76616C69646174656420627920746865204941 +2E0AA336803468747470733A2F2F7777772E766572697369676E2E636F6D2F7265706F73 +69746F72792F766572697369676E6C6F676F2E6769663081AF0603551D200481A7308030 +80060B6086480186F845010701013080302806082B06010505070201161C68747470733A +2F2F7777772E766572697369676E2E636F6D2F435053306206082B060105050702023056 +3015160E566572695369676E2C20496E632E30030201011A3D566572695369676E277320 +43505320696E636F72702E206279207265666572656E6365206C6961622E206C74642E20 +286329393720566572695369676E0000000000003016060A2B06010401823702011B0408 +30060101FF0101FF300D06092A864886F70D010102050003818100954CA27955DA745C8B +25C2A620F06CB8B37B467B9E9F7ABA710648151265CC5D29F8513B8971B1F4143878DA8F +AE0B8036905D4897C500380A53BF4037FF8A13276D004734F7484C2E72F2C6D37EFD446F +228FD1929FE394EDE7FF00C9C2EE721CD99C036EB6C1637B3278443B9E858AFB84863728 +2EE7A638373EBAFCF382233182042430820420020101307530613111300F060355040713 +08496E7465726E657431173015060355040A130E566572695369676E2C20496E632E3133 +3031060355040B132A566572695369676E20436F6D6D65726369616C20536F6674776172 +65205075626C69736865727320434102107966966E83B0D0B601126E9DC0B46571300C06 +082A864886F70D02050500A081AE301906092A864886F70D010903310C060A2B06010401 +8237020104301C060A2B06010401823702010B310E300C060A2B06010401823702011630 +1F06092A864886F70D010904311204105BA6237427F8290EF09CCF5B63F749F83052060A +2B06010401823702010C31443042A01A801800560065007200640061006E006100200046 +006F006E0074A1248022687474703A2F2F7777772E6D6963726F736F66742E636F6D2F74 +727565747970652F300D06092A864886F70D0101010500048201003EFBA519B6A00C823F +B823EA3A1E5E6EBDBBF2C647D1F1093C66910B72FEA26B78E409E7750E62A559DAAC12F7 +CCA36B0725F8BB2E0409AEE1156BE3736F46D1B116DF2B18ABCF394DCF0EF8EE01A758E5 +E4872882FFDD5F04C39F3258358C3DE27BE8FC410AC11736DD19609E3BACBB2257C5E4A4 +836F811D07EC80DAB42FE9AC33537823FA2AC0D406166130C356085818B3CEC8A53763BF +88191B4E52ED790B57C924CEA670505AA2621C1121663215F15D1A9E89A6BC2AA35F5B1F +86E4FDEC2280203A57D736DD2C29A4D2D29F00BAF260927AB3B36EF1C4CC5100CAC54BAA +0AFB74D0101FBEC53815E46B3814DF7E5DFC4A121257608F59AA76D5F333A3A18201D030 +8201CC06092A864886F70D010906318201BD308201B90201013081B830819E311F301D06 +0355040A1316566572695369676E205472757374204E6574776F726B3117301506035504 +0B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369676E +2054696D65205374616D70696E67205365727669636520526F6F7431343032060355040B +132B4E4F204C494142494C4954592041434345505445442C202863293937205665726953 +69676E2C20496E632E021500BD119ADA43ED21FB46588489CA46889025EE1460300C0608 +2A864886F70D02050500A059301806092A864886F70D010903310B06092A864886F70D01 +0701301C06092A864886F70D010905310F170D3938313131323135313835305A301F0609 +2A864886F70D01090431120410641EED59DAFC3103655C9A2A4309D288300D06092A8648 +86F70D01010105000481809092A6C858A52E216E3E56A1C40477C3C63030D247298EF8EA +BFA1C4D5DDE8C375555276DDBB2761ADFC914D772AD331C04DDD675B9736F7D136CAA72D +41CF9F8377C51611E0D1B6EDD8C5AB73694109FD5312908B17319E96C22CCEDD65C9D342 +DC0E3B159C36E0FDA54B21C8DD968B90621C263E94F737AC1997B9D84E517C0000> +] def +/CharStrings 893 dict dup begin +/.notdef 0 def /.null 1 def /nonmarkingreturn 2 def /space 3 def /exclam 4 def +/quotedbl 5 def /numbersign 6 def /dollar 7 def /percent 8 def +/ampersand 9 def /quotesingle 10 def /parenleft 11 def /parenright 12 def +/asterisk 13 def /plus 14 def /comma 15 def /hyphen 16 def +/period 17 def /slash 18 def /zero 19 def /one 20 def +/two 21 def /three 22 def /four 23 def /five 24 def +/six 25 def /seven 26 def /eight 27 def /nine 28 def +/colon 29 def /semicolon 30 def /less 31 def /equal 32 def +/greater 33 def /question 34 def /at 35 def /A 36 def +/B 37 def /C 38 def /D 39 def /E 40 def +/F 41 def /G 42 def /H 43 def /I 44 def +/J 45 def /K 46 def /L 47 def /M 48 def +/N 49 def /O 50 def /P 51 def /Q 52 def +/R 53 def /S 54 def /T 55 def /U 56 def +/V 57 def /W 58 def /X 59 def /Y 60 def +/Z 61 def /bracketleft 62 def /backslash 63 def /bracketright 64 def +/asciicircum 65 def /underscore 66 def /grave 67 def /a 68 def +/b 69 def /c 70 def /d 71 def /e 72 def +/f 73 def /g 74 def /h 75 def /i 76 def +/j 77 def /k 78 def /l 79 def /m 80 def +/n 81 def /o 82 def /p 83 def /q 84 def +/r 85 def /s 86 def /t 87 def /u 88 def +/v 89 def /w 90 def /x 91 def /y 92 def +/z 93 def /braceleft 94 def /bar 95 def /braceright 96 def +/asciitilde 97 def /Adieresis 98 def /Aring 99 def /Ccedilla 100 def +/Eacute 101 def /Ntilde 102 def /Odieresis 103 def /Udieresis 104 def +/aacute 105 def /agrave 106 def /acircumflex 107 def /adieresis 108 def +/atilde 109 def /aring 110 def /ccedilla 111 def /eacute 112 def +/egrave 113 def /ecircumflex 114 def /edieresis 115 def /iacute 116 def +/igrave 117 def /icircumflex 118 def /idieresis 119 def /ntilde 120 def +/oacute 121 def /ograve 122 def /ocircumflex 123 def /odieresis 124 def +/otilde 125 def /uacute 126 def /ugrave 127 def /ucircumflex 128 def +/udieresis 129 def /dagger 130 def /degree 131 def /cent 132 def +/sterling 133 def /section 134 def /bullet 135 def /paragraph 136 def +/germandbls 137 def /registered 138 def /copyright 139 def /trademark 140 def +/acute 141 def /dieresis 142 def /notequal 143 def /AE 144 def +/Oslash 145 def /infinity 146 def /plusminus 147 def /lessequal 148 def +/greaterequal 149 def /yen 150 def /mu1 151 def /partialdiff 152 def +/summation 153 def /product 154 def /pi1 155 def /integral 156 def +/ordfeminine 157 def /ordmasculine 158 def /Ohm 159 def /ae 160 def +/oslash 161 def /questiondown 162 def /exclamdown 163 def /logicalnot 164 def +/radical 165 def /florin 166 def /approxequal 167 def /increment 168 def +/guillemotleft 169 def /guillemotright 170 def /ellipsis 171 def /Agrave 172 def +/Atilde 173 def /Otilde 174 def /OE 175 def /oe 176 def +/endash 177 def /emdash 178 def /quotedblleft 179 def /quotedblright 180 def +/quoteleft 181 def /quoteright 182 def /divide 183 def /lozenge 184 def +/ydieresis 185 def /Ydieresis 186 def /fraction 187 def /Euro 188 def +/guilsinglleft 189 def /guilsinglright 190 def /fi 191 def /fl 192 def +/daggerdbl 193 def /periodcentered 194 def /quotesinglbase 195 def /quotedblbase 196 def +/perthousand 197 def /Acircumflex 198 def /Ecircumflex 199 def /Aacute 200 def +/Edieresis 201 def /Egrave 202 def /Iacute 203 def /Icircumflex 204 def +/Idieresis 205 def /Igrave 206 def /Oacute 207 def /Ocircumflex 208 def +/Ograve 209 def /Uacute 210 def /Ucircumflex 211 def /Ugrave 212 def +/dotlessi 213 def /circumflex 214 def /tilde 215 def /macron 216 def +/breve 217 def /dotaccent 218 def /ring 219 def /cedilla 220 def +/hungarumlaut 221 def /ogonek 222 def /caron 223 def /Lslash 224 def +/lslash 225 def /Scaron 226 def /scaron 227 def /Zcaron 228 def +/zcaron 229 def /brokenbar 230 def /Eth 231 def /eth 232 def +/Yacute 233 def /yacute 234 def /Thorn 235 def /thorn 236 def +/minus 237 def /multiply 238 def /onesuperior 239 def /twosuperior 240 def +/threesuperior 241 def /onehalf 242 def /onequarter 243 def /threequarters 244 def +/franc 245 def /Gbreve 246 def /gbreve 247 def /Idot 248 def +/Scedilla 249 def /scedilla 250 def /Cacute 251 def /cacute 252 def +/Ccaron 253 def /ccaron 254 def /dmacron 255 def /overscore 256 def +/middot 257 def /Abreve 258 def /abreve 259 def /Aogonek 260 def +/aogonek 261 def /Dcaron 262 def /dcaron 263 def /Dslash 264 def +/Eogonek 265 def /eogonek 266 def /Ecaron 267 def /ecaron 268 def +/Lacute 269 def /lacute 270 def /Lcaron 271 def /lcaron 272 def +/Ldot 273 def /ldot 274 def /Nacute 275 def /nacute 276 def +/Ncaron 277 def /ncaron 278 def /Odblacute 279 def /odblacute 280 def +/Racute 281 def /racute 282 def /Rcaron 283 def /rcaron 284 def +/Sacute 285 def /sacute 286 def /Tcedilla 287 def /tcedilla 288 def +/Tcaron 289 def /tcaron 290 def /Uring 291 def /uring 292 def +/Udblacute 293 def /udblacute 294 def /Zacute 295 def /zacute 296 def +/Zdot 297 def /zdot 298 def /Gamma 299 def /Theta 300 def +/Phi 301 def /alpha 302 def /delta 303 def /epsilon 304 def +/sigma 305 def /tau 306 def /phi 307 def /underscoredbl 308 def +/exclamdbl 309 def /nsuperior 310 def /peseta 311 def /IJ 312 def +/ij 313 def /napostrophe 314 def /minute 315 def /second 316 def +/afii61248 317 def /afii61289 318 def /H22073 319 def /H18543 320 def +/H18551 321 def /H18533 322 def /openbullet 323 def /Amacron 324 def +/amacron 325 def /Ccircumflex 326 def /ccircumflex 327 def /Cdot 328 def +/cdot 329 def /Emacron 330 def /emacron 331 def /Ebreve 332 def +/ebreve 333 def /Edot 334 def /edot 335 def /Gcircumflex 336 def +/gcircumflex 337 def /Gdot 338 def /gdot 339 def /Gcedilla 340 def +/gcedilla 341 def /Hcircumflex 342 def /hcircumflex 343 def /Hbar 344 def +/hbar 345 def /Itilde 346 def /itilde 347 def /Imacron 348 def +/imacron 349 def /Ibreve 350 def /ibreve 351 def /Iogonek 352 def +/iogonek 353 def /Jcircumflex 354 def /jcircumflex 355 def /Kcedilla 356 def +/kcedilla 357 def /kgreenlandic 358 def /Lcedilla 359 def /lcedilla 360 def +/Ncedilla 361 def /ncedilla 362 def /Eng 363 def /eng 364 def +/Omacron 365 def /omacron 366 def /Obreve 367 def /obreve 368 def +/Rcedilla 369 def /rcedilla 370 def /Scircumflex 371 def /scircumflex 372 def +/Tbar 373 def /tbar 374 def /Utilde 375 def /utilde 376 def +/Umacron 377 def /umacron 378 def /Ubreve 379 def /ubreve 380 def +/Uogonek 381 def /uogonek 382 def /Wcircumflex 383 def /wcircumflex 384 def +/Ycircumflex 385 def /ycircumflex 386 def /longs 387 def /Aringacute 388 def +/aringacute 389 def /AEacute 390 def /aeacute 391 def /Oslashacute 392 def +/oslashacute 393 def /anoteleia 394 def /Wgrave 395 def /wgrave 396 def +/Wacute 397 def /wacute 398 def /Wdieresis 399 def /wdieresis 400 def +/Ygrave 401 def /ygrave 402 def /quotereversed 403 def /radicalex 404 def +/afii08941 405 def /estimated 406 def /oneeighth 407 def /threeeighths 408 def +/fiveeighths 409 def /seveneighths 410 def /commaaccent 411 def /undercommaaccent 412 def +/tonos 413 def /dieresistonos 414 def /Alphatonos 415 def /Epsilontonos 416 def +/Etatonos 417 def /Iotatonos 418 def /Omicrontonos 419 def /Upsilontonos 420 def +/Omegatonos 421 def /iotadieresistonos 422 def /Alpha 423 def /Beta 424 def +/Delta 425 def /Epsilon 426 def /Zeta 427 def /Eta 428 def +/Iota 429 def /Kappa 430 def /Lambda 431 def /Mu 432 def +/Nu 433 def /Xi 434 def /Omicron 435 def /Pi 436 def +/Rho 437 def /Sigma 438 def /Tau 439 def /Upsilon 440 def +/Chi 441 def /Psi 442 def /Omega 443 def /Iotadieresis 444 def +/Upsilondieresis 445 def /alphatonos 446 def /epsilontonos 447 def /etatonos 448 def +/iotatonos 449 def /upsilondieresistonos 450 def /beta 451 def /gamma 452 def +/zeta 453 def /eta 454 def /theta 455 def /iota 456 def +/kappa 457 def /lambda 458 def /mu 459 def /nu 460 def +/xi 461 def /omicron 462 def /rho 463 def /sigma1 464 def +/upsilon 465 def /chi 466 def /psi 467 def /omega 468 def +/iotadieresis 469 def /upsilondieresis 470 def /omicrontonos 471 def /upsilontonos 472 def +/omegatonos 473 def /afii10023 474 def /afii10051 475 def /afii10052 476 def +/afii10053 477 def /afii10054 478 def /afii10055 479 def /afii10056 480 def +/afii10057 481 def /afii10058 482 def /afii10059 483 def /afii10060 484 def +/afii10061 485 def /afii10062 486 def /afii10145 487 def /afii10017 488 def +/afii10018 489 def /afii10019 490 def /afii10020 491 def /afii10021 492 def +/afii10022 493 def /afii10024 494 def /afii10025 495 def /afii10026 496 def +/afii10027 497 def /afii10028 498 def /afii10029 499 def /afii10030 500 def +/afii10031 501 def /afii10032 502 def /afii10033 503 def /afii10034 504 def +/afii10035 505 def /afii10036 506 def /afii10037 507 def /afii10038 508 def +/afii10039 509 def /afii10040 510 def /afii10041 511 def /afii10042 512 def +/afii10043 513 def /afii10044 514 def /afii10045 515 def /afii10046 516 def +/afii10047 517 def /afii10048 518 def /afii10049 519 def /afii10065 520 def +/afii10066 521 def /afii10067 522 def /afii10068 523 def /afii10069 524 def +/afii10070 525 def /afii10072 526 def /afii10073 527 def /afii10074 528 def +/afii10075 529 def /afii10076 530 def /afii10077 531 def /afii10078 532 def +/afii10079 533 def /afii10080 534 def /afii10081 535 def /afii10082 536 def +/afii10083 537 def /afii10084 538 def /afii10085 539 def /afii10086 540 def +/afii10087 541 def /afii10088 542 def /afii10089 543 def /afii10090 544 def +/afii10091 545 def /afii10092 546 def /afii10093 547 def /afii10094 548 def +/afii10095 549 def /afii10096 550 def /afii10097 551 def /afii10071 552 def +/afii10099 553 def /afii10100 554 def /afii10101 555 def /afii10102 556 def +/afii10103 557 def /afii10104 558 def /afii10105 559 def /afii10106 560 def +/afii10107 561 def /afii10108 562 def /afii10109 563 def /afii10110 564 def +/afii10193 565 def /afii10050 566 def /afii10098 567 def /afii00208 568 def +/afii61352 569 def /pi 570 def /onenumerator 571 def /twonumerator 572 def +/threenumerator 573 def /fournumerator 574 def /fivenumerator 575 def /sevennumerator 576 def +/eightnumerator 577 def /DontCompressHTMX 578 def /glyph579 579 def /glyph580 580 def +/glyph581 581 def /Ohorn 582 def /ohorn 583 def /Uhorn 584 def +/uhorn 585 def /hookabovecomb 586 def /dotbelowcomb 587 def /gravecomb 588 def +/acutecomb 589 def /glyph590 590 def /glyph591 591 def /glyph592 592 def +/glyph593 593 def /glyph594 594 def /glyph595 595 def /glyph596 596 def +/glyph597 597 def /glyph598 598 def /glyph599 599 def /glyph600 600 def +/glyph601 601 def /glyph602 602 def /glyph603 603 def /glyph604 604 def +/Adotbelow 605 def /adotbelow 606 def /Ahookabove 607 def /ahookabove 608 def +/Acircumflexacute 609 def /acircumflexacute 610 def /Acircumflexgrave 611 def /acircumflexgrave 612 def +/Acircumflexhookabove 613 def /acircumflexhookabove 614 def /Acircumflextilde 615 def /acircumflextilde 616 def +/Acircumflexdotbelow 617 def /acircumflexdotbelow 618 def /Abreveacute 619 def /abreveacute 620 def +/Abrevegrave 621 def /abrevegrave 622 def /Abrevehookabove 623 def /abrevehookabove 624 def +/Abrevetilde 625 def /abrevetilde 626 def /Abrevedotbelow 627 def /abrevedotbelow 628 def +/Edotbelow 629 def /edotbelow 630 def /Ehookabove 631 def /ehookabove 632 def +/Etilde 633 def /etilde 634 def /Ecircumflexacute 635 def /ecircumflexacute 636 def +/Ecircumflexgrave 637 def /ecircumflexgrave 638 def /Ecircumflexhookabove 639 def /ecircumflexhookabove 640 def +/Ecircumflextilde 641 def /ecircumflextilde 642 def /Ecircumflexdotbelow 643 def /ecircumflexdotbelow 644 def +/Ihookabove 645 def /ihookabove 646 def /Idotbelow 647 def /idotbelow 648 def +/glyph649 649 def /glyph650 650 def /glyph651 651 def /glyph652 652 def +/sheva 653 def /hatafsegol 654 def /hatafpatah 655 def /hatafqamats 656 def +/hiriq 657 def /tsere 658 def /segol 659 def /patah 660 def +/qamats 661 def /holam 662 def /qubuts 663 def /dagesh 664 def +/meteg 665 def /maqaf 666 def /rafe 667 def /paseq 668 def +/shindot 669 def /sindot 670 def /sofpasuq 671 def /alef 672 def +/bet 673 def /gimel 674 def /dalet 675 def /he 676 def +/vav 677 def /zayin 678 def /het 679 def /tet 680 def +/yod 681 def /finalkaf 682 def /kaf 683 def /lamed 684 def +/finalmem 685 def /mem 686 def /finalnun 687 def /nun 688 def +/samekh 689 def /ayin 690 def /finalpe 691 def /pe 692 def +/finaltsadi 693 def /tsadi 694 def /qof 695 def /resh 696 def +/shin 697 def /tav 698 def /doublevav 699 def /vavyod 700 def +/doubleyod 701 def /geresh 702 def /gershayim 703 def /newsheqelsign 704 def +/vavshindot 705 def /finalkafsheva 706 def /finalkafqamats 707 def /lamedholam 708 def +/lamedholamdagesh 709 def /altayin 710 def /shinshindot 711 def /shinsindot 712 def +/shindageshshindot 713 def /shindageshsindot 714 def /alefpatah 715 def /alefqamats 716 def +/alefmapiq 717 def /betdagesh 718 def /gimeldagesh 719 def /daletdagesh 720 def +/hedagesh 721 def /vavdagesh 722 def /zayindagesh 723 def /tetdagesh 724 def +/yoddagesh 725 def /finalkafdagesh 726 def /kafdagesh 727 def /lameddagesh 728 def +/memdagesh 729 def /nundagesh 730 def /samekhdagesh 731 def /finalpedagesh 732 def +/pedagesh 733 def /tsadidagesh 734 def /qofdagesh 735 def /reshdagesh 736 def +/shindagesh 737 def /tavdages 738 def /vavholam 739 def /betrafe 740 def +/kafrafe 741 def /perafe 742 def /aleflamed 743 def /zerowidthnonjoiner 744 def +/zerowidthjoiner 745 def /lefttorightmark 746 def /righttoleftmark 747 def /afii57388 748 def +/afii57403 749 def /afii57407 750 def /afii57409 751 def /afii57440 752 def +/afii57451 753 def /afii57452 754 def /afii57453 755 def /afii57454 756 def +/afii57455 757 def /afii57456 758 def /afii57457 759 def /afii57458 760 def +/afii57392 761 def /afii57393 762 def /afii57394 763 def /afii57395 764 def +/afii57396 765 def /afii57397 766 def /afii57398 767 def /afii57399 768 def +/afii57400 769 def /afii57401 770 def /afii57381 771 def /afii57461 772 def +/afii63167 773 def /afii57459 774 def /afii57543 775 def /afii57534 776 def +/afii57494 777 def /afii62843 778 def /afii62844 779 def /afii62845 780 def +/afii64240 781 def /afii64241 782 def /afii63954 783 def /afii57382 784 def +/afii64242 785 def /afii62881 786 def /afii57504 787 def /afii57369 788 def +/afii57370 789 def /afii57371 790 def /afii57372 791 def /afii57373 792 def +/afii57374 793 def /afii57375 794 def /afii57391 795 def /afii57471 796 def +/afii57460 797 def /afii52258 798 def /afii57506 799 def /afii62958 800 def +/afii62956 801 def /afii52957 802 def /afii57505 803 def /afii62889 804 def +/afii62887 805 def /afii62888 806 def /afii57507 807 def /afii62961 808 def +/afii62959 809 def /afii62960 810 def /afii57508 811 def /afii62962 812 def +/afii57567 813 def /afii62964 814 def /afii52305 815 def /afii52306 816 def +/afii57509 817 def /afii62967 818 def /afii62965 819 def /afii62966 820 def +/afii57555 821 def /afii52364 822 def /afii63753 823 def /afii63754 824 def +/afii63759 825 def /afii63763 826 def /afii63795 827 def /afii62891 828 def +/afii63808 829 def /afii62938 830 def /afii63810 831 def /afii62942 832 def +/afii62947 833 def /afii63813 834 def /afii63823 835 def /afii63824 836 def +/afii63833 837 def /afii63844 838 def /afii62882 839 def /afii62883 840 def +/afii62884 841 def /afii62885 842 def /afii62886 843 def /Odotbelow 844 def +/odotbelow 845 def /Ohookabove 846 def /ohookabove 847 def /Ocircumflexacute 848 def +/ocircumflexacute 849 def /Ocircumflexgrave 850 def /ocircumflexgrave 851 def /Ocircumflexhookabove 852 def +/ocircumflexhookabove 853 def /Ocircumflextilde 854 def /ocircumflextilde 855 def /Ocircumflexdotbelow 856 def +/ocircumflexdotbelow 857 def /Ohornacute 858 def /ohornacute 859 def /Ohorngrave 860 def +/ohorngrave 861 def /Ohornhookabove 862 def /ohornhookabove 863 def /Ohorntilde 864 def +/ohorntilde 865 def /Ohorndotbelow 866 def /ohorndotbelow 867 def /Udotbelow 868 def +/udotbelow 869 def /Uhookabove 870 def /uhookabove 871 def /Uhornacute 872 def +/uhornacute 873 def /Uhorngrave 874 def /uhorngrave 875 def /Uhornhookabove 876 def +/uhornhookabove 877 def /Uhorntilde 878 def /uhorntilde 879 def /Uhorndotbelow 880 def +/uhorndotbelow 881 def /glyph882 882 def /glyph883 883 def /Ydotbelow 884 def +/ydotbelow 885 def /Yhookabove 886 def /yhookabove 887 def /Ytilde 888 def +/ytilde 889 def /dong 890 def /tildecomb 891 def /currency 892 def + +end readonly def +FontName currentdict end definefont pop +%%EndFont +%%EndProlog +mpldict begin +13.5 175.5 translate +585 441 0 0 clipbox +% polygon +1.000 setgray +1.000 setlinewidth +0 setlinejoin +2 setlinecap +[] 0 setdash +0 0 m +0 441 l +585 441 l +585 0 l +closepath +gsave +fill +grestore +stroke +% polygon +0.000 setgray +73.125 44.1 m +73.125 396.9 l +526.5 396.9 l +526.5 44.1 l +closepath +gsave +1.000 setgray +fill +grestore +stroke +% draw_lines +gsave +453.375 352.800 73.125 44.100 clipbox +73.125 341.084 m +76.667 340.708 l +80.209 339.574 l +83.751 337.667 l +87.293 334.958 l +90.835 331.405 l +94.377 326.949 l +97.919 321.506 l +101.461 314.959 l +105.003 307.144 l +108.545 297.819 l +112.087 286.607 l +115.629 272.882 l +119.171 255.463 l +122.713 231.623 l +126.255 191.605 l +129.797 103.027 l +133.339 189.379 l +136.881 202.932 l +140.423 203.284 l +143.965 191.777 l +147.507 147.593 l +151.049 193.483 l +154.591 200.946 l +158.133 199.387 l +161.675 188.957 l +165.217 143.486 l +168.759 180.998 l +172.301 191.170 l +175.843 191.200 l +179.385 183.119 l +182.927 155.818 l +186.469 166.661 l +190.011 181.010 l +193.553 182.971 l +197.095 177.076 l +200.637 157.567 l +204.179 150.322 l +207.721 171.053 l +211.263 175.126 l +214.805 171.229 l +218.347 156.530 l +221.889 128.062 l +225.431 161.185 l +228.973 167.631 l +232.515 165.609 l +236.057 154.358 l +239.599 74.463 l +243.141 151.102 l +246.683 160.365 l +250.225 160.169 l +253.767 151.622 l +257.309 119.107 l +260.851 140.326 l +264.393 153.187 l +267.935 154.839 l +271.477 148.556 l +275.019 126.619 l +278.561 127.980 l +282.103 145.946 l +285.645 149.548 l +289.187 145.259 l +292.729 129.081 l +296.271 111.844 l +299.812 138.465 l +303.354 144.220 l +306.896 141.769 l +310.438 129.466 l +313.980 80.114 l +317.522 130.512 l +321.064 138.774 l +324.606 138.087 l +328.148 128.702 l +331.690 86.924 l +335.232 121.741 l +338.774 133.118 l +342.316 134.191 l +345.858 127.176 l +349.400 101.638 l +352.942 111.541 l +356.484 127.140 l +360.026 130.041 l +363.568 125.064 l +367.110 106.776 l +370.652 98.551 l +374.194 120.692 l +377.736 125.577 l +381.278 122.435 l +384.820 108.642 l +388.362 78.089 l +391.904 113.570 l +395.446 120.713 l +398.988 119.291 l +402.530 108.713 l +406.072 43.008 l +409.614 105.462 l +413.156 115.325 l +416.698 115.577 l +420.240 107.501 l +423.782 76.568 l +427.324 95.836 l +430.866 109.233 l +434.408 111.171 l +437.950 105.155 l +441.492 83.904 l +445.034 83.647 l +448.576 102.154 l +452.118 105.845 l +455.660 101.582 l +459.202 85.611 l +462.744 66.167 l +466.286 93.605 l +469.828 99.169 l +473.370 96.397 l +476.912 83.814 l +480.454 27.509 l +483.996 82.648 l +487.538 90.217 l +491.080 88.573 l +494.622 78.102 l +498.164 37.173 l +501.706 66.931 l +505.248 76.324 l +508.790 74.675 l +512.332 64.142 l +515.874 34.431 l +519.416 35.180 l +522.958 37.945 l +stroke +grestore +% draw_lines +0 setlinecap +[6 6] 0 setdash +gsave +453.375 352.800 73.125 44.100 clipbox +73.125 344.638 m +76.667 344.021 l +80.209 342.148 l +83.751 338.946 l +87.293 334.276 l +90.835 327.903 l +94.377 319.427 l +97.919 308.120 l +101.461 292.475 l +105.003 268.454 l +108.545 213.072 l +112.087 218.519 l +115.629 259.152 l +119.171 273.925 l +122.713 280.520 l +126.255 282.309 l +129.797 280.332 l +133.339 274.683 l +136.881 264.621 l +140.423 247.681 l +143.965 212.929 l +147.507 184.774 l +151.049 218.234 l +154.591 243.484 l +158.133 254.844 l +161.675 259.959 l +165.217 260.773 l +168.759 257.793 l +172.301 250.665 l +175.843 237.757 l +179.385 212.685 l +182.927 178.994 l +186.469 -424.877 l +190.011 217.746 l +193.553 235.408 l +197.095 243.801 l +200.637 247.028 l +204.179 246.206 l +207.721 241.360 l +211.263 231.429 l +214.805 212.332 l +218.347 138.495 l +221.889 185.787 l +225.431 183.612 l +228.973 217.038 l +232.515 229.873 l +236.057 235.734 l +239.599 237.005 l +243.141 234.198 l +246.683 226.722 l +250.225 211.859 l +253.767 169.476 l +257.309 186.593 l +260.851 173.823 l +264.393 194.732 l +267.935 216.079 l +271.477 225.369 l +275.019 228.930 l +278.561 228.116 l +282.103 222.822 l +285.645 211.246 l +289.187 183.443 l +292.729 181.050 l +296.271 187.513 l +299.812 178.164 l +303.354 199.915 l +306.896 214.825 l +310.438 221.217 l +313.980 222.524 l +317.522 219.301 l +321.064 210.468 l +324.606 190.157 l +328.148 169.944 l +331.690 189.675 l +335.232 181.582 l +338.774 172.547 l +342.316 202.663 l +345.858 213.205 l +349.400 216.995 l +352.942 215.878 l +356.484 209.487 l +360.026 194.151 l +363.568 141.332 l +367.110 188.290 l +370.652 190.018 l +374.194 168.185 l +377.736 185.194 l +381.278 203.994 l +384.820 211.108 l +388.362 212.316 l +391.904 208.247 l +395.446 196.681 l +398.988 154.875 l +402.530 184.658 l +406.072 192.833 l +409.614 186.663 l +413.156 -460.889 l +416.698 191.640 l +420.240 204.277 l +423.782 208.351 l +427.324 206.663 l +430.866 198.243 l +434.408 172.764 l +437.950 178.651 l +441.492 193.308 l +445.034 193.407 l +448.576 179.767 l +452.118 167.615 l +455.660 195.351 l +459.202 203.595 l +462.744 204.597 l +466.286 199.048 l +469.828 181.359 l +473.370 168.699 l +476.912 192.336 l +480.454 196.765 l +483.996 191.640 l +487.538 166.317 l +491.080 180.819 l +494.622 197.324 l +498.164 201.811 l +501.706 199.150 l +505.248 186.669 l +508.790 146.473 l +512.332 190.158 l +515.874 198.473 l +519.416 197.844 l +522.958 187.711 l +stroke +grestore +% draw_lines +[3 5 1 5] 0 setdash +gsave +453.375 352.800 73.125 44.100 clipbox +73.125 344.646 m +76.667 344.163 l +80.209 342.697 l +83.751 340.206 l +87.293 336.608 l +90.835 331.765 l +94.377 325.450 l +97.919 317.263 l +101.461 306.406 l +105.003 290.855 l +108.545 260.984 l +112.087 257.910 l +115.629 270.113 l +119.171 268.975 l +122.713 260.468 l +126.255 240.233 l +129.797 221.580 l +133.339 244.142 l +136.881 246.939 l +140.423 241.790 l +143.965 226.836 l +147.507 180.268 l +151.049 224.403 l +154.591 230.521 l +158.133 227.898 l +161.675 216.607 l +165.217 170.426 l +168.759 207.344 l +172.301 217.011 l +175.843 216.608 l +179.385 208.152 l +182.927 180.524 l +186.469 191.080 l +190.011 205.174 l +193.553 206.908 l +197.095 200.811 l +200.637 181.119 l +204.179 173.710 l +207.721 194.292 l +211.263 198.229 l +214.805 194.208 l +218.347 179.396 l +221.889 150.824 l +225.431 183.851 l +228.973 190.209 l +232.515 188.106 l +236.057 176.779 l +239.599 96.814 l +243.141 173.388 l +246.683 182.589 l +250.225 182.337 l +253.767 173.737 l +257.309 141.172 l +260.851 162.345 l +264.393 175.162 l +267.935 176.773 l +271.477 170.451 l +275.019 148.477 l +278.561 149.804 l +282.103 167.738 l +285.645 171.309 l +289.187 166.991 l +292.729 150.785 l +296.271 133.522 l +299.812 160.118 l +303.354 165.850 l +306.896 163.377 l +310.438 151.052 l +313.980 101.679 l +317.522 152.059 l +321.064 160.303 l +324.606 159.598 l +328.148 150.196 l +331.690 108.402 l +335.232 143.204 l +338.774 154.567 l +342.316 155.626 l +345.858 148.598 l +349.400 123.046 l +352.942 132.938 l +356.484 148.525 l +360.026 151.416 l +363.568 146.427 l +367.110 128.129 l +370.652 119.895 l +374.194 142.026 l +377.736 146.903 l +381.278 143.752 l +384.820 129.951 l +388.362 99.390 l +391.904 134.864 l +395.446 141.999 l +398.988 140.570 l +402.530 129.986 l +406.072 64.275 l +409.614 126.723 l +413.156 136.580 l +416.698 136.826 l +420.240 128.745 l +423.782 97.807 l +427.324 117.071 l +430.866 130.463 l +434.408 132.397 l +437.950 126.376 l +441.492 105.122 l +445.034 104.861 l +448.576 123.364 l +452.118 127.052 l +455.660 122.786 l +459.202 106.813 l +462.744 87.365 l +466.286 114.801 l +469.828 120.363 l +473.370 117.588 l +476.912 105.003 l +480.454 48.696 l +483.996 103.833 l +487.538 111.400 l +491.080 109.755 l +494.622 99.282 l +498.164 58.352 l +501.706 88.110 l +505.248 97.502 l +508.790 95.852 l +512.332 85.318 l +515.874 55.606 l +519.416 56.356 l +522.958 59.120 l +stroke +grestore +% draw_lines +[1 3] 0 setdash +gsave +453.375 352.800 73.125 44.100 clipbox +73.125 346.280 m +76.667 345.676 l +80.209 343.845 l +83.751 340.736 l +87.293 336.248 l +90.835 330.224 l +94.377 322.407 l +97.919 312.371 l +101.461 299.341 l +105.003 281.601 l +108.545 253.253 l +112.087 220.282 l +115.629 233.441 l +119.171 220.121 l +122.713 198.594 l +126.255 213.622 l +129.797 232.741 l +133.339 242.085 l +136.881 243.804 l +140.423 237.025 l +143.965 203.960 l +147.507 230.388 l +151.049 244.073 l +154.591 246.690 l +158.133 241.191 l +161.675 219.125 l +165.217 223.903 l +168.759 241.739 l +172.301 245.662 l +175.843 241.477 l +179.385 224.009 l +182.927 215.555 l +186.469 238.476 l +190.011 243.766 l +193.553 240.795 l +197.095 226.371 l +200.637 204.635 l +204.179 234.918 l +207.721 241.638 l +211.263 239.805 l +214.805 227.701 l +218.347 187.148 l +221.889 231.207 l +225.431 239.460 l +228.973 238.716 l +232.515 228.509 l +236.057 142.756 l +239.599 227.342 l +243.141 237.284 l +246.683 237.602 l +250.225 229.015 l +253.767 188.027 l +257.309 223.261 l +260.851 235.117 l +264.393 236.489 l +267.935 229.330 l +271.477 199.520 l +275.019 218.852 l +278.561 232.949 l +282.103 235.386 l +285.645 229.515 l +289.187 205.946 l +292.729 213.941 l +296.271 230.761 l +299.812 234.290 l +303.354 229.607 l +306.896 210.254 l +310.438 208.235 l +313.980 228.529 l +317.522 233.195 l +321.064 229.626 l +324.606 213.410 l +328.148 201.185 l +331.690 226.226 l +335.232 232.097 l +338.774 229.588 l +342.316 215.852 l +345.858 191.524 l +349.400 223.818 l +352.942 230.985 l +356.484 229.500 l +360.026 217.812 l +363.568 174.865 l +367.110 221.263 l +370.652 229.851 l +374.194 229.371 l +377.736 219.429 l +381.278 138.835 l +384.820 218.509 l +388.362 228.686 l +391.904 229.202 l +395.446 220.789 l +398.988 179.721 l +402.530 215.482 l +406.072 227.478 l +409.614 228.996 l +413.156 221.953 l +416.698 191.902 l +420.240 212.081 l +423.782 226.215 l +427.324 228.754 l +430.866 222.960 l +434.408 199.153 l +437.950 208.147 l +441.492 224.884 l +445.034 228.476 l +448.576 223.841 l +452.118 204.278 l +455.660 203.420 l +459.202 223.466 l +462.744 228.160 l +466.286 224.618 l +469.828 208.221 l +473.370 197.415 l +476.912 221.941 l +480.454 227.805 l +483.996 225.308 l +487.538 211.417 l +491.080 189.040 l +494.622 220.282 l +498.164 227.408 l +501.706 225.922 l +505.248 214.102 l +508.790 174.825 l +512.332 218.457 l +515.874 226.966 l +519.416 226.472 l +522.958 216.418 l +stroke +grestore +% text +/Verdana findfont +18.000 scalefont +setfont +119.312 403.956 m +0 4 rmoveto +(Smoothing window in frequency-domain) show +% text +/Verdana findfont +14.000 scalefont +setfont +62.469 30.1 m +(0.0) show +% line +0.500 setlinewidth +[] 0 setdash +163.800 44.100 m 163.800 48.100 l +stroke +% line +163.800 392.900 m 163.800 396.900 l +stroke +% text +153.175 30.1 m +(0.1) show +% line +254.475 44.100 m 254.475 48.100 l +stroke +% line +254.475 392.900 m 254.475 396.900 l +stroke +% text +243.85 30.1 m +(0.2) show +% line +345.150 44.100 m 345.150 48.100 l +stroke +% line +345.150 392.900 m 345.150 396.900 l +stroke +% text +334.994 30.1 m +(0.3) show +% line +435.825 44.100 m 435.825 48.100 l +stroke +% line +435.825 392.900 m 435.825 396.900 l +stroke +% text +424.825 30.1 m +(0.4) show +% text +515.844 30.1 m +(0.5) show +% text +221.875 11.1 m +0 3 rmoveto +(Normalized Frequency) show +% text +37.062 39.1 m +(-100) show +% line +73.125 91.140 m 77.125 91.140 l +stroke +% line +522.500 91.140 m 526.500 91.140 l +stroke +% text +47.062 86.14 m +(-80) show +% line +73.125 138.180 m 77.125 138.180 l +stroke +% line +522.500 138.180 m 526.500 138.180 l +stroke +% text +47.062 133.18 m +(-60) show +% line +73.125 185.220 m 77.125 185.220 l +stroke +% line +522.500 185.220 m 526.500 185.220 l +stroke +% text +47.062 180.22 m +(-40) show +% line +73.125 232.260 m 77.125 232.260 l +stroke +% line +522.500 232.260 m 526.500 232.260 l +stroke +% text +47.062 227.26 m +(-20) show +% line +73.125 279.300 m 77.125 279.300 l +stroke +% line +522.500 279.300 m 526.500 279.300 l +stroke +% text +61.812 274.3 m +(0) show +% line +73.125 326.340 m 77.125 326.340 l +stroke +% line +522.500 326.340 m 526.500 326.340 l +stroke +% text +53.062 321.34 m +(20) show +% line +73.125 373.380 m 77.125 373.380 l +stroke +% line +522.500 373.380 m 526.500 373.380 l +stroke +% text +52.938 368.38 m +(40) show +% text +32.062 168.461 m +gsave +90 rotate +0 3 rmoveto +(Magnitude \(dB\)) show +grestore +% polygon +1.000 setlinewidth +2 setlinecap +346.389 279.264 m +346.389 389.844 l +517.433 389.844 l +517.433 279.264 l +closepath +gsave +1.000 setgray +fill +grestore +stroke +% draw_lines +362.443 371.629 m +369.999 371.629 l +377.555 371.629 l +385.111 371.629 l +stroke +% draw_lines +0 setlinecap +[6 6] 0 setdash +362.443 349.712 m +369.999 349.712 l +377.555 349.712 l +385.111 349.712 l +stroke +% draw_lines +[3 5 1 5] 0 setdash +362.443 325.795 m +369.999 325.795 l +377.555 325.795 l +385.111 325.795 l +stroke +% draw_lines +[1 3] 0 setdash +362.443 299.479 m +369.999 299.479 l +377.555 299.479 l +385.111 299.479 l +stroke +% text +/Verdana findfont +24.000 scalefont +setfont +394.179 362.629 m +(Blackman) show +% text +394.179 340.712 m +(Bartlett) show +% text +394.179 314.795 m +0 5 rmoveto +(Hanning) show +% text +394.179 288.479 m +0 5 rmoveto +(Hamming) show + +end +showpage diff --git a/numpy/doc/numpybook/Figures/hierarchy.dia b/numpy/doc/numpybook/Figures/hierarchy.dia Binary files differnew file mode 100644 index 000000000..65379b880 --- /dev/null +++ b/numpy/doc/numpybook/Figures/hierarchy.dia diff --git a/numpy/doc/numpybook/Figures/hierarchy.eps b/numpy/doc/numpybook/Figures/hierarchy.eps new file mode 100644 index 000000000..f7538c764 --- /dev/null +++ b/numpy/doc/numpybook/Figures/hierarchy.eps @@ -0,0 +1,5596 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: hierarchy.dia +%%Creator: Dia v0.94 +%%CreationDate: Wed Jan 4 16:44:07 2006 +%%For: oliphant +%%Orientation: Portrait +%%Magnification: 1.0000 +%%BoundingBox: 0 0 743 584 +%%BeginSetup +%%EndSetup +%%EndComments +%%BeginProlog +[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright +/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one +/two /three /four /five /six /seven /eight /nine /colon /semicolon +/less /equal /greater /question /at /A /B /C /D /E +/F /G /H /I /J /K /L /M /N /O +/P /Q /R /S /T /U /V /W /X /Y +/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c +/d /e /f /g /h /i /j /k /l /m +/n /o /p /q /r /s /t /u /v /w +/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright +/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior +/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf +/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla +/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde +/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex +/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring +/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis +/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave +/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def +/cp {closepath} bind def +/c {curveto} bind def +/f {fill} bind def +/a {arc} bind def +/ef {eofill} bind def +/ex {exch} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth pop} bind def +/tr {translate} bind def + +/ellipsedict 8 dict def +ellipsedict /mtrx matrix put +/ellipse +{ ellipsedict begin + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def /savematrix mtrx currentmatrix def + x y tr xrad yrad sc + 0 0 1 startangle endangle arc + savematrix setmatrix + end +} def + +/mergeprocs { +dup length +3 -1 roll +dup +length +dup +5 1 roll +3 -1 roll +add +array cvx +dup +3 -1 roll +0 exch +putinterval +dup +4 2 roll +putinterval +} bind def +/dpi_x 300 def +/dpi_y 300 def +/conicto { + /to_y exch def + /to_x exch def + /conic_cntrl_y exch def + /conic_cntrl_x exch def + currentpoint + /p0_y exch def + /p0_x exch def + /p1_x p0_x conic_cntrl_x p0_x sub 2 3 div mul add def + /p1_y p0_y conic_cntrl_y p0_y sub 2 3 div mul add def + /p2_x p1_x to_x p0_x sub 1 3 div mul add def + /p2_y p1_y to_y p0_y sub 1 3 div mul add def + p1_x p1_y p2_x p2_y to_x to_y curveto +} bind def +/start_ol { gsave 1.1 dpi_x div dup scale} bind def +/end_ol { closepath fill grestore } bind def +28.346000 -28.346000 scale +-1.702375 -22.793875 translate +%%EndProlog + + +0.095250 slw +[1.000000] 0 sd +[0.127000] 0 sd +0 slj +0.000000 0.000000 0.000000 srgb +n 11.500000 2.250000 m 11.500000 3.750000 l 14.357500 3.750000 l 14.357500 2.250000 l cp s +gsave 12.000000 3.250000 translate 0.035278 -0.035278 scale +start_ol +204 -201 moveto +583 -259 lineto +607 -441 714 -525 conicto +859 -637 1109 -637 conicto +1379 -637 1526 -526 conicto +1673 -415 1724 -215 conicto +1755 -93 1755 298 conicto +1500 -3 1120 -3 conicto +646 -3 387 342 conicto +128 687 128 1169 conicto +128 1501 247 1781 conicto +366 2062 591 2215 conicto +817 2368 1122 2368 conicto +1528 2368 1792 2038 conicto +1792 2304 lineto +2176 2304 lineto +2176 297 lineto +2176 -245 2066 -471 conicto +1956 -697 1717 -828 conicto +1479 -960 1130 -960 conicto +714 -960 459 -771 conicto +204 -582 204 -201 conicto +527 1198 moveto +527 740 707 530 conicto +887 320 1158 320 conicto +1427 320 1609 529 conicto +1792 738 1792 1185 conicto +1792 1611 1604 1828 conicto +1417 2045 1151 2045 conicto +891 2045 709 1831 conicto +527 1618 527 1198 conicto +end_ol grestore +gsave 12.330200 3.250000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 12.660400 3.250000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 12.990600 3.250000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 13.320800 3.250000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 2304 lineto +576 2304 lineto +576 1986 lineto +709 2209 822 2288 conicto +936 2368 1072 2368 conicto +1268 2368 1471 2237 conicto +1337 1898 lineto +1195 1984 1053 1984 conicto +925 1984 823 1905 conicto +722 1827 679 1689 conicto +614 1477 614 1226 conicto +614 0 lineto +256 0 lineto +end_ol grestore +gsave 13.507067 3.250000 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +320 0 moveto +320 2304 lineto +719 2304 lineto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 13.642533 3.250000 translate 0.035278 -0.035278 scale +start_ol +1806 840 moveto +2188 790 lineto +2125 389 1867 162 conicto +1610 -64 1234 -64 conicto +764 -64 478 248 conicto +192 560 192 1143 conicto +192 1520 315 1802 conicto +438 2085 689 2226 conicto +941 2368 1236 2368 conicto +1610 2368 1847 2176 conicto +2084 1985 2151 1633 conicto +1774 1573 lineto +1720 1808 1583 1926 conicto +1446 2045 1251 2045 conicto +958 2045 774 1831 conicto +591 1617 591 1155 conicto +591 685 768 472 conicto +945 259 1230 259 conicto +1458 259 1611 401 conicto +1765 544 1806 840 conicto +end_ol grestore +0.095250 slw +[0.127000] 0 sd +[0.127000] 0 sd +0 slj +n 12.500000 6.000000 m 12.500000 7.500000 l 15.357500 7.500000 l 15.357500 6.000000 l cp s +gsave 13.000000 7.000000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 13.330200 7.000000 translate 0.035278 -0.035278 scale +start_ol +1792 0 moveto +1792 314 lineto +1521 -64 1053 -64 conicto +847 -64 668 11 conicto +489 87 402 201 conicto +316 316 280 490 conicto +256 606 256 859 conicto +256 2304 lineto +655 2304 lineto +655 1010 lineto +655 701 679 593 conicto +717 437 837 348 conicto +957 259 1135 259 conicto +1312 259 1467 350 conicto +1622 441 1686 598 conicto +1751 755 1751 1054 conicto +1751 2304 lineto +2112 2304 lineto +2112 0 lineto +1792 0 lineto +end_ol grestore +gsave 13.651933 7.000000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2008 lineto +749 2165 930 2266 conicto +1112 2368 1344 2368 conicto +1602 2368 1767 2263 conicto +1932 2159 2001 1979 conicto +2280 2368 2728 2368 conicto +3079 2368 3267 2177 conicto +3456 1986 3456 1589 conicto +3456 0 lineto +3057 0 lineto +3057 1471 lineto +3057 1709 3018 1813 conicto +2979 1918 2877 1981 conicto +2775 2045 2638 2045 conicto +2390 2045 2226 1881 conicto +2063 1717 2063 1357 conicto +2063 0 lineto +1664 0 lineto +1664 1517 lineto +1664 1781 1568 1913 conicto +1472 2045 1254 2045 conicto +1088 2045 947 1957 conicto +807 1869 744 1699 conicto +681 1530 681 1212 conicto +681 0 lineto +320 0 lineto +end_ol grestore +gsave 14.143000 7.000000 translate 0.035278 -0.035278 scale +start_ol +719 0 moveto +320 0 lineto +320 3200 lineto +747 3200 lineto +747 2056 lineto +984 2368 1357 2368 conicto +1563 2368 1747 2281 conicto +1931 2194 2050 2038 conicto +2169 1882 2236 1660 conicto +2304 1438 2304 1186 conicto +2304 588 2019 262 conicto +1735 -64 1337 -64 conicto +942 -64 719 279 conicto +719 0 lineto +719 1170 moveto +719 751 827 564 conicto +1003 259 1304 259 conicto +1549 259 1727 484 conicto +1905 709 1905 1155 conicto +1905 1610 1734 1827 conicto +1563 2045 1320 2045 conicto +1075 2045 897 1820 conicto +719 1595 719 1170 conicto +end_ol grestore +gsave 14.473200 7.000000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 14.803400 7.000000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 2304 lineto +576 2304 lineto +576 1986 lineto +709 2209 822 2288 conicto +936 2368 1072 2368 conicto +1268 2368 1471 2237 conicto +1337 1898 lineto +1195 1984 1053 1984 conicto +925 1984 823 1905 conicto +722 1827 679 1689 conicto +614 1477 614 1226 conicto +614 0 lineto +256 0 lineto +end_ol grestore +0.095250 slw +[0.127000] 0 sd +[0.127000] 0 sd +0 slj +n 22.000000 6.000000 m 22.000000 7.500000 l 24.765000 7.500000 l 24.765000 6.000000 l cp s +0.095250 slw +[0.127000] 0 sd +[0.127000] 0 sd +0 slj +n 21.500000 9.500000 m 21.500000 11.000000 l 24.357500 11.000000 l 24.357500 9.500000 l cp s +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 25.000000 9.500000 m 25.000000 10.943875 l 27.857500 10.943875 l 27.857500 9.500000 l cp s +0.095250 slw +[1.000000] 0 sd +[0.127000] 0 sd +0 slj +n 6.000000 9.500000 m 6.000000 11.000000 l 8.750000 11.000000 l 8.750000 9.500000 l cp s +0.095250 slw +[0.127000] 0 sd +[0.127000] 0 sd +0 slj +n 12.750000 11.500000 m 12.750000 13.000000 l 15.607500 13.000000 l 15.607500 11.500000 l cp s +0.095250 slw +[0.127000] 0 sd +[0.127000] 0 sd +0 slj +n 16.700000 11.500000 m 16.700000 13.052375 l 21.227375 13.052375 l 21.227375 11.500000 l cp s +gsave 22.500000 7.000000 translate 0.035278 -0.035278 scale +start_ol +384 0 moveto +384 1984 lineto +64 1984 lineto +64 2307 lineto +384 2307 lineto +384 2552 lineto +384 2785 425 2889 conicto +481 3029 622 3116 conicto +764 3203 1018 3203 conicto +1182 3203 1380 3168 conicto +1322 2858 lineto +1201 2880 1096 2880 conicto +925 2880 854 2804 conicto +783 2728 783 2520 conicto +783 2307 lineto +1216 2307 lineto +1216 1984 lineto +783 1984 lineto +783 0 lineto +384 0 lineto +end_ol grestore +gsave 22.660867 7.000000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 3200 lineto +655 3200 lineto +655 0 lineto +256 0 lineto +end_ol grestore +gsave 22.787867 7.000000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 23.118067 7.000000 translate 0.035278 -0.035278 scale +start_ol +32 0 moveto +870 1198 lineto +95 2304 lineto +581 2304 lineto +932 1763 lineto +1032 1610 1092 1506 conicto +1187 1649 1267 1759 conicto +1653 2304 lineto +2117 2304 lineto +1325 1219 lineto +2178 0 lineto +1701 0 lineto +1230 716 lineto +1105 909 lineto +503 0 lineto +32 0 lineto +end_ol grestore +gsave 23.414400 7.000000 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +320 0 moveto +320 2304 lineto +719 2304 lineto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 23.549867 7.000000 translate 0.035278 -0.035278 scale +start_ol +719 0 moveto +320 0 lineto +320 3200 lineto +747 3200 lineto +747 2056 lineto +984 2368 1357 2368 conicto +1563 2368 1747 2281 conicto +1931 2194 2050 2038 conicto +2169 1882 2236 1660 conicto +2304 1438 2304 1186 conicto +2304 588 2019 262 conicto +1735 -64 1337 -64 conicto +942 -64 719 279 conicto +719 0 lineto +719 1170 moveto +719 751 827 564 conicto +1003 259 1304 259 conicto +1549 259 1727 484 conicto +1905 709 1905 1155 conicto +1905 1610 1734 1827 conicto +1563 2045 1320 2045 conicto +1075 2045 897 1820 conicto +719 1595 719 1170 conicto +end_ol grestore +gsave 23.880067 7.000000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 3200 lineto +655 3200 lineto +655 0 lineto +256 0 lineto +end_ol grestore +gsave 24.007067 7.000000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 6.500000 10.500000 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +320 0 moveto +320 2304 lineto +719 2304 lineto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 6.635467 10.500000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 6.965667 10.500000 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +gsave 7.126533 10.500000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 7.456733 10.500000 translate 0.035278 -0.035278 scale +start_ol +204 -201 moveto +583 -259 lineto +607 -441 714 -525 conicto +859 -637 1109 -637 conicto +1379 -637 1526 -526 conicto +1673 -415 1724 -215 conicto +1755 -93 1755 298 conicto +1500 -3 1120 -3 conicto +646 -3 387 342 conicto +128 687 128 1169 conicto +128 1501 247 1781 conicto +366 2062 591 2215 conicto +817 2368 1122 2368 conicto +1528 2368 1792 2038 conicto +1792 2304 lineto +2176 2304 lineto +2176 297 lineto +2176 -245 2066 -471 conicto +1956 -697 1717 -828 conicto +1479 -960 1130 -960 conicto +714 -960 459 -771 conicto +204 -582 204 -201 conicto +527 1198 moveto +527 740 707 530 conicto +887 320 1158 320 conicto +1427 320 1609 529 conicto +1792 738 1792 1185 conicto +1792 1611 1604 1828 conicto +1417 2045 1151 2045 conicto +891 2045 709 1831 conicto +527 1618 527 1198 conicto +end_ol grestore +gsave 7.786933 10.500000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 8.117133 10.500000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 2304 lineto +576 2304 lineto +576 1986 lineto +709 2209 822 2288 conicto +936 2368 1072 2368 conicto +1268 2368 1471 2237 conicto +1337 1898 lineto +1195 1984 1053 1984 conicto +925 1984 823 1905 conicto +722 1827 679 1689 conicto +614 1477 614 1226 conicto +614 0 lineto +256 0 lineto +end_ol grestore +gsave 13.250000 12.500000 translate 0.035278 -0.035278 scale +start_ol +423 0 moveto +423 2048 lineto +64 2048 lineto +64 2379 lineto +423 2379 lineto +423 2644 lineto +423 2894 465 3003 conicto +522 3148 668 3238 conicto +814 3328 1076 3328 conicto +1244 3328 1448 3292 conicto +1389 2974 lineto +1265 2997 1157 2997 conicto +980 2997 906 2915 conicto +832 2833 832 2608 conicto +832 2379 lineto +1280 2379 lineto +1280 2048 lineto +832 2048 lineto +832 0 lineto +423 0 lineto +end_ol grestore +gsave 13.419333 12.500000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 3264 lineto +729 3264 lineto +729 0 lineto +320 0 lineto +end_ol grestore +gsave 13.554800 12.500000 translate 0.035278 -0.035278 scale +start_ol +128 1184 moveto +128 1847 491 2166 conicto +794 2432 1230 2432 conicto +1714 2432 2021 2109 conicto +2329 1786 2329 1218 conicto +2329 757 2193 492 conicto +2057 228 1797 82 conicto +1537 -64 1230 -64 conicto +737 -64 432 258 conicto +128 580 128 1184 conicto +537 1185 moveto +537 724 734 495 conicto +931 267 1230 267 conicto +1526 267 1723 497 conicto +1920 727 1920 1198 conicto +1920 1643 1722 1872 conicto +1524 2101 1230 2101 conicto +931 2101 734 1873 conicto +537 1646 537 1185 conicto +end_ol grestore +gsave 13.885000 12.500000 translate 0.035278 -0.035278 scale +start_ol +1865 298 moveto +1640 105 1435 20 conicto +1230 -64 995 -64 conicto +608 -64 400 129 conicto +192 323 192 624 conicto +192 801 269 946 conicto +347 1091 472 1179 conicto +597 1268 754 1314 conicto +869 1345 1109 1374 conicto +1599 1432 1831 1513 conicto +1831 1596 1831 1618 conicto +1831 1864 1716 1964 conicto +1562 2101 1256 2101 conicto +971 2101 835 2001 conicto +700 1902 635 1649 conicto +258 1703 lineto +311 1955 434 2110 conicto +557 2265 788 2348 conicto +1020 2432 1325 2432 conicto +1628 2432 1817 2360 conicto +2006 2289 2095 2181 conicto +2185 2073 2220 1908 conicto +2240 1806 2240 1537 conicto +2240 1001 lineto +2240 439 2265 289 conicto +2291 139 2366 0 conicto +1946 0 lineto +1883 127 1865 298 conicto +1831 1197 moveto +1611 1108 1170 1045 conicto +920 1010 817 965 conicto +714 921 657 834 conicto +601 748 601 643 conicto +601 482 723 374 conicto +846 267 1082 267 conicto +1316 267 1498 369 conicto +1681 471 1766 648 conicto +1831 783 1831 1050 conicto +1831 1197 lineto +end_ol grestore +gsave 14.223667 12.500000 translate 0.035278 -0.035278 scale +start_ol +1152 400 moveto +1209 37 lineto +1042 0 909 0 conicto +694 0 575 70 conicto +456 141 407 257 conicto +359 373 359 735 conicto +359 2101 lineto +64 2101 lineto +64 2432 lineto +359 2432 lineto +359 3021 lineto +768 3263 lineto +768 2432 lineto +1152 2432 lineto +1152 2101 lineto +768 2101 lineto +768 713 lineto +768 541 788 491 conicto +808 442 853 413 conicto +899 384 984 384 conicto +1048 384 1152 400 conicto +end_ol grestore +gsave 14.384533 12.500000 translate 0.035278 -0.035278 scale +start_ol +320 2816 moveto +320 3264 lineto +729 3264 lineto +729 2816 lineto +320 2816 lineto +320 0 moveto +320 2368 lineto +729 2368 lineto +729 0 lineto +320 0 lineto +end_ol grestore +gsave 14.520000 12.500000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2368 lineto +704 2368 lineto +704 2058 lineto +958 2432 1443 2432 conicto +1654 2432 1831 2354 conicto +2008 2277 2095 2151 conicto +2183 2026 2218 1854 conicto +2240 1742 2240 1462 conicto +2240 0 lineto +1831 0 lineto +1831 1459 lineto +1831 1708 1785 1831 conicto +1740 1955 1624 2028 conicto +1508 2101 1353 2101 conicto +1105 2101 924 1936 conicto +744 1771 744 1310 conicto +744 0 lineto +320 0 lineto +end_ol grestore +gsave 14.858667 12.500000 translate 0.035278 -0.035278 scale +start_ol +183 -196 moveto +594 -254 lineto +618 -435 726 -517 conicto +872 -629 1124 -629 conicto +1396 -629 1543 -518 conicto +1691 -407 1743 -206 conicto +1773 -83 1773 309 conicto +1516 0 1131 0 conicto +653 0 390 354 conicto +128 708 128 1202 conicto +128 1543 248 1830 conicto +368 2118 596 2275 conicto +825 2432 1134 2432 conicto +1545 2432 1811 2094 conicto +1811 2368 lineto +2176 2368 lineto +2176 321 lineto +2176 -231 2064 -461 conicto +1953 -692 1711 -826 conicto +1470 -960 1117 -960 conicto +698 -960 440 -769 conicto +183 -579 183 -196 conicto +537 1231 moveto +537 762 718 546 conicto +900 331 1174 331 conicto +1444 331 1627 545 conicto +1811 759 1811 1218 conicto +1811 1656 1622 1878 conicto +1433 2101 1167 2101 conicto +905 2101 721 1882 conicto +537 1663 537 1231 conicto +end_ol grestore +gsave 16.950000 12.500000 translate 0.035278 -0.035278 scale +start_ol +1806 840 moveto +2188 790 lineto +2125 389 1867 162 conicto +1610 -64 1234 -64 conicto +764 -64 478 248 conicto +192 560 192 1143 conicto +192 1520 315 1802 conicto +438 2085 689 2226 conicto +941 2368 1236 2368 conicto +1610 2368 1847 2176 conicto +2084 1985 2151 1633 conicto +1774 1573 lineto +1720 1808 1583 1926 conicto +1446 2045 1251 2045 conicto +958 2045 774 1831 conicto +591 1617 591 1155 conicto +591 685 768 472 conicto +945 259 1230 259 conicto +1458 259 1611 401 conicto +1765 544 1806 840 conicto +end_ol grestore +gsave 17.246333 12.500000 translate 0.035278 -0.035278 scale +start_ol +128 1152 moveto +128 1798 479 2109 conicto +771 2368 1192 2368 conicto +1661 2368 1958 2053 conicto +2255 1739 2255 1184 conicto +2255 735 2123 477 conicto +1992 220 1740 78 conicto +1489 -64 1192 -64 conicto +715 -64 421 249 conicto +128 562 128 1152 conicto +527 1154 moveto +527 705 716 482 conicto +905 259 1192 259 conicto +1478 259 1667 483 conicto +1856 707 1856 1167 conicto +1856 1599 1666 1822 conicto +1476 2045 1192 2045 conicto +905 2045 716 1823 conicto +527 1601 527 1154 conicto +end_ol grestore +gsave 17.568067 12.500000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2008 lineto +749 2165 930 2266 conicto +1112 2368 1344 2368 conicto +1602 2368 1767 2263 conicto +1932 2159 2001 1979 conicto +2280 2368 2728 2368 conicto +3079 2368 3267 2177 conicto +3456 1986 3456 1589 conicto +3456 0 lineto +3057 0 lineto +3057 1471 lineto +3057 1709 3018 1813 conicto +2979 1918 2877 1981 conicto +2775 2045 2638 2045 conicto +2390 2045 2226 1881 conicto +2063 1717 2063 1357 conicto +2063 0 lineto +1664 0 lineto +1664 1517 lineto +1664 1781 1568 1913 conicto +1472 2045 1254 2045 conicto +1088 2045 947 1957 conicto +807 1869 744 1699 conicto +681 1530 681 1212 conicto +681 0 lineto +320 0 lineto +end_ol grestore +gsave 18.059133 12.500000 translate 0.035278 -0.035278 scale +start_ol +320 -896 moveto +320 2304 lineto +704 2304 lineto +704 1999 lineto +827 2178 981 2273 conicto +1136 2368 1355 2368 conicto +1641 2368 1860 2214 conicto +2080 2060 2192 1781 conicto +2304 1502 2304 1169 conicto +2304 812 2181 526 conicto +2058 241 1822 88 conicto +1586 -64 1327 -64 conicto +1137 -64 986 19 conicto +835 102 739 228 conicto +739 -896 lineto +320 -896 lineto +704 1132 moveto +704 686 877 472 conicto +1050 259 1297 259 conicto +1548 259 1726 480 conicto +1905 701 1905 1164 conicto +1905 1606 1731 1825 conicto +1557 2045 1314 2045 conicto +1074 2045 889 1811 conicto +704 1577 704 1132 conicto +end_ol grestore +gsave 18.389333 12.500000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 3200 lineto +655 3200 lineto +655 0 lineto +256 0 lineto +end_ol grestore +gsave 18.516333 12.500000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 18.846533 12.500000 translate 0.035278 -0.035278 scale +start_ol +32 0 moveto +870 1198 lineto +95 2304 lineto +581 2304 lineto +932 1763 lineto +1032 1610 1092 1506 conicto +1187 1649 1267 1759 conicto +1653 2304 lineto +2117 2304 lineto +1325 1219 lineto +2178 0 lineto +1701 0 lineto +1230 716 lineto +1105 909 lineto +503 0 lineto +32 0 lineto +end_ol grestore +gsave 19.142867 12.500000 translate 0.035278 -0.035278 scale +start_ol +384 0 moveto +384 1984 lineto +64 1984 lineto +64 2307 lineto +384 2307 lineto +384 2552 lineto +384 2785 425 2889 conicto +481 3029 622 3116 conicto +764 3203 1018 3203 conicto +1182 3203 1380 3168 conicto +1322 2858 lineto +1201 2880 1096 2880 conicto +925 2880 854 2804 conicto +783 2728 783 2520 conicto +783 2307 lineto +1216 2307 lineto +1216 1984 lineto +783 1984 lineto +783 0 lineto +384 0 lineto +end_ol grestore +gsave 19.303733 12.500000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 3200 lineto +655 3200 lineto +655 0 lineto +256 0 lineto +end_ol grestore +gsave 19.430733 12.500000 translate 0.035278 -0.035278 scale +start_ol +128 1152 moveto +128 1798 479 2109 conicto +771 2368 1192 2368 conicto +1661 2368 1958 2053 conicto +2255 1739 2255 1184 conicto +2255 735 2123 477 conicto +1992 220 1740 78 conicto +1489 -64 1192 -64 conicto +715 -64 421 249 conicto +128 562 128 1152 conicto +527 1154 moveto +527 705 716 482 conicto +905 259 1192 259 conicto +1478 259 1667 483 conicto +1856 707 1856 1167 conicto +1856 1599 1666 1822 conicto +1476 2045 1192 2045 conicto +905 2045 716 1823 conicto +527 1601 527 1154 conicto +end_ol grestore +gsave 19.752467 12.500000 translate 0.035278 -0.035278 scale +start_ol +1746 289 moveto +1529 102 1331 19 conicto +1133 -64 905 -64 conicto +530 -64 329 124 conicto +128 312 128 605 conicto +128 777 203 919 conicto +278 1062 399 1148 conicto +521 1234 672 1278 conicto +785 1309 1017 1337 conicto +1490 1394 1713 1472 conicto +1713 1553 1713 1575 conicto +1713 1814 1603 1912 conicto +1453 2045 1158 2045 conicto +884 2045 753 1948 conicto +622 1851 560 1605 conicto +192 1657 lineto +243 1902 362 2053 conicto +481 2204 705 2286 conicto +930 2368 1225 2368 conicto +1519 2368 1702 2298 conicto +1886 2229 1972 2124 conicto +2058 2019 2093 1858 conicto +2112 1758 2112 1496 conicto +2112 973 lineto +2112 427 2137 281 conicto +2162 135 2235 0 conicto +1825 0 lineto +1763 123 1746 289 conicto +1713 1165 moveto +1501 1078 1076 1017 conicto +835 982 735 938 conicto +635 895 581 811 conicto +527 727 527 624 conicto +527 468 645 363 conicto +763 259 991 259 conicto +1216 259 1391 358 conicto +1567 457 1650 630 conicto +1713 762 1713 1021 conicto +1713 1165 lineto +end_ol grestore +gsave 20.074200 12.500000 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +gsave 20.235067 12.500000 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +320 0 moveto +320 2304 lineto +719 2304 lineto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 20.370533 12.500000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 20.700733 12.500000 translate 0.035278 -0.035278 scale +start_ol +204 -201 moveto +583 -259 lineto +607 -441 714 -525 conicto +859 -637 1109 -637 conicto +1379 -637 1526 -526 conicto +1673 -415 1724 -215 conicto +1755 -93 1755 298 conicto +1500 -3 1120 -3 conicto +646 -3 387 342 conicto +128 687 128 1169 conicto +128 1501 247 1781 conicto +366 2062 591 2215 conicto +817 2368 1122 2368 conicto +1528 2368 1792 2038 conicto +1792 2304 lineto +2176 2304 lineto +2176 297 lineto +2176 -245 2066 -471 conicto +1956 -697 1717 -828 conicto +1479 -960 1130 -960 conicto +714 -960 459 -771 conicto +204 -582 204 -201 conicto +527 1198 moveto +527 740 707 530 conicto +887 320 1158 320 conicto +1427 320 1609 529 conicto +1792 738 1792 1185 conicto +1792 1611 1604 1828 conicto +1417 2045 1151 2045 conicto +891 2045 709 1831 conicto +527 1618 527 1198 conicto +end_ol grestore +gsave 25.750000 10.500000 translate 0.035278 -0.035278 scale +start_ol +132 2432 moveto +552 2432 lineto +1308 391 lineto +2063 2432 lineto +2484 2432 lineto +1578 0 lineto +1038 0 lineto +132 2432 lineto +end_ol grestore +gsave 26.097133 10.500000 translate 0.035278 -0.035278 scale +start_ol +1362 2157 moveto +1044 2157 859 1905 conicto +675 1654 675 1216 conicto +675 779 858 527 conicto +1042 275 1362 275 conicto +1678 275 1863 528 conicto +2048 781 2048 1216 conicto +2048 1649 1863 1903 conicto +1678 2157 1362 2157 conicto +1362 2496 moveto +1878 2496 2172 2156 conicto +2467 1817 2467 1215 conicto +2467 617 2172 276 conicto +1878 -64 1361 -64 conicto +843 -64 549 276 conicto +256 617 256 1215 conicto +256 1817 549 2156 conicto +843 2496 1362 2496 conicto +end_ol grestore +gsave 26.452733 10.500000 translate 0.035278 -0.035278 scale +start_ol +448 2432 moveto +867 2432 lineto +867 0 lineto +448 0 lineto +448 2432 lineto +448 3392 moveto +867 3392 lineto +867 2880 lineto +448 2880 lineto +448 3392 lineto +end_ol grestore +gsave 26.622067 10.500000 translate 0.035278 -0.035278 scale +start_ol +2013 2064 moveto +2013 3392 lineto +2432 3392 lineto +2432 0 lineto +2013 0 lineto +2013 368 lineto +1889 150 1698 43 conicto +1508 -64 1241 -64 conicto +804 -64 530 288 conicto +256 641 256 1215 conicto +256 1791 530 2143 conicto +804 2496 1241 2496 conicto +1508 2496 1698 2390 conicto +1888 2284 2013 2064 conicto +675 1216 moveto +675 776 853 525 conicto +1031 275 1343 275 conicto +1654 275 1833 525 conicto +2013 776 2013 1216 conicto +2013 1656 1833 1906 conicto +1654 2157 1343 2157 conicto +1031 2157 853 1906 conicto +675 1656 675 1216 conicto +end_ol grestore +gsave 21.750000 10.500000 translate 0.035278 -0.035278 scale +start_ol +1806 840 moveto +2188 790 lineto +2125 389 1867 162 conicto +1610 -64 1234 -64 conicto +764 -64 478 248 conicto +192 560 192 1143 conicto +192 1520 315 1802 conicto +438 2085 689 2226 conicto +941 2368 1236 2368 conicto +1610 2368 1847 2176 conicto +2084 1985 2151 1633 conicto +1774 1573 lineto +1720 1808 1583 1926 conicto +1446 2045 1251 2045 conicto +958 2045 774 1831 conicto +591 1617 591 1155 conicto +591 685 768 472 conicto +945 259 1230 259 conicto +1458 259 1611 401 conicto +1765 544 1806 840 conicto +end_ol grestore +gsave 22.046333 10.500000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 3200 lineto +719 3200 lineto +719 2064 lineto +987 2368 1400 2368 conicto +1655 2368 1842 2266 conicto +2029 2165 2110 1986 conicto +2191 1807 2191 1467 conicto +2191 0 lineto +1792 0 lineto +1792 1478 lineto +1792 1775 1667 1910 conicto +1543 2045 1316 2045 conicto +1146 2045 996 1954 conicto +846 1863 782 1707 conicto +719 1551 719 1276 conicto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 22.376533 10.500000 translate 0.035278 -0.035278 scale +start_ol +1746 289 moveto +1529 102 1331 19 conicto +1133 -64 905 -64 conicto +530 -64 329 124 conicto +128 312 128 605 conicto +128 777 203 919 conicto +278 1062 399 1148 conicto +521 1234 672 1278 conicto +785 1309 1017 1337 conicto +1490 1394 1713 1472 conicto +1713 1553 1713 1575 conicto +1713 1814 1603 1912 conicto +1453 2045 1158 2045 conicto +884 2045 753 1948 conicto +622 1851 560 1605 conicto +192 1657 lineto +243 1902 362 2053 conicto +481 2204 705 2286 conicto +930 2368 1225 2368 conicto +1519 2368 1702 2298 conicto +1886 2229 1972 2124 conicto +2058 2019 2093 1858 conicto +2112 1758 2112 1496 conicto +2112 973 lineto +2112 427 2137 281 conicto +2162 135 2235 0 conicto +1825 0 lineto +1763 123 1746 289 conicto +1713 1165 moveto +1501 1078 1076 1017 conicto +835 982 735 938 conicto +635 895 581 811 conicto +527 727 527 624 conicto +527 468 645 363 conicto +763 259 991 259 conicto +1216 259 1391 358 conicto +1567 457 1650 630 conicto +1713 762 1713 1021 conicto +1713 1165 lineto +end_ol grestore +gsave 22.698267 10.500000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 2304 lineto +576 2304 lineto +576 1986 lineto +709 2209 822 2288 conicto +936 2368 1072 2368 conicto +1268 2368 1471 2237 conicto +1337 1898 lineto +1195 1984 1053 1984 conicto +925 1984 823 1905 conicto +722 1827 679 1689 conicto +614 1477 614 1226 conicto +614 0 lineto +256 0 lineto +end_ol grestore +gsave 22.884533 10.500000 translate 0.035278 -0.035278 scale +start_ol +1746 289 moveto +1529 102 1331 19 conicto +1133 -64 905 -64 conicto +530 -64 329 124 conicto +128 312 128 605 conicto +128 777 203 919 conicto +278 1062 399 1148 conicto +521 1234 672 1278 conicto +785 1309 1017 1337 conicto +1490 1394 1713 1472 conicto +1713 1553 1713 1575 conicto +1713 1814 1603 1912 conicto +1453 2045 1158 2045 conicto +884 2045 753 1948 conicto +622 1851 560 1605 conicto +192 1657 lineto +243 1902 362 2053 conicto +481 2204 705 2286 conicto +930 2368 1225 2368 conicto +1519 2368 1702 2298 conicto +1886 2229 1972 2124 conicto +2058 2019 2093 1858 conicto +2112 1758 2112 1496 conicto +2112 973 lineto +2112 427 2137 281 conicto +2162 135 2235 0 conicto +1825 0 lineto +1763 123 1746 289 conicto +1713 1165 moveto +1501 1078 1076 1017 conicto +835 982 735 938 conicto +635 895 581 811 conicto +527 727 527 624 conicto +527 468 645 363 conicto +763 259 991 259 conicto +1216 259 1391 358 conicto +1567 457 1650 630 conicto +1713 762 1713 1021 conicto +1713 1165 lineto +end_ol grestore +gsave 23.206267 10.500000 translate 0.035278 -0.035278 scale +start_ol +1806 840 moveto +2188 790 lineto +2125 389 1867 162 conicto +1610 -64 1234 -64 conicto +764 -64 478 248 conicto +192 560 192 1143 conicto +192 1520 315 1802 conicto +438 2085 689 2226 conicto +941 2368 1236 2368 conicto +1610 2368 1847 2176 conicto +2084 1985 2151 1633 conicto +1774 1573 lineto +1720 1808 1583 1926 conicto +1446 2045 1251 2045 conicto +958 2045 774 1831 conicto +591 1617 591 1155 conicto +591 685 768 472 conicto +945 259 1230 259 conicto +1458 259 1611 401 conicto +1765 544 1806 840 conicto +end_ol grestore +gsave 23.502600 10.500000 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +gsave 23.663467 10.500000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 23.993667 10.500000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 2304 lineto +576 2304 lineto +576 1986 lineto +709 2209 822 2288 conicto +936 2368 1072 2368 conicto +1268 2368 1471 2237 conicto +1337 1898 lineto +1195 1984 1053 1984 conicto +925 1984 823 1905 conicto +722 1827 679 1689 conicto +614 1477 614 1226 conicto +614 0 lineto +256 0 lineto +end_ol grestore +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 5.500000 6.000000 m 5.500000 7.417500 l 8.437500 7.417500 l 8.437500 6.000000 l cp s +gsave 6.000000 7.000000 translate 0.035278 -0.035278 scale +start_ol +128 1152 moveto +128 1798 479 2109 conicto +771 2368 1192 2368 conicto +1661 2368 1958 2053 conicto +2255 1739 2255 1184 conicto +2255 735 2123 477 conicto +1992 220 1740 78 conicto +1489 -64 1192 -64 conicto +715 -64 421 249 conicto +128 562 128 1152 conicto +527 1154 moveto +527 705 716 482 conicto +905 259 1192 259 conicto +1478 259 1667 483 conicto +1856 707 1856 1167 conicto +1856 1599 1666 1822 conicto +1476 2045 1192 2045 conicto +905 2045 716 1823 conicto +527 1601 527 1154 conicto +end_ol grestore +gsave 6.321733 7.000000 translate 0.035278 -0.035278 scale +start_ol +719 0 moveto +320 0 lineto +320 3200 lineto +747 3200 lineto +747 2056 lineto +984 2368 1357 2368 conicto +1563 2368 1747 2281 conicto +1931 2194 2050 2038 conicto +2169 1882 2236 1660 conicto +2304 1438 2304 1186 conicto +2304 588 2019 262 conicto +1735 -64 1337 -64 conicto +942 -64 719 279 conicto +719 0 lineto +719 1170 moveto +719 751 827 564 conicto +1003 259 1304 259 conicto +1549 259 1727 484 conicto +1905 709 1905 1155 conicto +1905 1610 1734 1827 conicto +1563 2045 1320 2045 conicto +1075 2045 897 1820 conicto +719 1595 719 1170 conicto +end_ol grestore +gsave 6.651933 7.000000 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +-172 -921 moveto +-98 -606 lineto +18 -637 85 -637 conicto +204 -637 262 -557 conicto +320 -478 320 -160 conicto +320 2273 lineto +719 2273 lineto +719 -168 lineto +719 -596 606 -756 conicto +462 -960 134 -960 conicto +-24 -960 -172 -921 conicto +end_ol grestore +gsave 6.787400 7.000000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 7.117600 7.000000 translate 0.035278 -0.035278 scale +start_ol +1806 840 moveto +2188 790 lineto +2125 389 1867 162 conicto +1610 -64 1234 -64 conicto +764 -64 478 248 conicto +192 560 192 1143 conicto +192 1520 315 1802 conicto +438 2085 689 2226 conicto +941 2368 1236 2368 conicto +1610 2368 1847 2176 conicto +2084 1985 2151 1633 conicto +1774 1573 lineto +1720 1808 1583 1926 conicto +1446 2045 1251 2045 conicto +958 2045 774 1831 conicto +591 1617 591 1155 conicto +591 685 768 472 conicto +945 259 1230 259 conicto +1458 259 1611 401 conicto +1765 544 1806 840 conicto +end_ol grestore +gsave 7.413933 7.000000 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +gsave 7.574800 7.000000 translate 0.035278 -0.035278 scale +start_ol +-64 -896 moveto +-64 -640 lineto +2496 -640 lineto +2496 -896 lineto +-64 -896 lineto +end_ol grestore +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 1.750000 6.000000 m 1.750000 7.500000 l 4.627500 7.500000 l 4.627500 6.000000 l cp s +gsave 2.502510 7.000000 translate 0.035278 -0.035278 scale +start_ol +729 0 moveto +320 0 lineto +320 3264 lineto +757 3264 lineto +757 2112 lineto +1003 2432 1389 2432 conicto +1602 2432 1792 2343 conicto +1983 2254 2106 2093 conicto +2229 1933 2298 1705 conicto +2368 1478 2368 1220 conicto +2368 606 2074 271 conicto +1781 -64 1369 -64 conicto +960 -64 729 287 conicto +729 0 lineto +729 1202 moveto +729 771 841 580 conicto +1024 267 1336 267 conicto +1590 267 1774 498 conicto +1959 729 1959 1186 conicto +1959 1655 1781 1878 conicto +1604 2101 1353 2101 conicto +1099 2101 914 1870 conicto +729 1639 729 1202 conicto +end_ol grestore +gsave 2.841177 7.000000 translate 0.035278 -0.035278 scale +start_ol +128 1184 moveto +128 1847 491 2166 conicto +794 2432 1230 2432 conicto +1714 2432 2021 2109 conicto +2329 1786 2329 1218 conicto +2329 757 2193 492 conicto +2057 228 1797 82 conicto +1537 -64 1230 -64 conicto +737 -64 432 258 conicto +128 580 128 1184 conicto +537 1185 moveto +537 724 734 495 conicto +931 267 1230 267 conicto +1526 267 1723 497 conicto +1920 727 1920 1198 conicto +1920 1643 1722 1872 conicto +1524 2101 1230 2101 conicto +931 2101 734 1873 conicto +537 1646 537 1185 conicto +end_ol grestore +gsave 3.171377 7.000000 translate 0.035278 -0.035278 scale +start_ol +128 1184 moveto +128 1847 491 2166 conicto +794 2432 1230 2432 conicto +1714 2432 2021 2109 conicto +2329 1786 2329 1218 conicto +2329 757 2193 492 conicto +2057 228 1797 82 conicto +1537 -64 1230 -64 conicto +737 -64 432 258 conicto +128 580 128 1184 conicto +537 1185 moveto +537 724 734 495 conicto +931 267 1230 267 conicto +1526 267 1723 497 conicto +1920 727 1920 1198 conicto +1920 1643 1722 1872 conicto +1524 2101 1230 2101 conicto +931 2101 734 1873 conicto +537 1646 537 1185 conicto +end_ol grestore +gsave 3.501577 7.000000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 3264 lineto +729 3264 lineto +729 0 lineto +320 0 lineto +end_ol grestore +gsave 3.637043 7.000000 translate 0.035278 -0.035278 scale +start_ol +-64 -896 moveto +-64 -576 lineto +2560 -576 lineto +2560 -896 lineto +-64 -896 lineto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 12.928800 3.750000 m 12.928800 4.875000 l 6.968750 4.875000 l 6.968750 5.513197 l s +[] 0 sd +0 slj +0 slc +n 6.968750 5.888197 m 6.718750 5.388197 l 6.968750 5.513197 l 7.218750 5.388197 l ef +n 6.968750 5.888197 m 6.718750 5.388197 l 6.968750 5.513197 l 7.218750 5.388197 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 12.928800 3.750000 m 12.928800 4.875000 l 3.188750 4.875000 l 3.188750 5.513197 l s +[] 0 sd +0 slj +0 slc +n 3.188750 5.888197 m 2.938750 5.388197 l 3.188750 5.513197 l 3.438750 5.388197 l ef +n 3.188750 5.888197 m 2.938750 5.388197 l 3.188750 5.513197 l 3.438750 5.388197 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 12.928800 3.750000 m 12.928800 4.875000 l 13.928800 4.875000 l 13.928800 5.513197 l s +[] 0 sd +0 slj +0 slc +n 13.928800 5.888197 m 13.678800 5.388197 l 13.928800 5.513197 l 14.178800 5.388197 l ef +n 13.928800 5.888197 m 13.678800 5.388197 l 13.928800 5.513197 l 14.178800 5.388197 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 12.928800 3.750000 m 12.928800 4.875000 l 23.382500 4.875000 l 23.382500 5.513197 l s +[] 0 sd +0 slj +0 slc +n 23.382500 5.888197 m 23.132500 5.388197 l 23.382500 5.513197 l 23.632500 5.388197 l ef +n 23.382500 5.888197 m 23.132500 5.388197 l 23.382500 5.513197 l 23.632500 5.388197 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 23.382500 7.500000 m 23.382500 8.500000 l 26.428800 8.500000 l 26.428800 9.013197 l s +[] 0 sd +0 slj +0 slc +n 26.428800 9.388197 m 26.178800 8.888197 l 26.428800 9.013197 l 26.678800 8.888197 l ef +n 26.428800 9.388197 m 26.178800 8.888197 l 26.428800 9.013197 l 26.678800 8.888197 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 13.928800 7.500000 m 13.928800 8.500000 l 7.375000 8.500000 l 7.375000 9.013197 l s +[] 0 sd +0 slj +0 slc +n 7.375000 9.388197 m 7.125000 8.888197 l 7.375000 9.013197 l 7.625000 8.888197 l ef +n 7.375000 9.388197 m 7.125000 8.888197 l 7.375000 9.013197 l 7.625000 8.888197 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 23.382500 7.500000 m 23.382500 8.500000 l 22.928800 8.500000 l 22.928800 9.013197 l s +[] 0 sd +0 slj +0 slc +n 22.928800 9.388197 m 22.678800 8.888197 l 22.928800 9.013197 l 23.178800 8.888197 l ef +n 22.928800 9.388197 m 22.678800 8.888197 l 22.928800 9.013197 l 23.178800 8.888197 l cp s +0.095250 slw +[1.000000] 0 sd +[0.127000] 0 sd +0 slj +n 3.000000 11.500000 m 3.000000 13.002375 l 6.752375 13.002375 l 6.752375 11.500000 l cp s +0.095250 slw +[0.127000] 0 sd +[0.127000] 0 sd +0 slj +n 7.750000 11.500000 m 7.750000 13.002375 l 12.102375 13.002375 l 12.102375 11.500000 l cp s +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 14.200000 15.500000 m 14.200000 16.996250 l 17.057500 16.996250 l 17.057500 15.500000 l cp s +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 14.200000 17.250000 m 14.200000 18.746250 l 17.057500 18.746250 l 17.057500 17.250000 l cp s +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 14.200000 19.000000 m 14.200000 20.496250 l 17.450000 20.496250 l 17.450000 19.000000 l cp s +gsave 3.100000 12.450000 translate 0.035278 -0.035278 scale +start_ol +127 682 moveto +531 744 lineto +566 509 713 384 conicto +861 259 1125 259 conicto +1391 259 1520 370 conicto +1649 481 1649 630 conicto +1649 764 1536 841 conicto +1456 893 1140 974 conicto +715 1084 542 1164 conicto +370 1244 281 1385 conicto +192 1527 192 1698 conicto +192 1853 266 1986 conicto +341 2119 469 2207 conicto +566 2274 722 2321 conicto +878 2368 1057 2368 conicto +1325 2368 1528 2289 conicto +1732 2211 1828 2076 conicto +1925 1941 1962 1716 conicto +1582 1663 lineto +1557 1843 1433 1944 conicto +1310 2045 1085 2045 conicto +819 2045 705 1955 conicto +591 1865 591 1744 conicto +591 1668 638 1606 conicto +685 1543 786 1501 conicto +844 1479 1128 1400 conicto +1537 1288 1700 1216 conicto +1863 1145 1955 1009 conicto +2048 874 2048 672 conicto +2048 475 1934 300 conicto +1820 126 1604 31 conicto +1389 -64 1116 -64 conicto +665 -64 429 124 conicto +193 313 127 682 conicto +end_ol grestore +gsave 3.396333 12.450000 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +320 0 moveto +320 2304 lineto +719 2304 lineto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 3.531800 12.450000 translate 0.035278 -0.035278 scale +start_ol +204 -201 moveto +583 -259 lineto +607 -441 714 -525 conicto +859 -637 1109 -637 conicto +1379 -637 1526 -526 conicto +1673 -415 1724 -215 conicto +1755 -93 1755 298 conicto +1500 -3 1120 -3 conicto +646 -3 387 342 conicto +128 687 128 1169 conicto +128 1501 247 1781 conicto +366 2062 591 2215 conicto +817 2368 1122 2368 conicto +1528 2368 1792 2038 conicto +1792 2304 lineto +2176 2304 lineto +2176 297 lineto +2176 -245 2066 -471 conicto +1956 -697 1717 -828 conicto +1479 -960 1130 -960 conicto +714 -960 459 -771 conicto +204 -582 204 -201 conicto +527 1198 moveto +527 740 707 530 conicto +887 320 1158 320 conicto +1427 320 1609 529 conicto +1792 738 1792 1185 conicto +1792 1611 1604 1828 conicto +1417 2045 1151 2045 conicto +891 2045 709 1831 conicto +527 1618 527 1198 conicto +end_ol grestore +gsave 3.862000 12.450000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 4.192200 12.450000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 4.522400 12.450000 translate 0.035278 -0.035278 scale +start_ol +1752 0 moveto +1752 281 lineto +1534 -64 1112 -64 conicto +838 -64 609 89 conicto +380 243 254 517 conicto +128 792 128 1149 conicto +128 1498 242 1782 conicto +357 2066 585 2217 conicto +813 2368 1095 2368 conicto +1302 2368 1463 2280 conicto +1625 2192 1726 2052 conicto +1726 3200 lineto +2127 3200 lineto +2127 0 lineto +1752 0 lineto +527 1150 moveto +527 703 711 481 conicto +896 259 1146 259 conicto +1399 259 1575 471 conicto +1752 683 1752 1118 conicto +1752 1597 1572 1821 conicto +1392 2045 1129 2045 conicto +872 2045 699 1829 conicto +527 1614 527 1150 conicto +end_ol grestore +gsave 4.844133 12.450000 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +320 0 moveto +320 2304 lineto +719 2304 lineto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 4.979600 12.450000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 5.309800 12.450000 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +gsave 5.470667 12.450000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 5.800867 12.450000 translate 0.035278 -0.035278 scale +start_ol +204 -201 moveto +583 -259 lineto +607 -441 714 -525 conicto +859 -637 1109 -637 conicto +1379 -637 1526 -526 conicto +1673 -415 1724 -215 conicto +1755 -93 1755 298 conicto +1500 -3 1120 -3 conicto +646 -3 387 342 conicto +128 687 128 1169 conicto +128 1501 247 1781 conicto +366 2062 591 2215 conicto +817 2368 1122 2368 conicto +1528 2368 1792 2038 conicto +1792 2304 lineto +2176 2304 lineto +2176 297 lineto +2176 -245 2066 -471 conicto +1956 -697 1717 -828 conicto +1479 -960 1130 -960 conicto +714 -960 459 -771 conicto +204 -582 204 -201 conicto +527 1198 moveto +527 740 707 530 conicto +887 320 1158 320 conicto +1427 320 1609 529 conicto +1792 738 1792 1185 conicto +1792 1611 1604 1828 conicto +1417 2045 1151 2045 conicto +891 2045 709 1831 conicto +527 1618 527 1198 conicto +end_ol grestore +gsave 6.131067 12.450000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 6.461267 12.450000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 2304 lineto +576 2304 lineto +576 1986 lineto +709 2209 822 2288 conicto +936 2368 1072 2368 conicto +1268 2368 1471 2237 conicto +1337 1898 lineto +1195 1984 1053 1984 conicto +925 1984 823 1905 conicto +722 1827 679 1689 conicto +614 1477 614 1226 conicto +614 0 lineto +256 0 lineto +end_ol grestore +gsave 7.852380 12.502400 translate 0.035278 -0.035278 scale +start_ol +1792 0 moveto +1792 314 lineto +1521 -64 1053 -64 conicto +847 -64 668 11 conicto +489 87 402 201 conicto +316 316 280 490 conicto +256 606 256 859 conicto +256 2304 lineto +655 2304 lineto +655 1010 lineto +655 701 679 593 conicto +717 437 837 348 conicto +957 259 1135 259 conicto +1312 259 1467 350 conicto +1622 441 1686 598 conicto +1751 755 1751 1054 conicto +1751 2304 lineto +2112 2304 lineto +2112 0 lineto +1792 0 lineto +end_ol grestore +gsave 8.174113 12.502400 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 8.504313 12.502400 translate 0.035278 -0.035278 scale +start_ol +127 682 moveto +531 744 lineto +566 509 713 384 conicto +861 259 1125 259 conicto +1391 259 1520 370 conicto +1649 481 1649 630 conicto +1649 764 1536 841 conicto +1456 893 1140 974 conicto +715 1084 542 1164 conicto +370 1244 281 1385 conicto +192 1527 192 1698 conicto +192 1853 266 1986 conicto +341 2119 469 2207 conicto +566 2274 722 2321 conicto +878 2368 1057 2368 conicto +1325 2368 1528 2289 conicto +1732 2211 1828 2076 conicto +1925 1941 1962 1716 conicto +1582 1663 lineto +1557 1843 1433 1944 conicto +1310 2045 1085 2045 conicto +819 2045 705 1955 conicto +591 1865 591 1744 conicto +591 1668 638 1606 conicto +685 1543 786 1501 conicto +844 1479 1128 1400 conicto +1537 1288 1700 1216 conicto +1863 1145 1955 1009 conicto +2048 874 2048 672 conicto +2048 475 1934 300 conicto +1820 126 1604 31 conicto +1389 -64 1116 -64 conicto +665 -64 429 124 conicto +193 313 127 682 conicto +end_ol grestore +gsave 8.800647 12.502400 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +320 0 moveto +320 2304 lineto +719 2304 lineto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 8.936113 12.502400 translate 0.035278 -0.035278 scale +start_ol +204 -201 moveto +583 -259 lineto +607 -441 714 -525 conicto +859 -637 1109 -637 conicto +1379 -637 1526 -526 conicto +1673 -415 1724 -215 conicto +1755 -93 1755 298 conicto +1500 -3 1120 -3 conicto +646 -3 387 342 conicto +128 687 128 1169 conicto +128 1501 247 1781 conicto +366 2062 591 2215 conicto +817 2368 1122 2368 conicto +1528 2368 1792 2038 conicto +1792 2304 lineto +2176 2304 lineto +2176 297 lineto +2176 -245 2066 -471 conicto +1956 -697 1717 -828 conicto +1479 -960 1130 -960 conicto +714 -960 459 -771 conicto +204 -582 204 -201 conicto +527 1198 moveto +527 740 707 530 conicto +887 320 1158 320 conicto +1427 320 1609 529 conicto +1792 738 1792 1185 conicto +1792 1611 1604 1828 conicto +1417 2045 1151 2045 conicto +891 2045 709 1831 conicto +527 1618 527 1198 conicto +end_ol grestore +gsave 9.266313 12.502400 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 9.596513 12.502400 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 9.926713 12.502400 translate 0.035278 -0.035278 scale +start_ol +1752 0 moveto +1752 281 lineto +1534 -64 1112 -64 conicto +838 -64 609 89 conicto +380 243 254 517 conicto +128 792 128 1149 conicto +128 1498 242 1782 conicto +357 2066 585 2217 conicto +813 2368 1095 2368 conicto +1302 2368 1463 2280 conicto +1625 2192 1726 2052 conicto +1726 3200 lineto +2127 3200 lineto +2127 0 lineto +1752 0 lineto +527 1150 moveto +527 703 711 481 conicto +896 259 1146 259 conicto +1399 259 1575 471 conicto +1752 683 1752 1118 conicto +1752 1597 1572 1821 conicto +1392 2045 1129 2045 conicto +872 2045 699 1829 conicto +527 1614 527 1150 conicto +end_ol grestore +gsave 10.248447 12.502400 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +320 0 moveto +320 2304 lineto +719 2304 lineto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 10.383913 12.502400 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 10.714113 12.502400 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +gsave 10.874980 12.502400 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 11.205180 12.502400 translate 0.035278 -0.035278 scale +start_ol +204 -201 moveto +583 -259 lineto +607 -441 714 -525 conicto +859 -637 1109 -637 conicto +1379 -637 1526 -526 conicto +1673 -415 1724 -215 conicto +1755 -93 1755 298 conicto +1500 -3 1120 -3 conicto +646 -3 387 342 conicto +128 687 128 1169 conicto +128 1501 247 1781 conicto +366 2062 591 2215 conicto +817 2368 1122 2368 conicto +1528 2368 1792 2038 conicto +1792 2304 lineto +2176 2304 lineto +2176 297 lineto +2176 -245 2066 -471 conicto +1956 -697 1717 -828 conicto +1479 -960 1130 -960 conicto +714 -960 459 -771 conicto +204 -582 204 -201 conicto +527 1198 moveto +527 740 707 530 conicto +887 320 1158 320 conicto +1427 320 1609 529 conicto +1792 738 1792 1185 conicto +1792 1611 1604 1828 conicto +1417 2045 1151 2045 conicto +891 2045 709 1831 conicto +527 1618 527 1198 conicto +end_ol grestore +gsave 11.535380 12.502400 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 11.865580 12.502400 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 2304 lineto +576 2304 lineto +576 1986 lineto +709 2209 822 2288 conicto +936 2368 1072 2368 conicto +1268 2368 1471 2237 conicto +1337 1898 lineto +1195 1984 1053 1984 conicto +925 1984 823 1905 conicto +722 1827 679 1689 conicto +614 1477 614 1226 conicto +614 0 lineto +256 0 lineto +end_ol grestore +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 4.000000 14.250000 m 4.000000 15.746250 l 6.857500 15.746250 l 6.857500 14.250000 l cp s +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 4.000000 16.000000 m 4.000000 17.496250 l 6.857500 17.496250 l 6.857500 16.000000 l cp s +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 4.000000 17.750000 m 4.000000 19.246250 l 6.857500 19.246250 l 6.857500 17.750000 l cp s +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 4.000000 19.500000 m 4.000000 20.996250 l 6.857500 20.996250 l 6.857500 19.500000 l cp s +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 4.000000 21.250000 m 4.000000 22.746250 l 6.857500 22.746250 l 6.857500 21.250000 l cp s +gsave 4.750000 15.250000 translate 0.035278 -0.035278 scale +start_ol +719 0 moveto +320 0 lineto +320 3200 lineto +747 3200 lineto +747 2056 lineto +984 2368 1357 2368 conicto +1563 2368 1747 2281 conicto +1931 2194 2050 2038 conicto +2169 1882 2236 1660 conicto +2304 1438 2304 1186 conicto +2304 588 2019 262 conicto +1735 -64 1337 -64 conicto +942 -64 719 279 conicto +719 0 lineto +719 1170 moveto +719 751 827 564 conicto +1003 259 1304 259 conicto +1549 259 1727 484 conicto +1905 709 1905 1155 conicto +1905 1610 1734 1827 conicto +1563 2045 1320 2045 conicto +1075 2045 897 1820 conicto +719 1595 719 1170 conicto +end_ol grestore +gsave 5.080200 15.250000 translate 0.035278 -0.035278 scale +start_ol +274 -912 moveto +231 -541 lineto +358 -576 453 -576 conicto +583 -576 660 -532 conicto +738 -489 788 -410 conicto +824 -352 906 -118 conicto +917 -86 941 -22 conicto +71 2297 lineto +490 2297 lineto +967 956 lineto +1060 701 1133 420 conicto +1200 690 1293 947 conicto +1783 2297 lineto +2171 2297 lineto +1299 -57 lineto +1159 -439 1081 -583 conicto +978 -778 844 -869 conicto +710 -960 524 -960 conicto +412 -960 274 -912 conicto +end_ol grestore +gsave 5.376533 15.250000 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +gsave 5.537400 15.250000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 4.750000 17.000000 translate 0.035278 -0.035278 scale +start_ol +127 682 moveto +531 744 lineto +566 509 713 384 conicto +861 259 1125 259 conicto +1391 259 1520 370 conicto +1649 481 1649 630 conicto +1649 764 1536 841 conicto +1456 893 1140 974 conicto +715 1084 542 1164 conicto +370 1244 281 1385 conicto +192 1527 192 1698 conicto +192 1853 266 1986 conicto +341 2119 469 2207 conicto +566 2274 722 2321 conicto +878 2368 1057 2368 conicto +1325 2368 1528 2289 conicto +1732 2211 1828 2076 conicto +1925 1941 1962 1716 conicto +1582 1663 lineto +1557 1843 1433 1944 conicto +1310 2045 1085 2045 conicto +819 2045 705 1955 conicto +591 1865 591 1744 conicto +591 1668 638 1606 conicto +685 1543 786 1501 conicto +844 1479 1128 1400 conicto +1537 1288 1700 1216 conicto +1863 1145 1955 1009 conicto +2048 874 2048 672 conicto +2048 475 1934 300 conicto +1820 126 1604 31 conicto +1389 -64 1116 -64 conicto +665 -64 429 124 conicto +193 313 127 682 conicto +end_ol grestore +gsave 5.046333 17.000000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 3200 lineto +719 3200 lineto +719 2064 lineto +987 2368 1400 2368 conicto +1655 2368 1842 2266 conicto +2029 2165 2110 1986 conicto +2191 1807 2191 1467 conicto +2191 0 lineto +1792 0 lineto +1792 1478 lineto +1792 1775 1667 1910 conicto +1543 2045 1316 2045 conicto +1146 2045 996 1954 conicto +846 1863 782 1707 conicto +719 1551 719 1276 conicto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 5.376533 17.000000 translate 0.035278 -0.035278 scale +start_ol +128 1152 moveto +128 1798 479 2109 conicto +771 2368 1192 2368 conicto +1661 2368 1958 2053 conicto +2255 1739 2255 1184 conicto +2255 735 2123 477 conicto +1992 220 1740 78 conicto +1489 -64 1192 -64 conicto +715 -64 421 249 conicto +128 562 128 1152 conicto +527 1154 moveto +527 705 716 482 conicto +905 259 1192 259 conicto +1478 259 1667 483 conicto +1856 707 1856 1167 conicto +1856 1599 1666 1822 conicto +1476 2045 1192 2045 conicto +905 2045 716 1823 conicto +527 1601 527 1154 conicto +end_ol grestore +gsave 5.698267 17.000000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 2304 lineto +576 2304 lineto +576 1986 lineto +709 2209 822 2288 conicto +936 2368 1072 2368 conicto +1268 2368 1471 2237 conicto +1337 1898 lineto +1195 1984 1053 1984 conicto +925 1984 823 1905 conicto +722 1827 679 1689 conicto +614 1477 614 1226 conicto +614 0 lineto +256 0 lineto +end_ol grestore +gsave 5.884533 17.000000 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +gsave 4.900000 18.650000 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +320 0 moveto +320 2304 lineto +719 2304 lineto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 5.035467 18.650000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 5.365667 18.650000 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +gsave 5.526533 18.650000 translate 0.035278 -0.035278 scale +start_ol +1806 840 moveto +2188 790 lineto +2125 389 1867 162 conicto +1610 -64 1234 -64 conicto +764 -64 478 248 conicto +192 560 192 1143 conicto +192 1520 315 1802 conicto +438 2085 689 2226 conicto +941 2368 1236 2368 conicto +1610 2368 1847 2176 conicto +2084 1985 2151 1633 conicto +1774 1573 lineto +1720 1808 1583 1926 conicto +1446 2045 1251 2045 conicto +958 2045 774 1831 conicto +591 1617 591 1155 conicto +591 685 768 472 conicto +945 259 1230 259 conicto +1458 259 1611 401 conicto +1765 544 1806 840 conicto +end_ol grestore +gsave 4.700000 20.500000 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +320 0 moveto +320 2304 lineto +719 2304 lineto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 4.835467 20.500000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 5.165667 20.500000 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +gsave 5.326533 20.500000 translate 0.035278 -0.035278 scale +start_ol +-64 -896 moveto +-64 -640 lineto +2496 -640 lineto +2496 -896 lineto +-64 -896 lineto +end_ol grestore +gsave 4.400000 22.250000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 3200 lineto +655 3200 lineto +655 0 lineto +256 0 lineto +end_ol grestore +gsave 4.527000 22.250000 translate 0.035278 -0.035278 scale +start_ol +128 1152 moveto +128 1798 479 2109 conicto +771 2368 1192 2368 conicto +1661 2368 1958 2053 conicto +2255 1739 2255 1184 conicto +2255 735 2123 477 conicto +1992 220 1740 78 conicto +1489 -64 1192 -64 conicto +715 -64 421 249 conicto +128 562 128 1152 conicto +527 1154 moveto +527 705 716 482 conicto +905 259 1192 259 conicto +1478 259 1667 483 conicto +1856 707 1856 1167 conicto +1856 1599 1666 1822 conicto +1476 2045 1192 2045 conicto +905 2045 716 1823 conicto +527 1601 527 1154 conicto +end_ol grestore +gsave 4.848733 22.250000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 5.178933 22.250000 translate 0.035278 -0.035278 scale +start_ol +204 -201 moveto +583 -259 lineto +607 -441 714 -525 conicto +859 -637 1109 -637 conicto +1379 -637 1526 -526 conicto +1673 -415 1724 -215 conicto +1755 -93 1755 298 conicto +1500 -3 1120 -3 conicto +646 -3 387 342 conicto +128 687 128 1169 conicto +128 1501 247 1781 conicto +366 2062 591 2215 conicto +817 2368 1122 2368 conicto +1528 2368 1792 2038 conicto +1792 2304 lineto +2176 2304 lineto +2176 297 lineto +2176 -245 2066 -471 conicto +1956 -697 1717 -828 conicto +1479 -960 1130 -960 conicto +714 -960 459 -771 conicto +204 -582 204 -201 conicto +527 1198 moveto +527 740 707 530 conicto +887 320 1158 320 conicto +1427 320 1609 529 conicto +1792 738 1792 1185 conicto +1792 1611 1604 1828 conicto +1417 2045 1151 2045 conicto +891 2045 709 1831 conicto +527 1618 527 1198 conicto +end_ol grestore +gsave 5.509133 22.250000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 3200 lineto +655 3200 lineto +655 0 lineto +256 0 lineto +end_ol grestore +gsave 5.636133 22.250000 translate 0.035278 -0.035278 scale +start_ol +128 1152 moveto +128 1798 479 2109 conicto +771 2368 1192 2368 conicto +1661 2368 1958 2053 conicto +2255 1739 2255 1184 conicto +2255 735 2123 477 conicto +1992 220 1740 78 conicto +1489 -64 1192 -64 conicto +715 -64 421 249 conicto +128 562 128 1152 conicto +527 1154 moveto +527 705 716 482 conicto +905 259 1192 259 conicto +1478 259 1667 483 conicto +1856 707 1856 1167 conicto +1856 1599 1666 1822 conicto +1476 2045 1192 2045 conicto +905 2045 716 1823 conicto +527 1601 527 1154 conicto +end_ol grestore +gsave 5.957867 22.250000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 6.288067 22.250000 translate 0.035278 -0.035278 scale +start_ol +204 -201 moveto +583 -259 lineto +607 -441 714 -525 conicto +859 -637 1109 -637 conicto +1379 -637 1526 -526 conicto +1673 -415 1724 -215 conicto +1755 -93 1755 298 conicto +1500 -3 1120 -3 conicto +646 -3 387 342 conicto +128 687 128 1169 conicto +128 1501 247 1781 conicto +366 2062 591 2215 conicto +817 2368 1122 2368 conicto +1528 2368 1792 2038 conicto +1792 2304 lineto +2176 2304 lineto +2176 297 lineto +2176 -245 2066 -471 conicto +1956 -697 1717 -828 conicto +1479 -960 1130 -960 conicto +714 -960 459 -771 conicto +204 -582 204 -201 conicto +527 1198 moveto +527 740 707 530 conicto +887 320 1158 320 conicto +1427 320 1609 529 conicto +1792 738 1792 1185 conicto +1792 1611 1604 1828 conicto +1417 2045 1151 2045 conicto +891 2045 709 1831 conicto +527 1618 527 1198 conicto +end_ol grestore +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 9.250000 14.250000 m 9.250000 15.746250 l 12.107500 15.746250 l 12.107500 14.250000 l cp s +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 9.250000 16.000000 m 9.250000 17.496250 l 12.107500 17.496250 l 12.107500 16.000000 l cp s +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 9.250000 17.750000 m 9.250000 19.246250 l 12.107500 19.246250 l 12.107500 17.750000 l cp s +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 9.250000 19.500000 m 9.250000 20.996250 l 12.107500 20.996250 l 12.107500 19.500000 l cp s +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 9.250000 21.250000 m 9.250000 22.746250 l 12.107500 22.746250 l 12.107500 21.250000 l cp s +gsave 10.000000 15.250000 translate 0.035278 -0.035278 scale +start_ol +1792 0 moveto +1792 314 lineto +1521 -64 1053 -64 conicto +847 -64 668 11 conicto +489 87 402 201 conicto +316 316 280 490 conicto +256 606 256 859 conicto +256 2304 lineto +655 2304 lineto +655 1010 lineto +655 701 679 593 conicto +717 437 837 348 conicto +957 259 1135 259 conicto +1312 259 1467 350 conicto +1622 441 1686 598 conicto +1751 755 1751 1054 conicto +1751 2304 lineto +2112 2304 lineto +2112 0 lineto +1792 0 lineto +end_ol grestore +gsave 10.321733 15.250000 translate 0.035278 -0.035278 scale +start_ol +719 0 moveto +320 0 lineto +320 3200 lineto +747 3200 lineto +747 2056 lineto +984 2368 1357 2368 conicto +1563 2368 1747 2281 conicto +1931 2194 2050 2038 conicto +2169 1882 2236 1660 conicto +2304 1438 2304 1186 conicto +2304 588 2019 262 conicto +1735 -64 1337 -64 conicto +942 -64 719 279 conicto +719 0 lineto +719 1170 moveto +719 751 827 564 conicto +1003 259 1304 259 conicto +1549 259 1727 484 conicto +1905 709 1905 1155 conicto +1905 1610 1734 1827 conicto +1563 2045 1320 2045 conicto +1075 2045 897 1820 conicto +719 1595 719 1170 conicto +end_ol grestore +gsave 10.651933 15.250000 translate 0.035278 -0.035278 scale +start_ol +274 -912 moveto +231 -541 lineto +358 -576 453 -576 conicto +583 -576 660 -532 conicto +738 -489 788 -410 conicto +824 -352 906 -118 conicto +917 -86 941 -22 conicto +71 2297 lineto +490 2297 lineto +967 956 lineto +1060 701 1133 420 conicto +1200 690 1293 947 conicto +1783 2297 lineto +2171 2297 lineto +1299 -57 lineto +1159 -439 1081 -583 conicto +978 -778 844 -869 conicto +710 -960 524 -960 conicto +412 -960 274 -912 conicto +end_ol grestore +gsave 10.948267 15.250000 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +gsave 11.109133 15.250000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 10.000000 18.750000 translate 0.035278 -0.035278 scale +start_ol +1792 0 moveto +1792 314 lineto +1521 -64 1053 -64 conicto +847 -64 668 11 conicto +489 87 402 201 conicto +316 316 280 490 conicto +256 606 256 859 conicto +256 2304 lineto +655 2304 lineto +655 1010 lineto +655 701 679 593 conicto +717 437 837 348 conicto +957 259 1135 259 conicto +1312 259 1467 350 conicto +1622 441 1686 598 conicto +1751 755 1751 1054 conicto +1751 2304 lineto +2112 2304 lineto +2112 0 lineto +1792 0 lineto +end_ol grestore +gsave 10.321733 18.750000 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +320 0 moveto +320 2304 lineto +719 2304 lineto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 10.457200 18.750000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 10.787400 18.750000 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +gsave 10.948267 18.750000 translate 0.035278 -0.035278 scale +start_ol +1806 840 moveto +2188 790 lineto +2125 389 1867 162 conicto +1610 -64 1234 -64 conicto +764 -64 478 248 conicto +192 560 192 1143 conicto +192 1520 315 1802 conicto +438 2085 689 2226 conicto +941 2368 1236 2368 conicto +1610 2368 1847 2176 conicto +2084 1985 2151 1633 conicto +1774 1573 lineto +1720 1808 1583 1926 conicto +1446 2045 1251 2045 conicto +958 2045 774 1831 conicto +591 1617 591 1155 conicto +591 685 768 472 conicto +945 259 1230 259 conicto +1458 259 1611 401 conicto +1765 544 1806 840 conicto +end_ol grestore +gsave 10.202400 20.502400 translate 0.035278 -0.035278 scale +start_ol +1792 0 moveto +1792 314 lineto +1521 -64 1053 -64 conicto +847 -64 668 11 conicto +489 87 402 201 conicto +316 316 280 490 conicto +256 606 256 859 conicto +256 2304 lineto +655 2304 lineto +655 1010 lineto +655 701 679 593 conicto +717 437 837 348 conicto +957 259 1135 259 conicto +1312 259 1467 350 conicto +1622 441 1686 598 conicto +1751 755 1751 1054 conicto +1751 2304 lineto +2112 2304 lineto +2112 0 lineto +1792 0 lineto +end_ol grestore +gsave 10.524133 20.502400 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +320 0 moveto +320 2304 lineto +719 2304 lineto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 10.659600 20.502400 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 10.989800 20.502400 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +gsave 9.452370 22.252400 translate 0.035278 -0.035278 scale +start_ol +1792 0 moveto +1792 314 lineto +1521 -64 1053 -64 conicto +847 -64 668 11 conicto +489 87 402 201 conicto +316 316 280 490 conicto +256 606 256 859 conicto +256 2304 lineto +655 2304 lineto +655 1010 lineto +655 701 679 593 conicto +717 437 837 348 conicto +957 259 1135 259 conicto +1312 259 1467 350 conicto +1622 441 1686 598 conicto +1751 755 1751 1054 conicto +1751 2304 lineto +2112 2304 lineto +2112 0 lineto +1792 0 lineto +end_ol grestore +gsave 9.774103 22.252400 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 3200 lineto +655 3200 lineto +655 0 lineto +256 0 lineto +end_ol grestore +gsave 9.901103 22.252400 translate 0.035278 -0.035278 scale +start_ol +128 1152 moveto +128 1798 479 2109 conicto +771 2368 1192 2368 conicto +1661 2368 1958 2053 conicto +2255 1739 2255 1184 conicto +2255 735 2123 477 conicto +1992 220 1740 78 conicto +1489 -64 1192 -64 conicto +715 -64 421 249 conicto +128 562 128 1152 conicto +527 1154 moveto +527 705 716 482 conicto +905 259 1192 259 conicto +1478 259 1667 483 conicto +1856 707 1856 1167 conicto +1856 1599 1666 1822 conicto +1476 2045 1192 2045 conicto +905 2045 716 1823 conicto +527 1601 527 1154 conicto +end_ol grestore +gsave 10.222837 22.252400 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 10.553037 22.252400 translate 0.035278 -0.035278 scale +start_ol +204 -201 moveto +583 -259 lineto +607 -441 714 -525 conicto +859 -637 1109 -637 conicto +1379 -637 1526 -526 conicto +1673 -415 1724 -215 conicto +1755 -93 1755 298 conicto +1500 -3 1120 -3 conicto +646 -3 387 342 conicto +128 687 128 1169 conicto +128 1501 247 1781 conicto +366 2062 591 2215 conicto +817 2368 1122 2368 conicto +1528 2368 1792 2038 conicto +1792 2304 lineto +2176 2304 lineto +2176 297 lineto +2176 -245 2066 -471 conicto +1956 -697 1717 -828 conicto +1479 -960 1130 -960 conicto +714 -960 459 -771 conicto +204 -582 204 -201 conicto +527 1198 moveto +527 740 707 530 conicto +887 320 1158 320 conicto +1427 320 1609 529 conicto +1792 738 1792 1185 conicto +1792 1611 1604 1828 conicto +1417 2045 1151 2045 conicto +891 2045 709 1831 conicto +527 1618 527 1198 conicto +end_ol grestore +gsave 10.883237 22.252400 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 3200 lineto +655 3200 lineto +655 0 lineto +256 0 lineto +end_ol grestore +gsave 11.010237 22.252400 translate 0.035278 -0.035278 scale +start_ol +128 1152 moveto +128 1798 479 2109 conicto +771 2368 1192 2368 conicto +1661 2368 1958 2053 conicto +2255 1739 2255 1184 conicto +2255 735 2123 477 conicto +1992 220 1740 78 conicto +1489 -64 1192 -64 conicto +715 -64 421 249 conicto +128 562 128 1152 conicto +527 1154 moveto +527 705 716 482 conicto +905 259 1192 259 conicto +1478 259 1667 483 conicto +1856 707 1856 1167 conicto +1856 1599 1666 1822 conicto +1476 2045 1192 2045 conicto +905 2045 716 1823 conicto +527 1601 527 1154 conicto +end_ol grestore +gsave 11.331970 22.252400 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 11.662170 22.252400 translate 0.035278 -0.035278 scale +start_ol +204 -201 moveto +583 -259 lineto +607 -441 714 -525 conicto +859 -637 1109 -637 conicto +1379 -637 1526 -526 conicto +1673 -415 1724 -215 conicto +1755 -93 1755 298 conicto +1500 -3 1120 -3 conicto +646 -3 387 342 conicto +128 687 128 1169 conicto +128 1501 247 1781 conicto +366 2062 591 2215 conicto +817 2368 1122 2368 conicto +1528 2368 1792 2038 conicto +1792 2304 lineto +2176 2304 lineto +2176 297 lineto +2176 -245 2066 -471 conicto +1956 -697 1717 -828 conicto +1479 -960 1130 -960 conicto +714 -960 459 -771 conicto +204 -582 204 -201 conicto +527 1198 moveto +527 740 707 530 conicto +887 320 1158 320 conicto +1427 320 1609 529 conicto +1792 738 1792 1185 conicto +1792 1611 1604 1828 conicto +1417 2045 1151 2045 conicto +891 2045 709 1831 conicto +527 1618 527 1198 conicto +end_ol grestore +gsave 10.000000 17.000000 translate 0.035278 -0.035278 scale +start_ol +1792 0 moveto +1792 314 lineto +1521 -64 1053 -64 conicto +847 -64 668 11 conicto +489 87 402 201 conicto +316 316 280 490 conicto +256 606 256 859 conicto +256 2304 lineto +655 2304 lineto +655 1010 lineto +655 701 679 593 conicto +717 437 837 348 conicto +957 259 1135 259 conicto +1312 259 1467 350 conicto +1622 441 1686 598 conicto +1751 755 1751 1054 conicto +1751 2304 lineto +2112 2304 lineto +2112 0 lineto +1792 0 lineto +end_ol grestore +gsave 10.321733 17.000000 translate 0.035278 -0.035278 scale +start_ol +127 682 moveto +531 744 lineto +566 509 713 384 conicto +861 259 1125 259 conicto +1391 259 1520 370 conicto +1649 481 1649 630 conicto +1649 764 1536 841 conicto +1456 893 1140 974 conicto +715 1084 542 1164 conicto +370 1244 281 1385 conicto +192 1527 192 1698 conicto +192 1853 266 1986 conicto +341 2119 469 2207 conicto +566 2274 722 2321 conicto +878 2368 1057 2368 conicto +1325 2368 1528 2289 conicto +1732 2211 1828 2076 conicto +1925 1941 1962 1716 conicto +1582 1663 lineto +1557 1843 1433 1944 conicto +1310 2045 1085 2045 conicto +819 2045 705 1955 conicto +591 1865 591 1744 conicto +591 1668 638 1606 conicto +685 1543 786 1501 conicto +844 1479 1128 1400 conicto +1537 1288 1700 1216 conicto +1863 1145 1955 1009 conicto +2048 874 2048 672 conicto +2048 475 1934 300 conicto +1820 126 1604 31 conicto +1389 -64 1116 -64 conicto +665 -64 429 124 conicto +193 313 127 682 conicto +end_ol grestore +gsave 10.618067 17.000000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 3200 lineto +719 3200 lineto +719 2064 lineto +987 2368 1400 2368 conicto +1655 2368 1842 2266 conicto +2029 2165 2110 1986 conicto +2191 1807 2191 1467 conicto +2191 0 lineto +1792 0 lineto +1792 1478 lineto +1792 1775 1667 1910 conicto +1543 2045 1316 2045 conicto +1146 2045 996 1954 conicto +846 1863 782 1707 conicto +719 1551 719 1276 conicto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 10.948267 17.000000 translate 0.035278 -0.035278 scale +start_ol +128 1152 moveto +128 1798 479 2109 conicto +771 2368 1192 2368 conicto +1661 2368 1958 2053 conicto +2255 1739 2255 1184 conicto +2255 735 2123 477 conicto +1992 220 1740 78 conicto +1489 -64 1192 -64 conicto +715 -64 421 249 conicto +128 562 128 1152 conicto +527 1154 moveto +527 705 716 482 conicto +905 259 1192 259 conicto +1478 259 1667 483 conicto +1856 707 1856 1167 conicto +1856 1599 1666 1822 conicto +1476 2045 1192 2045 conicto +905 2045 716 1823 conicto +527 1601 527 1154 conicto +end_ol grestore +gsave 11.270000 17.000000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 2304 lineto +576 2304 lineto +576 1986 lineto +709 2209 822 2288 conicto +936 2368 1072 2368 conicto +1268 2368 1471 2237 conicto +1337 1898 lineto +1195 1984 1053 1984 conicto +925 1984 823 1905 conicto +722 1827 679 1689 conicto +614 1477 614 1226 conicto +614 0 lineto +256 0 lineto +end_ol grestore +gsave 11.456267 17.000000 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +gsave 14.600000 16.500000 translate 0.035278 -0.035278 scale +start_ol +127 682 moveto +531 744 lineto +566 509 713 384 conicto +861 259 1125 259 conicto +1391 259 1520 370 conicto +1649 481 1649 630 conicto +1649 764 1536 841 conicto +1456 893 1140 974 conicto +715 1084 542 1164 conicto +370 1244 281 1385 conicto +192 1527 192 1698 conicto +192 1853 266 1986 conicto +341 2119 469 2207 conicto +566 2274 722 2321 conicto +878 2368 1057 2368 conicto +1325 2368 1528 2289 conicto +1732 2211 1828 2076 conicto +1925 1941 1962 1716 conicto +1582 1663 lineto +1557 1843 1433 1944 conicto +1310 2045 1085 2045 conicto +819 2045 705 1955 conicto +591 1865 591 1744 conicto +591 1668 638 1606 conicto +685 1543 786 1501 conicto +844 1479 1128 1400 conicto +1537 1288 1700 1216 conicto +1863 1145 1955 1009 conicto +2048 874 2048 672 conicto +2048 475 1934 300 conicto +1820 126 1604 31 conicto +1389 -64 1116 -64 conicto +665 -64 429 124 conicto +193 313 127 682 conicto +end_ol grestore +gsave 14.896333 16.500000 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +320 0 moveto +320 2304 lineto +719 2304 lineto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 15.031800 16.500000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 15.362000 16.500000 translate 0.035278 -0.035278 scale +start_ol +204 -201 moveto +583 -259 lineto +607 -441 714 -525 conicto +859 -637 1109 -637 conicto +1379 -637 1526 -526 conicto +1673 -415 1724 -215 conicto +1755 -93 1755 298 conicto +1500 -3 1120 -3 conicto +646 -3 387 342 conicto +128 687 128 1169 conicto +128 1501 247 1781 conicto +366 2062 591 2215 conicto +817 2368 1122 2368 conicto +1528 2368 1792 2038 conicto +1792 2304 lineto +2176 2304 lineto +2176 297 lineto +2176 -245 2066 -471 conicto +1956 -697 1717 -828 conicto +1479 -960 1130 -960 conicto +714 -960 459 -771 conicto +204 -582 204 -201 conicto +527 1198 moveto +527 740 707 530 conicto +887 320 1158 320 conicto +1427 320 1609 529 conicto +1792 738 1792 1185 conicto +1792 1611 1604 1828 conicto +1417 2045 1151 2045 conicto +891 2045 709 1831 conicto +527 1618 527 1198 conicto +end_ol grestore +gsave 15.692200 16.500000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 3200 lineto +655 3200 lineto +655 0 lineto +256 0 lineto +end_ol grestore +gsave 15.819200 16.500000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 14.700000 18.250000 translate 0.035278 -0.035278 scale +start_ol +384 0 moveto +384 1984 lineto +64 1984 lineto +64 2307 lineto +384 2307 lineto +384 2552 lineto +384 2785 425 2889 conicto +481 3029 622 3116 conicto +764 3203 1018 3203 conicto +1182 3203 1380 3168 conicto +1322 2858 lineto +1201 2880 1096 2880 conicto +925 2880 854 2804 conicto +783 2728 783 2520 conicto +783 2307 lineto +1216 2307 lineto +1216 1984 lineto +783 1984 lineto +783 0 lineto +384 0 lineto +end_ol grestore +gsave 14.860867 18.250000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 3200 lineto +655 3200 lineto +655 0 lineto +256 0 lineto +end_ol grestore +gsave 14.987867 18.250000 translate 0.035278 -0.035278 scale +start_ol +128 1152 moveto +128 1798 479 2109 conicto +771 2368 1192 2368 conicto +1661 2368 1958 2053 conicto +2255 1739 2255 1184 conicto +2255 735 2123 477 conicto +1992 220 1740 78 conicto +1489 -64 1192 -64 conicto +715 -64 421 249 conicto +128 562 128 1152 conicto +527 1154 moveto +527 705 716 482 conicto +905 259 1192 259 conicto +1478 259 1667 483 conicto +1856 707 1856 1167 conicto +1856 1599 1666 1822 conicto +1476 2045 1192 2045 conicto +905 2045 716 1823 conicto +527 1601 527 1154 conicto +end_ol grestore +gsave 15.309600 18.250000 translate 0.035278 -0.035278 scale +start_ol +1746 289 moveto +1529 102 1331 19 conicto +1133 -64 905 -64 conicto +530 -64 329 124 conicto +128 312 128 605 conicto +128 777 203 919 conicto +278 1062 399 1148 conicto +521 1234 672 1278 conicto +785 1309 1017 1337 conicto +1490 1394 1713 1472 conicto +1713 1553 1713 1575 conicto +1713 1814 1603 1912 conicto +1453 2045 1158 2045 conicto +884 2045 753 1948 conicto +622 1851 560 1605 conicto +192 1657 lineto +243 1902 362 2053 conicto +481 2204 705 2286 conicto +930 2368 1225 2368 conicto +1519 2368 1702 2298 conicto +1886 2229 1972 2124 conicto +2058 2019 2093 1858 conicto +2112 1758 2112 1496 conicto +2112 973 lineto +2112 427 2137 281 conicto +2162 135 2235 0 conicto +1825 0 lineto +1763 123 1746 289 conicto +1713 1165 moveto +1501 1078 1076 1017 conicto +835 982 735 938 conicto +635 895 581 811 conicto +527 727 527 624 conicto +527 468 645 363 conicto +763 259 991 259 conicto +1216 259 1391 358 conicto +1567 457 1650 630 conicto +1713 762 1713 1021 conicto +1713 1165 lineto +end_ol grestore +gsave 15.631333 18.250000 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +gsave 15.792200 18.250000 translate 0.035278 -0.035278 scale +start_ol +-64 -896 moveto +-64 -640 lineto +2496 -640 lineto +2496 -896 lineto +-64 -896 lineto +end_ol grestore +gsave 14.650000 19.950000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 3200 lineto +655 3200 lineto +655 0 lineto +256 0 lineto +end_ol grestore +gsave 14.777000 19.950000 translate 0.035278 -0.035278 scale +start_ol +128 1152 moveto +128 1798 479 2109 conicto +771 2368 1192 2368 conicto +1661 2368 1958 2053 conicto +2255 1739 2255 1184 conicto +2255 735 2123 477 conicto +1992 220 1740 78 conicto +1489 -64 1192 -64 conicto +715 -64 421 249 conicto +128 562 128 1152 conicto +527 1154 moveto +527 705 716 482 conicto +905 259 1192 259 conicto +1478 259 1667 483 conicto +1856 707 1856 1167 conicto +1856 1599 1666 1822 conicto +1476 2045 1192 2045 conicto +905 2045 716 1823 conicto +527 1601 527 1154 conicto +end_ol grestore +gsave 15.098733 19.950000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 15.428933 19.950000 translate 0.035278 -0.035278 scale +start_ol +204 -201 moveto +583 -259 lineto +607 -441 714 -525 conicto +859 -637 1109 -637 conicto +1379 -637 1526 -526 conicto +1673 -415 1724 -215 conicto +1755 -93 1755 298 conicto +1500 -3 1120 -3 conicto +646 -3 387 342 conicto +128 687 128 1169 conicto +128 1501 247 1781 conicto +366 2062 591 2215 conicto +817 2368 1122 2368 conicto +1528 2368 1792 2038 conicto +1792 2304 lineto +2176 2304 lineto +2176 297 lineto +2176 -245 2066 -471 conicto +1956 -697 1717 -828 conicto +1479 -960 1130 -960 conicto +714 -960 459 -771 conicto +204 -582 204 -201 conicto +527 1198 moveto +527 740 707 530 conicto +887 320 1158 320 conicto +1427 320 1609 529 conicto +1792 738 1792 1185 conicto +1792 1611 1604 1828 conicto +1417 2045 1151 2045 conicto +891 2045 709 1831 conicto +527 1618 527 1198 conicto +end_ol grestore +gsave 15.759133 19.950000 translate 0.035278 -0.035278 scale +start_ol +384 0 moveto +384 1984 lineto +64 1984 lineto +64 2307 lineto +384 2307 lineto +384 2552 lineto +384 2785 425 2889 conicto +481 3029 622 3116 conicto +764 3203 1018 3203 conicto +1182 3203 1380 3168 conicto +1322 2858 lineto +1201 2880 1096 2880 conicto +925 2880 854 2804 conicto +783 2728 783 2520 conicto +783 2307 lineto +1216 2307 lineto +1216 1984 lineto +783 1984 lineto +783 0 lineto +384 0 lineto +end_ol grestore +gsave 15.920000 19.950000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 3200 lineto +655 3200 lineto +655 0 lineto +256 0 lineto +end_ol grestore +gsave 16.047000 19.950000 translate 0.035278 -0.035278 scale +start_ol +128 1152 moveto +128 1798 479 2109 conicto +771 2368 1192 2368 conicto +1661 2368 1958 2053 conicto +2255 1739 2255 1184 conicto +2255 735 2123 477 conicto +1992 220 1740 78 conicto +1489 -64 1192 -64 conicto +715 -64 421 249 conicto +128 562 128 1152 conicto +527 1154 moveto +527 705 716 482 conicto +905 259 1192 259 conicto +1478 259 1667 483 conicto +1856 707 1856 1167 conicto +1856 1599 1666 1822 conicto +1476 2045 1192 2045 conicto +905 2045 716 1823 conicto +527 1601 527 1154 conicto +end_ol grestore +gsave 16.368733 19.950000 translate 0.035278 -0.035278 scale +start_ol +1746 289 moveto +1529 102 1331 19 conicto +1133 -64 905 -64 conicto +530 -64 329 124 conicto +128 312 128 605 conicto +128 777 203 919 conicto +278 1062 399 1148 conicto +521 1234 672 1278 conicto +785 1309 1017 1337 conicto +1490 1394 1713 1472 conicto +1713 1553 1713 1575 conicto +1713 1814 1603 1912 conicto +1453 2045 1158 2045 conicto +884 2045 753 1948 conicto +622 1851 560 1605 conicto +192 1657 lineto +243 1902 362 2053 conicto +481 2204 705 2286 conicto +930 2368 1225 2368 conicto +1519 2368 1702 2298 conicto +1886 2229 1972 2124 conicto +2058 2019 2093 1858 conicto +2112 1758 2112 1496 conicto +2112 973 lineto +2112 427 2137 281 conicto +2162 135 2235 0 conicto +1825 0 lineto +1763 123 1746 289 conicto +1713 1165 moveto +1501 1078 1076 1017 conicto +835 982 735 938 conicto +635 895 581 811 conicto +527 727 527 624 conicto +527 468 645 363 conicto +763 259 991 259 conicto +1216 259 1391 358 conicto +1567 457 1650 630 conicto +1713 762 1713 1021 conicto +1713 1165 lineto +end_ol grestore +gsave 16.690467 19.950000 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 14.998100 l 3.513197 14.998100 l s +[] 0 sd +0 slj +0 slc +n 3.888197 14.998100 m 3.388197 15.248100 l 3.513197 14.998100 l 3.388197 14.748100 l ef +n 3.888197 14.998100 m 3.388197 15.248100 l 3.513197 14.998100 l 3.388197 14.748100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 16.748100 l 3.513197 16.748100 l s +[] 0 sd +0 slj +0 slc +n 3.888197 16.748100 m 3.388197 16.998100 l 3.513197 16.748100 l 3.388197 16.498100 l ef +n 3.888197 16.748100 m 3.388197 16.998100 l 3.513197 16.748100 l 3.388197 16.498100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 18.498100 l 3.513197 18.498100 l s +[] 0 sd +0 slj +0 slc +n 3.888197 18.498100 m 3.388197 18.748100 l 3.513197 18.498100 l 3.388197 18.248100 l ef +n 3.888197 18.498100 m 3.388197 18.748100 l 3.513197 18.498100 l 3.388197 18.248100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 20.248100 l 3.513197 20.248100 l s +[] 0 sd +0 slj +0 slc +n 3.888197 20.248100 m 3.388197 20.498100 l 3.513197 20.248100 l 3.388197 19.998100 l ef +n 3.888197 20.248100 m 3.388197 20.498100 l 3.513197 20.248100 l 3.388197 19.998100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 21.998100 l 3.513197 21.998100 l s +[] 0 sd +0 slj +0 slc +n 3.888197 21.998100 m 3.388197 22.248100 l 3.513197 21.998100 l 3.388197 21.748100 l ef +n 3.888197 21.998100 m 3.388197 22.248100 l 3.513197 21.998100 l 3.388197 21.748100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 14.998100 l 8.763197 14.998100 l s +[] 0 sd +0 slj +0 slc +n 9.138197 14.998100 m 8.638197 15.248100 l 8.763197 14.998100 l 8.638197 14.748100 l ef +n 9.138197 14.998100 m 8.638197 15.248100 l 8.763197 14.998100 l 8.638197 14.748100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 16.748100 l 8.763197 16.748100 l s +[] 0 sd +0 slj +0 slc +n 9.138197 16.748100 m 8.638197 16.998100 l 8.763197 16.748100 l 8.638197 16.498100 l ef +n 9.138197 16.748100 m 8.638197 16.998100 l 8.763197 16.748100 l 8.638197 16.498100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 18.498100 l 8.763197 18.498100 l s +[] 0 sd +0 slj +0 slc +n 9.138197 18.498100 m 8.638197 18.748100 l 8.763197 18.498100 l 8.638197 18.248100 l ef +n 9.138197 18.498100 m 8.638197 18.748100 l 8.763197 18.498100 l 8.638197 18.248100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 20.248100 l 8.763197 20.248100 l s +[] 0 sd +0 slj +0 slc +n 9.138197 20.248100 m 8.638197 20.498100 l 8.763197 20.248100 l 8.638197 19.998100 l ef +n 9.138197 20.248100 m 8.638197 20.498100 l 8.763197 20.248100 l 8.638197 19.998100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 21.998100 l 8.763197 21.998100 l s +[] 0 sd +0 slj +0 slc +n 9.138197 21.998100 m 8.638197 22.248100 l 8.763197 21.998100 l 8.638197 21.748100 l ef +n 9.138197 21.998100 m 8.638197 22.248100 l 8.763197 21.998100 l 8.638197 21.748100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 14.178700 13.000000 m 14.178700 14.000000 l 13.178700 14.000000 l 13.178700 16.248100 l 13.713197 16.248100 l s +[] 0 sd +0 slj +0 slc +n 14.088197 16.248100 m 13.588197 16.498100 l 13.713197 16.248100 l 13.588197 15.998100 l ef +n 14.088197 16.248100 m 13.588197 16.498100 l 13.713197 16.248100 l 13.588197 15.998100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 14.178700 13.000000 m 14.178700 14.000000 l 13.178700 14.000000 l 13.178700 17.998100 l 13.713197 17.998100 l s +[] 0 sd +0 slj +0 slc +n 14.088197 17.998100 m 13.588197 18.248100 l 13.713197 17.998100 l 13.588197 17.748100 l ef +n 14.088197 17.998100 m 13.588197 18.248100 l 13.713197 17.998100 l 13.588197 17.748100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 14.178700 13.000000 m 14.178700 14.000000 l 13.178700 14.000000 l 13.178700 19.748100 l 13.713197 19.748100 l s +[] 0 sd +0 slj +0 slc +n 14.088197 19.748100 m 13.588197 19.998100 l 13.713197 19.748100 l 13.588197 19.498100 l ef +n 14.088197 19.748100 m 13.588197 19.998100 l 13.713197 19.748100 l 13.588197 19.498100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 18.963700 13.052400 m 18.963700 14.052400 l 17.963700 14.052400 l 17.963700 16.248100 l 18.713197 16.248100 l s +[] 0 sd +0 slj +0 slc +n 19.088197 16.248100 m 18.588197 16.498100 l 18.713197 16.248100 l 18.588197 15.998100 l ef +n 19.088197 16.248100 m 18.588197 16.498100 l 18.713197 16.248100 l 18.588197 15.998100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 18.963700 13.052400 m 18.963700 14.052400 l 17.963700 14.052400 l 17.963700 17.998100 l 18.713197 17.998100 l s +[] 0 sd +0 slj +0 slc +n 19.088197 17.998100 m 18.588197 18.248100 l 18.713197 17.998100 l 18.588197 17.748100 l ef +n 19.088197 17.998100 m 18.588197 18.248100 l 18.713197 17.998100 l 18.588197 17.748100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 18.963700 13.052400 m 18.963700 14.052400 l 17.963700 14.052400 l 17.963700 19.748100 l 18.713197 19.748100 l s +[] 0 sd +0 slj +0 slc +n 19.088197 19.748100 m 18.588197 19.998100 l 18.713197 19.748100 l 18.588197 19.498100 l ef +n 19.088197 19.748100 m 18.588197 19.998100 l 18.713197 19.748100 l 18.588197 19.498100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 22.928800 11.000000 m 22.928800 12.498100 l 24.013197 12.498100 l s +[] 0 sd +0 slj +0 slc +n 24.388197 12.498100 m 23.888197 12.748100 l 24.013197 12.498100 l 23.888197 12.248100 l ef +n 24.388197 12.498100 m 23.888197 12.748100 l 24.013197 12.498100 l 23.888197 12.248100 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 22.928800 11.000000 m 22.928800 14.248100 l 24.013197 14.248100 l s +[] 0 sd +0 slj +0 slc +n 24.388197 14.248100 m 23.888197 14.498100 l 24.013197 14.248100 l 23.888197 13.998100 l ef +n 24.388197 14.248100 m 23.888197 14.498100 l 24.013197 14.248100 l 23.888197 13.998100 l cp s +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 24.500000 11.750000 m 24.500000 13.246250 l 27.357500 13.246250 l 27.357500 11.750000 l cp s +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 24.500000 13.500000 m 24.500000 14.996250 l 27.357500 14.996250 l 27.357500 13.500000 l cp s +gsave 24.800000 14.500000 translate 0.035278 -0.035278 scale +start_ol +1792 0 moveto +1792 314 lineto +1521 -64 1053 -64 conicto +847 -64 668 11 conicto +489 87 402 201 conicto +316 316 280 490 conicto +256 606 256 859 conicto +256 2304 lineto +655 2304 lineto +655 1010 lineto +655 701 679 593 conicto +717 437 837 348 conicto +957 259 1135 259 conicto +1312 259 1467 350 conicto +1622 441 1686 598 conicto +1751 755 1751 1054 conicto +1751 2304 lineto +2112 2304 lineto +2112 0 lineto +1792 0 lineto +end_ol grestore +gsave 25.121733 14.500000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 25.451933 14.500000 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +320 0 moveto +320 2304 lineto +719 2304 lineto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 25.587400 14.500000 translate 0.035278 -0.035278 scale +start_ol +1806 840 moveto +2188 790 lineto +2125 389 1867 162 conicto +1610 -64 1234 -64 conicto +764 -64 478 248 conicto +192 560 192 1143 conicto +192 1520 315 1802 conicto +438 2085 689 2226 conicto +941 2368 1236 2368 conicto +1610 2368 1847 2176 conicto +2084 1985 2151 1633 conicto +1774 1573 lineto +1720 1808 1583 1926 conicto +1446 2045 1251 2045 conicto +958 2045 774 1831 conicto +591 1617 591 1155 conicto +591 685 768 472 conicto +945 259 1230 259 conicto +1458 259 1611 401 conicto +1765 544 1806 840 conicto +end_ol grestore +gsave 25.883733 14.500000 translate 0.035278 -0.035278 scale +start_ol +128 1152 moveto +128 1798 479 2109 conicto +771 2368 1192 2368 conicto +1661 2368 1958 2053 conicto +2255 1739 2255 1184 conicto +2255 735 2123 477 conicto +1992 220 1740 78 conicto +1489 -64 1192 -64 conicto +715 -64 421 249 conicto +128 562 128 1152 conicto +527 1154 moveto +527 705 716 482 conicto +905 259 1192 259 conicto +1478 259 1667 483 conicto +1856 707 1856 1167 conicto +1856 1599 1666 1822 conicto +1476 2045 1192 2045 conicto +905 2045 716 1823 conicto +527 1601 527 1154 conicto +end_ol grestore +gsave 26.205467 14.500000 translate 0.035278 -0.035278 scale +start_ol +1752 0 moveto +1752 281 lineto +1534 -64 1112 -64 conicto +838 -64 609 89 conicto +380 243 254 517 conicto +128 792 128 1149 conicto +128 1498 242 1782 conicto +357 2066 585 2217 conicto +813 2368 1095 2368 conicto +1302 2368 1463 2280 conicto +1625 2192 1726 2052 conicto +1726 3200 lineto +2127 3200 lineto +2127 0 lineto +1752 0 lineto +527 1150 moveto +527 703 711 481 conicto +896 259 1146 259 conicto +1399 259 1575 471 conicto +1752 683 1752 1118 conicto +1752 1597 1572 1821 conicto +1392 2045 1129 2045 conicto +872 2045 699 1829 conicto +527 1614 527 1150 conicto +end_ol grestore +gsave 26.527200 14.500000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 26.857400 14.500000 translate 0.035278 -0.035278 scale +start_ol +-64 -896 moveto +-64 -640 lineto +2496 -640 lineto +2496 -896 lineto +-64 -896 lineto +end_ol grestore +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 19.200000 15.500000 m 19.200000 16.996250 l 22.057500 16.996250 l 22.057500 15.500000 l cp s +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 19.200000 17.250000 m 19.200000 18.746250 l 22.057500 18.746250 l 22.057500 17.250000 l cp s +0.095250 slw +[] 0 sd +[] 0 sd +0 slj +n 19.200000 19.000000 m 19.200000 20.496250 l 22.700000 20.496250 l 22.700000 19.000000 l cp s +gsave 19.650000 16.500000 translate 0.035278 -0.035278 scale +start_ol +1806 840 moveto +2188 790 lineto +2125 389 1867 162 conicto +1610 -64 1234 -64 conicto +764 -64 478 248 conicto +192 560 192 1143 conicto +192 1520 315 1802 conicto +438 2085 689 2226 conicto +941 2368 1236 2368 conicto +1610 2368 1847 2176 conicto +2084 1985 2151 1633 conicto +1774 1573 lineto +1720 1808 1583 1926 conicto +1446 2045 1251 2045 conicto +958 2045 774 1831 conicto +591 1617 591 1155 conicto +591 685 768 472 conicto +945 259 1230 259 conicto +1458 259 1611 401 conicto +1765 544 1806 840 conicto +end_ol grestore +gsave 19.946333 16.500000 translate 0.035278 -0.035278 scale +start_ol +127 682 moveto +531 744 lineto +566 509 713 384 conicto +861 259 1125 259 conicto +1391 259 1520 370 conicto +1649 481 1649 630 conicto +1649 764 1536 841 conicto +1456 893 1140 974 conicto +715 1084 542 1164 conicto +370 1244 281 1385 conicto +192 1527 192 1698 conicto +192 1853 266 1986 conicto +341 2119 469 2207 conicto +566 2274 722 2321 conicto +878 2368 1057 2368 conicto +1325 2368 1528 2289 conicto +1732 2211 1828 2076 conicto +1925 1941 1962 1716 conicto +1582 1663 lineto +1557 1843 1433 1944 conicto +1310 2045 1085 2045 conicto +819 2045 705 1955 conicto +591 1865 591 1744 conicto +591 1668 638 1606 conicto +685 1543 786 1501 conicto +844 1479 1128 1400 conicto +1537 1288 1700 1216 conicto +1863 1145 1955 1009 conicto +2048 874 2048 672 conicto +2048 475 1934 300 conicto +1820 126 1604 31 conicto +1389 -64 1116 -64 conicto +665 -64 429 124 conicto +193 313 127 682 conicto +end_ol grestore +gsave 20.242667 16.500000 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +320 0 moveto +320 2304 lineto +719 2304 lineto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 20.378133 16.500000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 20.708333 16.500000 translate 0.035278 -0.035278 scale +start_ol +204 -201 moveto +583 -259 lineto +607 -441 714 -525 conicto +859 -637 1109 -637 conicto +1379 -637 1526 -526 conicto +1673 -415 1724 -215 conicto +1755 -93 1755 298 conicto +1500 -3 1120 -3 conicto +646 -3 387 342 conicto +128 687 128 1169 conicto +128 1501 247 1781 conicto +366 2062 591 2215 conicto +817 2368 1122 2368 conicto +1528 2368 1792 2038 conicto +1792 2304 lineto +2176 2304 lineto +2176 297 lineto +2176 -245 2066 -471 conicto +1956 -697 1717 -828 conicto +1479 -960 1130 -960 conicto +714 -960 459 -771 conicto +204 -582 204 -201 conicto +527 1198 moveto +527 740 707 530 conicto +887 320 1158 320 conicto +1427 320 1609 529 conicto +1792 738 1792 1185 conicto +1792 1611 1604 1828 conicto +1417 2045 1151 2045 conicto +891 2045 709 1831 conicto +527 1618 527 1198 conicto +end_ol grestore +gsave 21.038533 16.500000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 3200 lineto +655 3200 lineto +655 0 lineto +256 0 lineto +end_ol grestore +gsave 21.165533 16.500000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 19.529300 18.250000 translate 0.035278 -0.035278 scale +start_ol +1806 840 moveto +2188 790 lineto +2125 389 1867 162 conicto +1610 -64 1234 -64 conicto +764 -64 478 248 conicto +192 560 192 1143 conicto +192 1520 315 1802 conicto +438 2085 689 2226 conicto +941 2368 1236 2368 conicto +1610 2368 1847 2176 conicto +2084 1985 2151 1633 conicto +1774 1573 lineto +1720 1808 1583 1926 conicto +1446 2045 1251 2045 conicto +958 2045 774 1831 conicto +591 1617 591 1155 conicto +591 685 768 472 conicto +945 259 1230 259 conicto +1458 259 1611 401 conicto +1765 544 1806 840 conicto +end_ol grestore +gsave 19.825633 18.250000 translate 0.035278 -0.035278 scale +start_ol +128 1152 moveto +128 1798 479 2109 conicto +771 2368 1192 2368 conicto +1661 2368 1958 2053 conicto +2255 1739 2255 1184 conicto +2255 735 2123 477 conicto +1992 220 1740 78 conicto +1489 -64 1192 -64 conicto +715 -64 421 249 conicto +128 562 128 1152 conicto +527 1154 moveto +527 705 716 482 conicto +905 259 1192 259 conicto +1478 259 1667 483 conicto +1856 707 1856 1167 conicto +1856 1599 1666 1822 conicto +1476 2045 1192 2045 conicto +905 2045 716 1823 conicto +527 1601 527 1154 conicto +end_ol grestore +gsave 20.147367 18.250000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2008 lineto +749 2165 930 2266 conicto +1112 2368 1344 2368 conicto +1602 2368 1767 2263 conicto +1932 2159 2001 1979 conicto +2280 2368 2728 2368 conicto +3079 2368 3267 2177 conicto +3456 1986 3456 1589 conicto +3456 0 lineto +3057 0 lineto +3057 1471 lineto +3057 1709 3018 1813 conicto +2979 1918 2877 1981 conicto +2775 2045 2638 2045 conicto +2390 2045 2226 1881 conicto +2063 1717 2063 1357 conicto +2063 0 lineto +1664 0 lineto +1664 1517 lineto +1664 1781 1568 1913 conicto +1472 2045 1254 2045 conicto +1088 2045 947 1957 conicto +807 1869 744 1699 conicto +681 1530 681 1212 conicto +681 0 lineto +320 0 lineto +end_ol grestore +gsave 20.638433 18.250000 translate 0.035278 -0.035278 scale +start_ol +320 -896 moveto +320 2304 lineto +704 2304 lineto +704 1999 lineto +827 2178 981 2273 conicto +1136 2368 1355 2368 conicto +1641 2368 1860 2214 conicto +2080 2060 2192 1781 conicto +2304 1502 2304 1169 conicto +2304 812 2181 526 conicto +2058 241 1822 88 conicto +1586 -64 1327 -64 conicto +1137 -64 986 19 conicto +835 102 739 228 conicto +739 -896 lineto +320 -896 lineto +704 1132 moveto +704 686 877 472 conicto +1050 259 1297 259 conicto +1548 259 1726 480 conicto +1905 701 1905 1164 conicto +1905 1606 1731 1825 conicto +1557 2045 1314 2045 conicto +1074 2045 889 1811 conicto +704 1577 704 1132 conicto +end_ol grestore +gsave 20.968633 18.250000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 3200 lineto +655 3200 lineto +655 0 lineto +256 0 lineto +end_ol grestore +gsave 21.095633 18.250000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 21.425833 18.250000 translate 0.035278 -0.035278 scale +start_ol +32 0 moveto +870 1198 lineto +95 2304 lineto +581 2304 lineto +932 1763 lineto +1032 1610 1092 1506 conicto +1187 1649 1267 1759 conicto +1653 2304 lineto +2117 2304 lineto +1325 1219 lineto +2178 0 lineto +1701 0 lineto +1230 716 lineto +1105 909 lineto +503 0 lineto +32 0 lineto +end_ol grestore +gsave 21.722167 18.250000 translate 0.035278 -0.035278 scale +start_ol +-64 -896 moveto +-64 -640 lineto +2496 -640 lineto +2496 -896 lineto +-64 -896 lineto +end_ol grestore +gsave 19.550000 20.000000 translate 0.035278 -0.035278 scale +start_ol +1806 840 moveto +2188 790 lineto +2125 389 1867 162 conicto +1610 -64 1234 -64 conicto +764 -64 478 248 conicto +192 560 192 1143 conicto +192 1520 315 1802 conicto +438 2085 689 2226 conicto +941 2368 1236 2368 conicto +1610 2368 1847 2176 conicto +2084 1985 2151 1633 conicto +1774 1573 lineto +1720 1808 1583 1926 conicto +1446 2045 1251 2045 conicto +958 2045 774 1831 conicto +591 1617 591 1155 conicto +591 685 768 472 conicto +945 259 1230 259 conicto +1458 259 1611 401 conicto +1765 544 1806 840 conicto +end_ol grestore +gsave 19.846333 20.000000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 3200 lineto +655 3200 lineto +655 0 lineto +256 0 lineto +end_ol grestore +gsave 19.973333 20.000000 translate 0.035278 -0.035278 scale +start_ol +128 1152 moveto +128 1798 479 2109 conicto +771 2368 1192 2368 conicto +1661 2368 1958 2053 conicto +2255 1739 2255 1184 conicto +2255 735 2123 477 conicto +1992 220 1740 78 conicto +1489 -64 1192 -64 conicto +715 -64 421 249 conicto +128 562 128 1152 conicto +527 1154 moveto +527 705 716 482 conicto +905 259 1192 259 conicto +1478 259 1667 483 conicto +1856 707 1856 1167 conicto +1856 1599 1666 1822 conicto +1476 2045 1192 2045 conicto +905 2045 716 1823 conicto +527 1601 527 1154 conicto +end_ol grestore +gsave 20.295067 20.000000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 20.625267 20.000000 translate 0.035278 -0.035278 scale +start_ol +204 -201 moveto +583 -259 lineto +607 -441 714 -525 conicto +859 -637 1109 -637 conicto +1379 -637 1526 -526 conicto +1673 -415 1724 -215 conicto +1755 -93 1755 298 conicto +1500 -3 1120 -3 conicto +646 -3 387 342 conicto +128 687 128 1169 conicto +128 1501 247 1781 conicto +366 2062 591 2215 conicto +817 2368 1122 2368 conicto +1528 2368 1792 2038 conicto +1792 2304 lineto +2176 2304 lineto +2176 297 lineto +2176 -245 2066 -471 conicto +1956 -697 1717 -828 conicto +1479 -960 1130 -960 conicto +714 -960 459 -771 conicto +204 -582 204 -201 conicto +527 1198 moveto +527 740 707 530 conicto +887 320 1158 320 conicto +1427 320 1609 529 conicto +1792 738 1792 1185 conicto +1792 1611 1604 1828 conicto +1417 2045 1151 2045 conicto +891 2045 709 1831 conicto +527 1618 527 1198 conicto +end_ol grestore +gsave 20.955467 20.000000 translate 0.035278 -0.035278 scale +start_ol +384 0 moveto +384 1984 lineto +64 1984 lineto +64 2307 lineto +384 2307 lineto +384 2552 lineto +384 2785 425 2889 conicto +481 3029 622 3116 conicto +764 3203 1018 3203 conicto +1182 3203 1380 3168 conicto +1322 2858 lineto +1201 2880 1096 2880 conicto +925 2880 854 2804 conicto +783 2728 783 2520 conicto +783 2307 lineto +1216 2307 lineto +1216 1984 lineto +783 1984 lineto +783 0 lineto +384 0 lineto +end_ol grestore +gsave 21.116333 20.000000 translate 0.035278 -0.035278 scale +start_ol +256 0 moveto +256 3200 lineto +655 3200 lineto +655 0 lineto +256 0 lineto +end_ol grestore +gsave 21.243333 20.000000 translate 0.035278 -0.035278 scale +start_ol +128 1152 moveto +128 1798 479 2109 conicto +771 2368 1192 2368 conicto +1661 2368 1958 2053 conicto +2255 1739 2255 1184 conicto +2255 735 2123 477 conicto +1992 220 1740 78 conicto +1489 -64 1192 -64 conicto +715 -64 421 249 conicto +128 562 128 1152 conicto +527 1154 moveto +527 705 716 482 conicto +905 259 1192 259 conicto +1478 259 1667 483 conicto +1856 707 1856 1167 conicto +1856 1599 1666 1822 conicto +1476 2045 1192 2045 conicto +905 2045 716 1823 conicto +527 1601 527 1154 conicto +end_ol grestore +gsave 21.565067 20.000000 translate 0.035278 -0.035278 scale +start_ol +1746 289 moveto +1529 102 1331 19 conicto +1133 -64 905 -64 conicto +530 -64 329 124 conicto +128 312 128 605 conicto +128 777 203 919 conicto +278 1062 399 1148 conicto +521 1234 672 1278 conicto +785 1309 1017 1337 conicto +1490 1394 1713 1472 conicto +1713 1553 1713 1575 conicto +1713 1814 1603 1912 conicto +1453 2045 1158 2045 conicto +884 2045 753 1948 conicto +622 1851 560 1605 conicto +192 1657 lineto +243 1902 362 2053 conicto +481 2204 705 2286 conicto +930 2368 1225 2368 conicto +1519 2368 1702 2298 conicto +1886 2229 1972 2124 conicto +2058 2019 2093 1858 conicto +2112 1758 2112 1496 conicto +2112 973 lineto +2112 427 2137 281 conicto +2162 135 2235 0 conicto +1825 0 lineto +1763 123 1746 289 conicto +1713 1165 moveto +1501 1078 1076 1017 conicto +835 982 735 938 conicto +635 895 581 811 conicto +527 727 527 624 conicto +527 468 645 363 conicto +763 259 991 259 conicto +1216 259 1391 358 conicto +1567 457 1650 630 conicto +1713 762 1713 1021 conicto +1713 1165 lineto +end_ol grestore +gsave 21.886800 20.000000 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 6.000000 10.250000 m 4.876190 10.250000 l 4.876190 11.013197 l s +[] 0 sd +0 slj +0 slc +n 4.876190 11.388197 m 4.626190 10.888197 l 4.876190 11.013197 l 5.126190 10.888197 l ef +n 4.876190 11.388197 m 4.626190 10.888197 l 4.876190 11.013197 l 5.126190 10.888197 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 8.750000 10.250000 m 9.926190 10.250000 l 9.926190 11.013197 l s +[] 0 sd +0 slj +0 slc +n 9.926190 11.388197 m 9.676190 10.888197 l 9.926190 11.013197 l 10.176190 10.888197 l ef +n 9.926190 11.388197 m 9.676190 10.888197 l 9.926190 11.013197 l 10.176190 10.888197 l cp s +0.095250 slw +[1.000000] 0 sd +[0.127000] 0 sd +0 slj +n 15.202400 9.535000 m 15.202400 11.102375 l 17.752400 11.102375 l 17.752400 9.535000 l cp s +gsave 15.555000 10.535000 translate 0.035278 -0.035278 scale +start_ol +320 2752 moveto +320 3200 lineto +719 3200 lineto +719 2752 lineto +320 2752 lineto +320 0 moveto +320 2304 lineto +719 2304 lineto +719 0 lineto +320 0 lineto +end_ol grestore +gsave 15.690467 10.535000 translate 0.035278 -0.035278 scale +start_ol +320 0 moveto +320 2304 lineto +640 2304 lineto +640 2003 lineto +898 2368 1387 2368 conicto +1600 2368 1778 2292 conicto +1956 2217 2045 2095 conicto +2134 1973 2168 1805 conicto +2191 1696 2191 1424 conicto +2191 0 lineto +1792 0 lineto +1792 1421 lineto +1792 1662 1746 1782 conicto +1700 1903 1581 1974 conicto +1463 2045 1303 2045 conicto +1048 2045 863 1884 conicto +679 1724 679 1275 conicto +679 0 lineto +320 0 lineto +end_ol grestore +gsave 16.020667 10.535000 translate 0.035278 -0.035278 scale +start_ol +1877 721 moveto +2278 672 lineto +2184 322 1928 129 conicto +1673 -64 1277 -64 conicto +777 -64 484 250 conicto +192 564 192 1132 conicto +192 1719 487 2043 conicto +782 2368 1254 2368 conicto +1710 2368 1999 2043 conicto +2289 1719 2289 1132 conicto +2289 1096 2289 1024 conicto +591 1024 lineto +591 654 784 456 conicto +978 259 1268 259 conicto +1484 259 1636 369 conicto +1788 479 1877 721 conicto +610 1347 moveto +1881 1347 lineto +1855 1654 1734 1807 conicto +1549 2045 1251 2045 conicto +979 2045 794 1855 conicto +610 1665 610 1347 conicto +end_ol grestore +gsave 16.350867 10.535000 translate 0.035278 -0.035278 scale +start_ol +32 0 moveto +870 1198 lineto +95 2304 lineto +581 2304 lineto +932 1763 lineto +1032 1610 1092 1506 conicto +1187 1649 1267 1759 conicto +1653 2304 lineto +2117 2304 lineto +1325 1219 lineto +2178 0 lineto +1701 0 lineto +1230 716 lineto +1105 909 lineto +503 0 lineto +32 0 lineto +end_ol grestore +gsave 16.647200 10.535000 translate 0.035278 -0.035278 scale +start_ol +1746 289 moveto +1529 102 1331 19 conicto +1133 -64 905 -64 conicto +530 -64 329 124 conicto +128 312 128 605 conicto +128 777 203 919 conicto +278 1062 399 1148 conicto +521 1234 672 1278 conicto +785 1309 1017 1337 conicto +1490 1394 1713 1472 conicto +1713 1553 1713 1575 conicto +1713 1814 1603 1912 conicto +1453 2045 1158 2045 conicto +884 2045 753 1948 conicto +622 1851 560 1605 conicto +192 1657 lineto +243 1902 362 2053 conicto +481 2204 705 2286 conicto +930 2368 1225 2368 conicto +1519 2368 1702 2298 conicto +1886 2229 1972 2124 conicto +2058 2019 2093 1858 conicto +2112 1758 2112 1496 conicto +2112 973 lineto +2112 427 2137 281 conicto +2162 135 2235 0 conicto +1825 0 lineto +1763 123 1746 289 conicto +1713 1165 moveto +1501 1078 1076 1017 conicto +835 982 735 938 conicto +635 895 581 811 conicto +527 727 527 624 conicto +527 468 645 363 conicto +763 259 991 259 conicto +1216 259 1391 358 conicto +1567 457 1650 630 conicto +1713 762 1713 1021 conicto +1713 1165 lineto +end_ol grestore +gsave 16.968933 10.535000 translate 0.035278 -0.035278 scale +start_ol +1806 840 moveto +2188 790 lineto +2125 389 1867 162 conicto +1610 -64 1234 -64 conicto +764 -64 478 248 conicto +192 560 192 1143 conicto +192 1520 315 1802 conicto +438 2085 689 2226 conicto +941 2368 1236 2368 conicto +1610 2368 1847 2176 conicto +2084 1985 2151 1633 conicto +1774 1573 lineto +1720 1808 1583 1926 conicto +1446 2045 1251 2045 conicto +958 2045 774 1831 conicto +591 1617 591 1155 conicto +591 685 768 472 conicto +945 259 1230 259 conicto +1458 259 1611 401 conicto +1765 544 1806 840 conicto +end_ol grestore +gsave 17.265267 10.535000 translate 0.035278 -0.035278 scale +start_ol +1152 399 moveto +1209 37 lineto +1034 0 895 0 conicto +670 0 545 71 conicto +421 142 370 257 conicto +320 373 320 724 conicto +320 2045 lineto +64 2045 lineto +64 2368 lineto +320 2368 lineto +320 2942 lineto +719 3177 lineto +719 2368 lineto +1152 2368 lineto +1152 2045 lineto +719 2045 lineto +719 702 lineto +719 535 742 487 conicto +765 440 816 412 conicto +868 384 963 384 conicto +1035 384 1152 399 conicto +end_ol grestore +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 13.928800 7.500000 m 13.928800 8.517500 l 16.477400 8.517500 l 16.477400 9.048197 l s +[] 0 sd +0 slj +0 slc +n 16.477400 9.423197 m 16.227400 8.923197 l 16.477400 9.048197 l 16.727400 8.923197 l ef +n 16.477400 9.423197 m 16.227400 8.923197 l 16.477400 9.048197 l 16.727400 8.923197 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 15.202400 10.318700 m 14.178700 10.318700 l 14.178700 11.013197 l s +[] 0 sd +0 slj +0 slc +n 14.178700 11.388197 m 13.928700 10.888197 l 14.178700 11.013197 l 14.428700 10.888197 l ef +n 14.178700 11.388197 m 13.928700 10.888197 l 14.178700 11.013197 l 14.428700 10.888197 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 17.752400 10.318700 m 18.963700 10.318700 l 18.963700 11.013197 l s +[] 0 sd +0 slj +0 slc +n 18.963700 11.388197 m 18.713700 10.888197 l 18.963700 11.013197 l 19.213700 10.888197 l ef +n 18.963700 11.388197 m 18.713700 10.888197 l 18.963700 11.013197 l 19.213700 10.888197 l cp s +gsave 25.352400 12.802400 translate 0.035278 -0.035278 scale +start_ol +2034 2424 moveto +2034 2034 lineto +1849 2123 1665 2167 conicto +1482 2212 1285 2212 conicto +985 2212 835 2118 conicto +685 2025 685 1839 conicto +685 1697 791 1615 conicto +898 1534 1219 1462 conicto +1355 1430 lineto +1785 1337 1971 1166 conicto +2157 995 2157 690 conicto +2157 342 1882 139 conicto +1608 -64 1128 -64 conicto +928 -64 710 -24 conicto +493 15 253 94 conicto +253 519 lineto +483 402 701 343 conicto +920 284 1133 284 conicto +1420 284 1574 383 conicto +1728 482 1728 661 conicto +1728 829 1618 917 conicto +1509 1006 1138 1088 conicto +999 1121 lineto +622 1201 439 1367 conicto +256 1533 256 1823 conicto +256 2176 509 2368 conicto +762 2560 1226 2560 conicto +1457 2560 1660 2526 conicto +1863 2492 2034 2424 conicto +end_ol grestore +gsave 25.665667 12.802400 translate 0.035278 -0.035278 scale +start_ol +832 3213 moveto +832 2524 lineto +1664 2524 lineto +1664 2176 lineto +832 2176 lineto +832 825 lineto +832 521 914 434 conicto +997 348 1249 348 conicto +1664 348 lineto +1664 0 lineto +1241 0 lineto +765 0 584 179 conicto +403 359 403 826 conicto +403 2176 lineto +128 2176 lineto +128 2524 lineto +403 2524 lineto +403 3213 lineto +832 3213 lineto +end_ol grestore +gsave 25.902733 12.802400 translate 0.035278 -0.035278 scale +start_ol +1853 2133 moveto +1787 2174 1706 2193 conicto +1626 2212 1529 2212 conicto +1183 2212 998 1983 conicto +813 1755 813 1328 conicto +813 0 lineto +384 0 lineto +384 2496 lineto +813 2496 lineto +813 2129 lineto +941 2347 1146 2453 conicto +1352 2560 1647 2560 conicto +1689 2560 1740 2553 conicto +1791 2547 1853 2536 conicto +1853 2133 lineto +end_ol grestore +gsave 26.148267 12.802400 translate 0.035278 -0.035278 scale +start_ol +2304 -740 moveto +2304 -1088 lineto +-64 -1088 lineto +-64 -740 lineto +2304 -740 lineto +end_ol grestore +showpage diff --git a/numpy/doc/numpybook/Figures/hierarchy.fig b/numpy/doc/numpybook/Figures/hierarchy.fig Binary files differnew file mode 100644 index 000000000..178555da0 --- /dev/null +++ b/numpy/doc/numpybook/Figures/hierarchy.fig diff --git a/numpy/doc/numpybook/Figures/hierarchy.pdf b/numpy/doc/numpybook/Figures/hierarchy.pdf Binary files differnew file mode 100644 index 000000000..7ab56ee97 --- /dev/null +++ b/numpy/doc/numpybook/Figures/hierarchy.pdf diff --git a/numpy/doc/numpybook/Figures/hierarchy.png b/numpy/doc/numpybook/Figures/hierarchy.png Binary files differnew file mode 100644 index 000000000..50dd7474d --- /dev/null +++ b/numpy/doc/numpybook/Figures/hierarchy.png diff --git a/numpy/doc/numpybook/Figures/threefundamental.eps b/numpy/doc/numpybook/Figures/threefundamental.eps new file mode 100644 index 000000000..22eedc4f1 --- /dev/null +++ b/numpy/doc/numpybook/Figures/threefundamental.eps @@ -0,0 +1,246 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: threefundamental.fig +%%Creator: fig2dev Version 3.2 Patchlevel 4 +%%CreationDate: Mon Jan 16 15:40:51 2006 +%%For: oliphant@den.local.net (Travis Oliphant) +%%BoundingBox: 0 0 438 162 +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +newpath 0 162 moveto 0 0 lineto 438 0 lineto 438 162 lineto closepath clip newpath +-30.8 237.8 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/reencdict 12 dict def /ReEncode { reencdict begin +/newcodesandnames exch def /newfontname exch def /basefontname exch def +/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def +basefontdict { exch dup /FID ne { dup /Encoding eq +{ exch dup length array copy newfont 3 1 roll put } +{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall +newfont /FontName newfontname put newcodesandnames aload pop +128 1 255 { newfont /Encoding get exch /.notdef put } for +newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat +newfontname newfont definefont pop end } def +/isovec [ +8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde +8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis +8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron +8#220 /dotlessi 8#230 /oe 8#231 /OE +8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling +8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis +8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot +8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus +8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph +8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine +8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf +8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute +8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring +8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute +8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute +8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve +8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply +8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex +8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave +8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring +8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute +8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute +8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve +8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide +8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex +8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def +/Helvetica-Bold /Helvetica-Bold-iso isovec ReEncode +/Times-Bold /Times-Bold-iso isovec ReEncode +/Helvetica /Helvetica-iso isovec ReEncode +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06000 0.06000 sc +% +% Fig objects follow +% +% +% here starts figure with depth 50 +% Polyline +7.500 slw +n 1950 2850 m 4350 2850 l 4350 3450 l 1950 3450 l + cp gs col0 s gr +% Polyline +n 2550 2850 m + 2550 3450 l gs col0 s gr +% Polyline +n 3150 2850 m + 3150 3450 l gs col0 s gr +% Polyline +n 3750 2850 m + 3750 3450 l gs col0 s gr +% Polyline +n 5100 2850 m 7500 2850 l 7500 3450 l 5100 3450 l + cp gs col0 s gr +% Polyline +n 5700 2850 m + 5700 3450 l gs col0 s gr +% Polyline +n 6300 2850 m + 6300 3450 l gs col0 s gr +% Polyline +n 6900 2850 m + 6900 3450 l gs col0 s gr +% Polyline +n 630 2700 m 525 2700 525 3495 105 arcto 4 {pop} repeat + 525 3600 7695 3600 105 arcto 4 {pop} repeat + 7800 3600 7800 2805 105 arcto 4 {pop} repeat + 7800 2700 630 2700 105 arcto 4 {pop} repeat + cp gs col0 s gr +% Polyline +n 675 2850 m 1725 2850 l 1725 3450 l 675 3450 l + cp gs col0 s gr +% Polyline +45.000 slw +n 5700 2850 m 6300 2850 l 6300 3450 l 5700 3450 l + cp gs col0 s gr +% Polyline +n 5700 1725 m 6300 1725 l 6300 2325 l 5700 2325 l + cp gs col0 s gr +% Polyline +7.500 slw +n 5655 1275 m 5550 1275 5550 2370 105 arcto 4 {pop} repeat + 5550 2475 6345 2475 105 arcto 4 {pop} repeat + 6450 2475 6450 1380 105 arcto 4 {pop} repeat + 6450 1275 5655 1275 105 arcto 4 {pop} repeat + cp gs col0 s gr +% Polyline +n 5700 1350 m 6300 1350 l 6300 1575 l 5700 1575 l + cp gs col0 s gr +% Polyline +gs clippath +1590 1905 m 1590 1845 l 1405 1845 l 1555 1875 l 1405 1905 l cp +eoclip +n 900 2850 m 900 1875 l + 1575 1875 l gs col0 s gr gr + +% arrowhead +n 1405 1905 m 1555 1875 l 1405 1845 l 1435 1875 l 1405 1905 l + cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +5565 1830 m 5565 1770 l 5380 1770 l 5530 1800 l 5380 1830 l cp +eoclip +n 3375 1800 m + 5550 1800 l gs col0 s gr gr + +% arrowhead +n 5380 1830 m 5530 1800 l 5380 1770 l 5410 1800 l 5380 1830 l + cp gs 0.00 setgray ef gr col0 s +% Polyline +gs clippath +6030 2310 m 5970 2310 l 5970 2495 l 6000 2345 l 6030 2495 l cp +eoclip +n 6000 2850 m + 6000 2325 l gs col0 s gr gr + +% arrowhead +n 6030 2495 m 6000 2345 l 5970 2495 l 6000 2465 l 6030 2495 l + cp gs 0.00 setgray ef gr col0 s +% Polyline +n 1680 1575 m 1575 1575 1575 1995 105 arcto 4 {pop} repeat + 1575 2100 3270 2100 105 arcto 4 {pop} repeat + 3375 2100 3375 1680 105 arcto 4 {pop} repeat + 3375 1575 1680 1575 105 arcto 4 {pop} repeat + cp gs col0 s gr +/Helvetica-Bold-iso ff 210.00 scf sf +825 3225 m +gs 1 -1 sc (header) col0 sh gr +/Times-Bold-iso ff 600.00 scf sf +4500 3225 m +gs 1 -1 sc (...) col0 sh gr +/Helvetica-Bold-iso ff 210.00 scf sf +3600 3900 m +gs 1 -1 sc (ndarray) col0 sh gr +/Helvetica-Bold-iso ff 210.00 scf sf +6600 2175 m +gs 1 -1 sc (scalar) col0 sh gr +/Helvetica-Bold-iso ff 210.00 scf sf +6600 1950 m +gs 1 -1 sc (array) col0 sh gr +/Helvetica-iso ff 180.00 scf sf +5775 1500 m +gs 1 -1 sc (head) col0 sh gr +/Helvetica-Bold-iso ff 210.00 scf sf +1950 1875 m +gs 1 -1 sc (data-type) col0 sh gr +% here ends figure; +$F2psEnd +rs +showpage diff --git a/numpy/doc/numpybook/Figures/threefundamental.fig b/numpy/doc/numpybook/Figures/threefundamental.fig new file mode 100644 index 000000000..79760c410 --- /dev/null +++ b/numpy/doc/numpybook/Figures/threefundamental.fig @@ -0,0 +1,57 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 1950 2850 4350 3450 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 1950 2850 4350 2850 4350 3450 1950 3450 1950 2850 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2550 2850 2550 3450 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3150 2850 3150 3450 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3750 2850 3750 3450 +-6 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5100 2850 7500 2850 7500 3450 5100 3450 5100 2850 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 5700 2850 5700 3450 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6300 2850 6300 3450 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6900 2850 6900 3450 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 7800 3600 7800 2700 525 2700 525 3600 7800 3600 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 675 2850 1725 2850 1725 3450 675 3450 675 2850 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5700 2850 6300 2850 6300 3450 5700 3450 5700 2850 +2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5700 1725 6300 1725 6300 2325 5700 2325 5700 1725 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 6450 2475 6450 1275 5550 1275 5550 2475 6450 2475 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 5700 1350 6300 1350 6300 1575 5700 1575 5700 1350 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3 + 2 1 1.00 60.00 120.00 + 900 2850 900 1875 1575 1875 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 2 1 1.00 60.00 120.00 + 3375 1800 5550 1800 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 2 1 1.00 60.00 120.00 + 6000 2850 6000 2325 +2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 + 3375 2100 3375 1575 1575 1575 1575 2100 3375 2100 +4 0 0 50 -1 18 14 0.0000 4 165 720 825 3225 header\001 +4 0 0 50 -1 2 40 0.0000 4 105 450 4500 3225 ...\001 +4 0 0 50 -1 18 14 0.0000 4 210 810 3600 3900 ndarray\001 +4 0 0 50 -1 18 14 0.0000 4 165 630 6600 2175 scalar\001 +4 0 0 50 -1 18 14 0.0000 4 165 540 6600 1950 array\001 +4 0 0 50 -1 16 12 0.0000 4 135 420 5775 1500 head\001 +4 0 0 50 -1 18 14 0.0000 4 210 975 1950 1875 data-type\001 diff --git a/numpy/doc/numpybook/Figures/threefundamental.png b/numpy/doc/numpybook/Figures/threefundamental.png Binary files differnew file mode 100644 index 000000000..f4d4d950d --- /dev/null +++ b/numpy/doc/numpybook/Figures/threefundamental.png diff --git a/numpy/doc/numpybook/capi.lyx b/numpy/doc/numpybook/capi.lyx new file mode 100644 index 000000000..04522d13d --- /dev/null +++ b/numpy/doc/numpybook/capi.lyx @@ -0,0 +1,24232 @@ +#LyX 1.5.1 created this file. For more info see http://www.lyx.org/ +\lyxformat 276 +\begin_document +\begin_header +\textclass mybook +\language english +\inputencoding auto +\font_roman default +\font_sans default +\font_typewriter default +\font_default_family default +\font_sc false +\font_osf false +\font_sf_scale 100 +\font_tt_scale 100 +\graphics default +\paperfontsize default +\spacing onehalf +\papersize default +\use_geometry true +\use_amsmath 2 +\use_esint 0 +\cite_engine basic +\use_bibtopic false +\paperorientation portrait +\leftmargin 1in +\topmargin 1in +\rightmargin 1in +\bottommargin 1in +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\defskip medskip +\quotes_language english +\papercolumns 1 +\papersides 1 +\paperpagestyle default +\tracking_changes false +\output_changes false +\author "" +\author "" +\end_header + +\begin_body + +\begin_layout Part +C-API +\end_layout + +\begin_layout Chapter +New Python Types and C-Structures +\end_layout + +\begin_layout Quotation +Beware of the man who won't be bothered with details. +\end_layout + +\begin_layout Right Address +--- +\emph on +William Feather, Sr. +\end_layout + +\begin_layout Quotation +The truth is out there. +\end_layout + +\begin_layout Right Address +---Chris Carter, The X Files +\end_layout + +\begin_layout Standard +NumPy provides a C-API to enable users to extend the system and get access + to the array object for use in other routines. + The best way to truly understand the C-API is to read the source code. + If you are unfamiliar with (C) source code, however, this can be a daunting + experience at first. + Be assured that the task becomes easier with practice, and you may be surprised + at how simple the C-code can be to understand. + Even if you don't think you can write C-code from scratch, it is much easier + to understand and modify already-written source code then create it +\emph on +de novo +\emph default +. + +\end_layout + +\begin_layout Standard +Python extensions are especially straightforward to understand because they + all have a very similar structure. + Admittedly, NumPy is not a trivial extension to Python, and may take a + little more snooping to grasp. + This is especially true because of the code-generation techniques, which + simplify maintenance of very similar code, but can make the code a little + less readable to beginners. + Still, with a little persistence, the code can be opened to your understanding. + It is my hope, that this guide to the C-API can assist in the process of + becoming familiar with the compiled-level work that can be done with NumPy + in order to squeeze that last bit of necessary speed out of your code. +\end_layout + +\begin_layout Standard +Several new types are defined in the C-code. + Most of these are accessible from Python, but a few are not exposed due + to their limited use. + Every new Python type has an associated PyObject * with an internal structure + that includes a pointer to a +\begin_inset Quotes eld +\end_inset + +method table +\begin_inset Quotes erd +\end_inset + + that defines how the new object behaves in Python. + When you receive a Python object into C code, you always get a pointer + to a +\family typewriter +PyObject +\family default + structure. + Because a +\family typewriter +PyObject +\family default + structure is very generic and defines only +\family typewriter +PyObject_HEAD +\family default +, by itself it is not very interesting. + However, different objects contain more details after the +\family typewriter +PyObject_HEAD +\family default + (but you have to cast to the correct type to access them --- or use accessor + functions or macros). + +\end_layout + +\begin_layout Section +New Python Types Defined +\end_layout + +\begin_layout Standard +Python types are the functional equivalent in C of classes in Python. + By constructing a new Python type you make available a new object for Python. + The ndarray object is an example of a new type defined in C. + New types are defined in C by two basic steps: +\end_layout + +\begin_layout Enumerate +creating a C-structure (usually named Py<Name>Object) that is binary-compatible + with the +\family typewriter +PyObject +\family default + structure itself but holds the additional information needed for that particula +r object; +\end_layout + +\begin_layout Enumerate +populating the +\family typewriter +PyTypeObject +\family default + table (pointed to by the ob_type member of the +\family typewriter +PyObject +\family default + structure) with pointers to functions that implement the desired behavior + for the type. + +\end_layout + +\begin_layout Standard +Instead of special method names which define behavior for Python classes, + there are +\begin_inset Quotes eld +\end_inset + +function tables +\begin_inset Quotes erd +\end_inset + + which point to functions that implement the desired results. + Since Python 2.2, the PyTypeObject itself has become dynamic which allows + C types that can be +\begin_inset Quotes eld +\end_inset + +sub-typed +\begin_inset Quotes erd +\end_inset + + from other C-types in C, and sub-classed in Python. + The children types inherit the attributes and methods from their parent(s). + +\end_layout + +\begin_layout Standard +There are two major new types: the ndarray ( +\family typewriter +PyArray_Type +\family default +) and the ufunc ( +\family typewriter +PyUFunc_Type +\family default +). + Additional types play a supportive role: the +\family typewriter +PyArrayIter_Type +\family default +, the +\family typewriter +PyArrayMultiIter_Type +\family default +, and the +\family typewriter +PyArrayDescr_Type +\family default +. + The +\family typewriter +PyArrayIter_Type +\family default + is the type for a flat iterator for an ndarray (the object that is returned + when getting the flat attribute). + The +\family typewriter +PyArrayMultiIter_Type +\family default + is the type of the object returned when calling +\family typewriter +broadcast +\family default +(). + It handles iteration and broadcasting over a collection of nested sequences. + Also, the +\family typewriter +PyArrayDescr_Type +\family default + is the data-type-descriptor type whose instances describe the data. + Finally, there are 21 new scalar-array types which are new Python scalars + corresponding to each of the fundamental data types available for arrays. + An additional 10 other types are place holders that allow the array scalars + to fit into a hierarchy of actual Python types. + +\end_layout + +\begin_layout Subsection +PyArray_Type +\end_layout + +\begin_layout Standard +The Python type of the ndarray is +\family typewriter +PyArray_Type +\family default + +\begin_inset LatexCommand index +name "PyArray\\_Type" + +\end_inset + +. + In C, every ndarray is a pointer to a +\family typewriter +PyArrayObject +\family default + structure. + The ob_type member of this structure contains a pointer to the +\family typewriter +PyArray_Type +\family default + typeobject. + +\end_layout + +\begin_layout Standard +The +\family typewriter +PyArrayObject +\family default + C-structure contains all of the required information for an array. + All instances of an ndarray (and its subclasses) will have this structure. + For future compatibility, these structure members should normally be accessed + using the provided macros. + If you need a shorter name, then you can make use of +\family typewriter +NPY_AO +\family default + which is defined to be equivalent to +\family typewriter +PyArrayObject +\family default +. +\end_layout + +\begin_layout LyX-Code +typedef struct PyArrayObject { +\end_layout + +\begin_layout LyX-Code + PyObject_HEAD +\end_layout + +\begin_layout LyX-Code + +\emph on +char * +\emph default +data; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + nd; +\end_layout + +\begin_layout LyX-Code + +\emph on +npy_intp * +\emph default +dimensions; +\end_layout + +\begin_layout LyX-Code + +\emph on +npy_intp * +\emph default +strides; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyObject * +\emph default +base; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_Descr * +\emph default +descr; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + flags; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyObject * +\emph default +weakreflist; +\end_layout + +\begin_layout LyX-Code +} +\emph on +PyArrayObject +\emph default +; +\end_layout + +\begin_layout Description +PyObject_HEAD This is needed by all Python objects. + It consists of (at least) a reference count member ( +\family typewriter +ob_refcnt +\family default +) and a pointer to the typeobject ( +\family typewriter +ob_type +\family default +). + (Other elements may also be present if Python was compiled with special + options see Include/object.h in the Python source tree for more information). + The ob_type member points to a Python type object. + +\end_layout + +\begin_layout Description +data A pointer to the first element of the array. + This pointer can (and normally should) be recast to the data type of the + array. + +\end_layout + +\begin_layout Description +nd An integer providing the number of dimensions for this array. + When nd is 0, the array is sometimes called a rank-0 array. + Such arrays have undefined dimensions and strides and cannot be accessed. + +\family typewriter +NPY_MAXDIMS +\family default + is the largest number of dimensions for any array. +\end_layout + +\begin_layout Description +dimensions An array of integers providing the shape in each dimension as + long as nd +\begin_inset Formula $\geq$ +\end_inset + +1. + The integer is always large enough to hold a pointer on the platform, so + the dimension size is only limited by memory. + +\end_layout + +\begin_layout Description +strides An array of integers providing for each dimension the number of + bytes that must be skipped to get to the next element in that dimension. + +\end_layout + +\begin_layout Description +base This member is used to hold a pointer to another Python object that + is related to this array. + There are two use cases: 1) If this array does not own its own memory, + then base points to the Python object that owns it (perhaps another array + object), 2) If this array has the +\family typewriter +NPY_UPDATEIFCOPY +\family default + flag set, then this array is a working copy of a +\begin_inset Quotes eld +\end_inset + +misbehaved +\begin_inset Quotes erd +\end_inset + + array. + As soon as this array is deleted, the array pointed to by base will be + updated with the contents of this array. + +\end_layout + +\begin_layout Description +descr A pointer to a data-type descriptor object (see below). + The data-type descriptor object is an instance of a new built-in type which + allows a generic description of memory. + There is a descriptor structure for each data type supported. + This descriptor structure contains useful information about the type as + well as a pointer to a table of function pointers to implement specific + functionality. +\end_layout + +\begin_layout Description +flags Flags indicating how the memory pointed to by data is to be interpreted. + Possible flags are +\family typewriter +NPY_C_CONTIGUOUS +\family default +, +\family typewriter +NPY_F_CONTIGUOUS +\family default +, +\family typewriter +NPY_OWNDATA +\family default +, +\family typewriter +NPY_ALIGNED +\family default +, +\family typewriter +NPY_WRITEABLE +\family default +, and +\family typewriter +NPY_UPDATEIFCOPY +\family default +. +\end_layout + +\begin_layout Description +weakreflist This member allows array objects to have weak references (using + the weakref module). + +\end_layout + +\begin_layout Subsection +PyArrayDescr_Type +\end_layout + +\begin_layout Standard +The +\family typewriter +PyArrayDescr_Type +\family default + +\begin_inset LatexCommand index +name "PyArrayDescr\\_Type" + +\end_inset + + is the built-in type of the data-type-descriptor objects used to describe + how the bytes comprising the array are to be interpreted. + There are 21 statically-defined +\family typewriter +PyArray_Descr +\family default + objects for the built-in data-types. + While these participate in reference counting, their reference count should + never reach zero. + There is also a dynamic table of user-defined +\family typewriter +PyArray_Descr +\family default + objects that is also maintained. + Once a data-type-descriptor object is +\begin_inset Quotes eld +\end_inset + +registered +\begin_inset Quotes erd +\end_inset + + it should never be deallocated either. + The function +\family typewriter +PyArray_DescrFromType +\family default +(...) can be used to retrieve a +\family typewriter +PyArray_Descr +\family default + object from an enumerated type-number (either built-in or user-defined). + The format of the structure that lies at the heart of the +\family typewriter +PyArrayDescr_Type +\family default + is. + +\end_layout + +\begin_layout LyX-Code +typedef struct { +\end_layout + +\begin_layout LyX-Code + PyObject_HEAD +\end_layout + +\begin_layout LyX-Code + +\emph on +PyTypeObject * +\emph default +typeobj; +\end_layout + +\begin_layout LyX-Code + +\emph on +char +\emph default + kind; +\end_layout + +\begin_layout LyX-Code + +\emph on +char +\emph default + type; +\end_layout + +\begin_layout LyX-Code + +\emph on +char +\emph default + byteorder; +\end_layout + +\begin_layout LyX-Code + +\emph on +char +\emph default + hasobject; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + type_num; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + elsize; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + alignment; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_ArrayDescr +\emph default + *subarray; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyObject +\emph default + *fields; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_ArrFuncs +\emph default + *f; +\end_layout + +\begin_layout LyX-Code +} +\emph on +PyArray_Descr +\emph default +; +\end_layout + +\begin_layout Description +typeobj Pointer to a typeobject that is the corresponding Python type for + the elements of this array. + For the builtin types, this points to the corresponding array scalar. + For user-defined types, this should point to a user-defined typeobject. + This typeobject can either inherit from array scalars or not. + If it does not inherit from array scalars, then the +\family typewriter +NPY_USE_GETITEM +\family default + and +\family typewriter +NPY_USE_SETITEM +\family default + flags should be set in the +\family typewriter +hasobject +\family default + flag. +\end_layout + +\begin_layout Description +kind A character code indicating the kind of array (using the array interface + typestring notation). + A 'b' represents Boolean, a 'i' represents signed integer, a 'u' represents + unsigned integer, 'f' represents floating point, 'c' represents complex + floating point, 'S' represents 8-bit character string, 'U' represents 32-bit/ch +aracter unicode string, and 'V' repesents arbitrary. + +\end_layout + +\begin_layout Description +type A traditional character code indicating the data type. + +\end_layout + +\begin_layout Description +byteorder A character indicating the byte-order: '>' (big-endian), '<' (little-e +ndian), '=' (native), '|' (irrelevant, ignore). + All builtin data-types have byteorder '='. + +\end_layout + +\begin_layout Description +hasobject A data-type bit-flag that determines if the data-type exhibits + object-array like behavior. + Each bit in this member is a flag which are named as: +\end_layout + +\begin_deeper +\begin_layout Description +NPY_ITEM_REFCOUNT\InsetSpace ~ +(NPY_ITEM_HASOBJECT) Indicates that items of this data-type + must be reference counted (using +\family typewriter +Py_INCREF +\family default + and +\family typewriter +Py_DECREF +\family default +). + +\end_layout + +\begin_layout Description +NPY_ITEM_LISTPICKLE Indicates arrays of this data-type must be converted + to a list before pickling. + +\end_layout + +\begin_layout Description +NPY_ITEM_IS_POINTER Indicates the item is a pointer to some other data-type +\end_layout + +\begin_layout Description +NPY_NEEDS_INIT Indicates memory for this data-type must be initialized (set + to 0) on creation. + +\end_layout + +\begin_layout Description +NPY_NEEDS_PYAPI Indicates this data-type requires the Python C-API during + access (so don't give up the GIL if array access is going to be needed). + +\end_layout + +\begin_layout Description +NPY_USE_GETITEM On array access use the +\family typewriter +f->getitem +\family default + function pointer instead of the standard conversion to an array scalar. + Must use if you don't define an array scalar to go along with the data-type. + +\end_layout + +\begin_layout Description +NPY_USE_SETITEM When creating a 0-d array from an array scalar use +\family typewriter +f->setitem +\family default + instead of the standard copy from an array scalar. + Must use if you don't define an array scalar to go along with the data-type. + +\end_layout + +\begin_layout Description +NPY_FROM_FIELDS The bits that are inherited for the parent data-type if + these bits are set in any field of the data-type. + Currently ( +\family typewriter +NPY_NEEDS_INIT +\family default + | +\family typewriter +NPY_LIST_PICKLE +\family default + | +\family typewriter +NPY_ITEM_REFCOUNT +\family default + | +\family typewriter +NPY_NEEDS_PYAPI +\family default +). + +\end_layout + +\begin_layout Description +NPY_OBJECT_DTYPE_FLAGS Bits set for the object data-type: ( +\family typewriter +NPY_LIST_PICKLE +\family default + | +\family typewriter +NPY_USE_GETITEM +\family default + | +\family typewriter +NPY_ITEM_IS_POINTER +\family default + | +\family typewriter +NPY_REFCOUNT +\family default + | +\family typewriter +NPY_NEEDS_INIT +\family default + | +\family typewriter +NPY_NEEDS_PYAPI +\family default +). + +\end_layout + +\begin_layout Description +PyDataType_FLAGCHK ( +\family typewriter +PyArray_Descr* +\family default + dtype, +\family typewriter +int +\family default + flags) Return true if all the given flags are set for the data-type object. + +\end_layout + +\begin_layout Description +PyDataType_REFCHK ( +\family typewriter +PyArray_Descr* +\family default + dtype) Equivalent to +\family typewriter +PyDataType_FLAGCHK +\family default +( +\emph on +dtype +\emph default +, +\family typewriter +NPY_ITEM_REFCOUNT +\family default +). +\end_layout + +\end_deeper +\begin_layout Description +type_num A number that uniquely identifies the data type. + For new data-types, this number is assigned when the data-type is registered. +\end_layout + +\begin_layout Description +elsize For data types that are always the same size (such as long), this + holds the size of the data type. + For flexible data types where different arrays can have a different elementsize +, this should be 0. +\end_layout + +\begin_layout Description +alignment A number providing alignment information for this data type. + Specifically, it shows how far from the start of a 2-element structure + (whose first element is a +\family typewriter +char +\family default +), the compiler places an item of this type: +\family typewriter +offsetof(struct {char c; type v;}, v) +\end_layout + +\begin_layout Description +subarray If this is non- +\family typewriter +NULL +\family default +, then this data-type descriptor is a C-style contiguous array of another + data-type descriptor. + In other-words, each element that this descriptor describes is actually + an array of some other base descriptor. + This is most useful as the data-type descriptor for a field in another + data-type descriptor. + The fields member should be +\family typewriter +NULL +\family default + if this is non- +\family typewriter +NULL +\family default + (the fields member of the base descriptor can be non- +\family typewriter +NULL +\family default + however). + The +\family typewriter +PyArray_ArrayDescr +\family default + structure is defined using +\end_layout + +\begin_layout LyX-Code +typedef struct { +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_Descr +\emph default + *base; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyObject +\emph default + *shape; +\end_layout + +\begin_layout LyX-Code +} +\emph on +PyArray_ArrayDescr; +\end_layout + +\begin_layout Description +\InsetSpace ~ + The elements of this structure are: +\end_layout + +\begin_deeper +\begin_layout Description +base The data-type-descriptor object of the base-type. + +\end_layout + +\begin_layout Description +shape The shape (always C-style contiguous) of the sub-array as a Python + tuple. + +\end_layout + +\end_deeper +\begin_layout Description +fields If this is non-NULL, then this data-type-descriptor has fields described + by a Python dictionary whose keys are names (and also titles if given) + and whose values are tuples that describe the fields. + Recall that a data-type-descriptor always describes a fixed-length set + of bytes. + A field is a named sub-region of that total, fixed-length collection. + A field is described by a tuple composed of another data-type-descriptor + and a byte offset. + Optionally, the tuple may contain a title which is normally a Python string. + These tuples are placed in this dictionary keyed by name (and also title + if given). + +\end_layout + +\begin_layout Description +f A pointer to a structure containing functions that the type needs to implement + internal features. + These functions are not the same thing as the universal functions (ufuncs) + described later. + Their signatures can vary arbitrarily. + Not all of these function pointers must be defined for a given type. + The required members are +\family typewriter +nonzero +\family default +, +\family typewriter +copyswap +\family default +, +\family typewriter +copyswapn +\family default +, +\family typewriter +setitem +\family default +, +\family typewriter +getitem +\family default +, and +\family typewriter +cast +\family default +. + These are assumed to be non- +\family typewriter +NULL +\family default + and +\family typewriter +NULL +\family default + entries will cause a program crash. + The other functions may be +\family typewriter +NULL +\family default + which will just mean reduced functionality for that data-type. + (Also, the nonzero function will be filled in with a default function if + it is +\family typewriter +NULL +\family default + when you register a user-defined data-type). +\end_layout + +\begin_layout LyX-Code +typedef struct { +\end_layout + +\begin_layout LyX-Code + +\emph on + PyArray_VectorUnaryFunc +\emph default + +\emph on +* +\emph default +cast[PyArray_NTYPES]; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_GetItemFunc * +\emph default +getitem; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_SetItemFunc * +\emph default +setitem; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_CopySwapNFunc * +\emph default +copyswapn; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_CopySwapFunc * +\emph default +copyswap; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_CompareFunc * +\emph default +compare; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_ArgFunc * +\emph default +argmax; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_DotFunc * +\emph default +dotfunc; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_ScanFunc * +\emph default +scanfunc; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_FromStrFunc +\emph default + *fromstr; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_NonzeroFunc * +\emph default +nonzero; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_FillFunc +\emph default + *fill; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_FillWithScalarFunc +\emph default + *fillwithscalar; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_SortFunc +\emph default + *sort[PyArray_NSORTS]; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_ArgSortFunc +\emph default + *argsort[PyArray_NSORTS]; +\newline + +\emph on +PyObject +\emph default + *castdict; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArray_ScalarKindFunc +\emph default + *scalarkind; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + **cancastscalarkindto; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + *cancastto; +\end_layout + +\begin_layout LyX-Code + +\shape italic +int +\shape default + listpickle +\end_layout + +\begin_layout LyX-Code +} +\emph on +PyArray_ArrFuncs +\emph default +; +\end_layout + +\begin_layout Description +\InsetSpace ~ + The concept of a behaved segment is used in the description of the function + pointers. + A behaved segment is one that is aligned and in native machine byte-order + for the data-type. + The +\family typewriter +nonzero +\family default +, +\family typewriter +copyswap +\family default +, +\family typewriter +copyswapn +\family default +, +\family typewriter +getitem +\family default +, and +\family typewriter +setitem +\family default + functions can (and must) deal with mis-behaved arrays. + The other functions require behaved memory segments. +\end_layout + +\begin_deeper +\begin_layout Description +cast ( +\family typewriter +void +\family default +) ( +\family typewriter +void* +\family default + from, +\family typewriter +void* +\family default + to, +\family typewriter +npy_intp +\family default + n, +\family typewriter +void* +\family default + fromarr, +\family typewriter +void* +\family default + toarr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + An array of function pointers to cast from the current type to all of the + other builtin types. + Each function casts a contiguous, aligned, and notswapped buffer pointed + at by +\emph on +from +\emph default + to a contiguous, aligned, and notswapped buffer pointed at by +\emph on +to +\emph default + The number of items to cast is given by +\emph on +n +\emph default +, and the arguments +\emph on +fromarr +\emph default + and +\emph on +toarr +\emph default + are interpreted as PyArrayObjects for flexible arrays to get itemsize informati +on. +\end_layout + +\begin_layout Description +getitem ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +void* +\family default + data, +\family typewriter +void* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A pointer to a function that returns a standard Python object from a single + element of the array object +\emph on +arr +\emph default + pointed to by +\emph on +data +\emph default +. + This function must be able to deal with +\begin_inset Quotes eld +\end_inset + +misbehaved +\begin_inset Quotes erd +\end_inset + + (misaligned and/or swapped) arrays correctly. + +\end_layout + +\begin_layout Description +setitem ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + item, +\family typewriter +void* +\family default + data, +\family typewriter +void* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A pointer to a function that sets the Python object +\emph on +item +\emph default + into the array, +\emph on +arr +\emph default +, at the position pointed to by +\emph on +data +\emph default +. + This function deals with +\begin_inset Quotes eld +\end_inset + +misbehaved +\begin_inset Quotes erd +\end_inset + + arrays. + If successful, a zero is returned, otherwise, a negative one is returned + (and a Python error set). + +\end_layout + +\begin_layout Description +copyswapn ( +\family typewriter +void +\family default +) ( +\family typewriter +void* +\family default + dest, +\family typewriter +npy_intp +\family default + dstride, +\family typewriter +void* +\family default + src, +\family typewriter +npy_intp +\family default + sstride, +\family typewriter +npy_intp +\family default + n, +\family typewriter +int +\family default + swap, void *arr) +\end_layout + +\begin_layout Description +copyswap ( +\family typewriter +void +\family default +) ( +\family typewriter +void* +\family default + dest, +\family typewriter +void* +\family default + src, +\family typewriter +int +\family default + swap, void *arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + These members are both pointers to functions to copy data from +\emph on +src +\emph default + to +\emph on +dest +\emph default + and +\emph on +swap +\emph default + if indicated. + The value of arr is only used for flexible ( +\family typewriter +NPY_STRING +\family default +, +\family typewriter +NPY_UNICODE +\family default +, and +\family typewriter +NPY_VOID +\family default +) arrays (and is obtained from +\family typewriter +arr->descr->elsize +\family default +). + The second function copies a single value, while the first loops over n + values with the provided strides. + These functions can deal with misbehaved +\emph on +src +\emph default + data. + If +\emph on +src +\emph default + is NULL then no copy is performed. + If +\emph on +swap +\emph default + is 0, then no byteswapping occurs. + It is assumed that +\emph on +dest +\emph default + and +\emph on +src +\emph default + do not overlap. + If they overlap, then use +\family typewriter +memmove +\family default +(...) first followed by +\family typewriter +copyswap(n) +\family default + with NULL valued +\family typewriter +src +\family default +. +\end_layout + +\begin_layout Description +compare ( +\family typewriter +int +\family default +) ( +\family typewriter +const void* +\family default + d1, +\family typewriter +const void* +\family default + d2, +\family typewriter +void* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A pointer to a function that compares two elements of the array, +\family typewriter +arr +\family default +, pointed to by +\family typewriter +d1 +\family default + and +\family typewriter +d2 +\family default +. + This function requires behaved arrays. + The return value is 1 if * +\family typewriter +d1 +\family default + > * +\family typewriter +d2 +\family default +, 0 if * +\family typewriter +d1 +\family default + == * +\family typewriter +d2 +\family default +, and -1 if * +\family typewriter +d1 +\family default + < * +\family typewriter +d2 +\family default +. + The array object arr is used to retrieve itemsize and field information + for flexible arrays. +\end_layout + +\begin_layout Description +argmax ( +\family typewriter +int +\family default +) ( +\family typewriter +void* +\family default + data, +\family typewriter +npy_intp +\family default + n, +\family typewriter +npy_intp* +\family default + max_ind, +\family typewriter +void* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A pointer to a function that retrieves the index of the largest of +\family typewriter +n +\family default + elements in +\family typewriter +arr +\family default + beginning at the element pointed to by +\family typewriter +data +\family default +. + This function requires that the memory segment be contiguous and behaved. + The return value is always 0. + The index of the largest element is returned in +\family typewriter +max_ind +\family default +. +\end_layout + +\begin_layout Description +dotfunc ( +\family typewriter +void +\family default +) ( +\family typewriter +void* +\family default + ip1, +\family typewriter +npy_intp +\family default + is1, +\family typewriter +void* +\family default + ip2, +\family typewriter +npy_intp +\family default + is2, +\family typewriter +void* +\family default + op, +\family typewriter +npy_intp +\family default + n, +\family typewriter +void* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A pointer to a function that multiplies two +\family typewriter +n +\family default +-length sequences together, adds them, and places the result in element + pointed to by +\family typewriter +op +\family default + of +\family typewriter +arr +\family default +. + The start of the two sequences are pointed to by +\family typewriter +ip1 +\family default + and +\family typewriter +ip2 +\family default +. + To get to the next element in each sequence requires a jump of +\family typewriter +is1 +\family default + and +\family typewriter +is2 +\family default + +\emph on +bytes +\emph default +, respectively. + This function requires behaved (though not necessarily contiguous) memory. + +\end_layout + +\begin_layout Description +scanfunc ( +\family typewriter +int +\family default +) ( +\family typewriter +FILE* +\family default + fd, +\family typewriter +void* +\family default + ip , +\family typewriter +void* +\family default + sep , +\family typewriter +void* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A pointer to a function that scans (scanf style) one element of the correspondi +ng type from the file descriptor +\family typewriter +fd +\family default + into the array memory pointed to by +\family typewriter +ip +\family default +. + The array is assumed to be behaved. + If +\family typewriter +sep +\family default + is not NULL, then a separator string is also scanned from the file before + returning. + The last argument +\family typewriter +arr +\family default + is the array to be scanned into. + A 0 is returned if the scan is successful. + A negative number indicates something went wrong: -1 means the end of file + was reached before the separator string could be scanned, -4 means that + the end of file was reached before the element could be scanned, and -3 + means that the element could not be interpreted from the format string. + Requires a behaved array. +\end_layout + +\begin_layout Description +fromstr ( +\family typewriter +int +\family default +) ( +\family typewriter +char* +\family default + str, +\family typewriter +void* +\family default + ip, +\family typewriter +char** +\family default + endptr, +\family typewriter +void* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A pointer to a function that converts the string pointed to by +\family typewriter +str +\family default + to one element of the corresponding type and places it in the memory location + pointed to by +\family typewriter +ip +\family default +. + After the conversion is completed, +\family typewriter +*endptr +\family default + points to the rest of the string. + The last argument +\family typewriter +arr +\family default + is the array into which ip points (needed for variable-size data-types). + Returns 0 on success or -1 on failure. + Requires a behaved array. +\end_layout + +\begin_layout Description +nonzero ( +\family typewriter +Bool +\family default +) ( +\family typewriter +void* +\family default + data, +\family typewriter +void* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A pointer to a function that returns TRUE if the item of +\family typewriter +arr +\family default + pointed to by +\family typewriter +data +\family default + is nonzero. + This function can deal with misbehaved arrays. + +\end_layout + +\begin_layout Description +fill ( +\family typewriter +void +\family default +) ( +\family typewriter +void* +\family default + data, +\family typewriter +npy_intp +\family default + length, +\family typewriter +void* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A pointer to a function that fills a contiguous array of given length with + data. + The first two elements of the array must already be filled-in. + From these two values, a delta will be computed and the values from item + 3 to the end will be computed by repeatedly adding this computed delta. + The data buffer must be well-behaved. +\end_layout + +\begin_layout Description +fillwithscalar ( +\family typewriter +void +\family default +)( +\family typewriter +void* +\family default + buffer, +\family typewriter +npy_intp +\family default + length, +\family typewriter +void* +\family default + value, +\family typewriter +void* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A pointer to a function that fills a contiguous +\family typewriter +buffer +\family default + of the given +\family typewriter +length +\family default + with a single scalar +\family typewriter +value +\family default + whose address is given. + The final argument is the array which is needed to get the itemsize for + variable-length arrays. + +\end_layout + +\begin_layout Description +sort ( +\family typewriter +int +\family default +) ( +\family typewriter +void* +\family default + start, +\family typewriter +npy_intp +\family default + length, +\family typewriter +void* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + An array of function pointers to a particular sorting algorithms. + A particular sorting algorithm is obtained using a key (so far +\family typewriter +PyArray_QUICKSORT +\family default +, +\family typewriter +PyArray_HEAPSORT +\family default +, and +\family typewriter +PyArray_MERGESORT +\family default + are defined). + These sorts are done in-place assuming contiguous and aligned data. + +\end_layout + +\begin_layout Description +argsort ( +\family typewriter +int +\family default +) ( +\family typewriter +void* +\family default + start, +\family typewriter +npy_intp* +\family default + result, +\family typewriter +npy_intp +\family default + length, void *arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + An array of function pointers to sorting algorithms for this data type. + The same sorting algorithms as for sort are available. + The indices producing the sort are returned in result (which must be initialize +d with indices 0 to length-1 inclusive). + +\end_layout + +\begin_layout Description +castdict +\end_layout + +\begin_layout Description +\InsetSpace ~ + Either +\family typewriter +NULL +\family default + or a dictionary containing low-level casting functions for user-defined + data-types. + Each function is wrapped in a +\family typewriter +PyCObject* +\family default + and keyed by the data-type number. + +\end_layout + +\begin_layout Description +scalarkind ( +\family typewriter +PyArray_SCALARKIND +\family default +) ( +\family typewriter +PyArrayObject* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A function to determine how scalars of this type should be interpreted. + The argument is +\family typewriter +NULL +\family default + or a 0-dimensional array containing the data (if that is needed to determine + the kind of scalar). + The return value must be of type +\family typewriter +PyArray_SCALARKIND +\family default +. + +\end_layout + +\begin_layout Description +cancastscalarkindto +\end_layout + +\begin_layout Description +\InsetSpace ~ + Either +\family typewriter +NULL +\family default + or an array of +\family typewriter +PyArray_NSCALARKINDS +\family default + pointers. + These pointers should each be either +\family typewriter +NULL +\family default + or a pointer to an array of integers (terminated by +\family typewriter +PyArray_NOTYPE +\family default +) indicating data-types that a scalar of this data-type of the specified + kind can be cast to safely (this usually means without losing precision). +\end_layout + +\begin_layout Description +cancastto +\end_layout + +\begin_layout Description +\InsetSpace ~ + Either +\family typewriter +NULL +\family default + or an array of integers (terminated by +\family typewriter +PyArray_NOTYPE +\family default +) indicated data-types that this data-type can be cast to safely (this usually + means without losing precision). +\end_layout + +\begin_layout Description +listpickle +\end_layout + +\begin_layout Description +\InsetSpace ~ + Unused. +\end_layout + +\end_deeper +\begin_layout Standard +The +\family typewriter +PyArray_Type +\family default + typeobject implements many of the features of Python objects including + the tp_as_number, tp_as_sequence, tp_as_mapping, and tp_as_buffer interfaces. + The rich comparison (tp_richcompare) is also used along with new-style + attribute lookup for methods (tp_methods) and properties (tp_getset). + The +\family typewriter +PyArray_Type +\family default + can also be sub-typed. + +\end_layout + +\begin_layout Tip +The tp_as_number methods use a generic approach to call whatever function + has been registered for handling the operation. + The function PyNumeric_SetOps(..) can be used to register functions to handle + particular mathematical operations (for all arrays). + When the umath module is imported, it sets the numeric operations for all + arrays to the corresponding ufuncs. + +\newline +The tp_str and tp_repr methods can also be altered using PyString_SetStringFunc +tion(...). +\end_layout + +\begin_layout Subsection +PyUFunc_Type +\end_layout + +\begin_layout Standard +The ufunc object is implemented by creation of the +\family typewriter +PyUFunc_Type +\family default + +\begin_inset LatexCommand index +name "PyUFunc\\_Type" + +\end_inset + +. + It is a very simple type that implements only basic getattribute behavior, + printing behavior, and has call behavior which allows these objects to + act like functions. + The basic idea behind the ufunc is to hold a reference to fast 1-dimensional + (vector) loops for each data type that supports the operation. + These one-dimensional loops all have the same signature and are the key + to creating a new ufunc. + They are called by the generic looping code as appropriate to implement + the N-dimensional function. + There are also some generic 1-d loops defined for floating and complexfloating + arrays that allow you to define a ufunc using a single scalar function + ( +\emph on +e.g. + +\emph default + atanh). + +\end_layout + +\begin_layout Standard +The core of the ufunc is the +\family typewriter +PyUFuncObject +\family default + which contains all the information needed to call the underlying C-code + loops that perform the actual work. + It has the following structure. + +\end_layout + +\begin_layout LyX-Code +typedef struct { +\end_layout + +\begin_layout LyX-Code + PyObject_HEAD +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + nin; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + nout; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + nargs; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + identity; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyUFuncGenericFunction * +\emph default +functions; +\end_layout + +\begin_layout LyX-Code + +\emph on +void ** +\emph default +data; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + ntypes; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + check_return; +\end_layout + +\begin_layout LyX-Code + +\emph on +char * +\emph default +name; +\end_layout + +\begin_layout LyX-Code + +\emph on +char * +\emph default +types; +\end_layout + +\begin_layout LyX-Code + +\emph on +char * +\emph default +doc; +\end_layout + +\begin_layout LyX-Code + +\emph on +void * +\emph default +ptr; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyObject * +\emph default +obj; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyObject * +\emph default +userloops; +\end_layout + +\begin_layout LyX-Code +} +\emph on +PyUFuncObject +\emph default +; +\end_layout + +\begin_layout Description +PyObject_HEAD required for all Python objects. +\end_layout + +\begin_layout Description +nin The number of input arguments. +\end_layout + +\begin_layout Description +nout The number of output arguments. +\end_layout + +\begin_layout Description +nargs The total number of arguments ( +\emph on +nin +\emph default ++ +\emph on +nout +\emph default +). + This must be less than +\family typewriter +NPY_MAXARGS +\family default +. +\end_layout + +\begin_layout Description +identity Either +\family typewriter +PyUFunc_One +\family default +, +\family typewriter +PyUFunc_Zero +\family default +, or +\family typewriter +PyUFunc_None +\family default + to indicate the identity for this operation. + It is only used for a reduce-like call on an empty array. +\end_layout + +\begin_layout Description +functions ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dims, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + extradata ) +\end_layout + +\begin_layout Description +\InsetSpace ~ + An array of function pointers --- one for each data type supported by the + ufunc. + This is the vector loop that is called to implement the underlying function + +\emph on +dims +\emph default +[0] times. + The first argument, +\emph on +args +\emph default +, is an array of +\emph on +nargs +\emph default + pointers to behaved memory. + Pointers to the data for the input arguments are first, followed by the + pointers to the data for the output arguments. + How many bytes must be skipped to get to the next element in the sequence + is specified by the corresponding entry in the +\emph on +steps +\emph default + array. + The last argument allows the loop to receive extra information. + This is commonly used so that a single, generic vector loop can be used + for multiple functions. + In this case, the actual scalar function to call is passed in as +\emph on +extradata +\emph default +. + The size of this function pointer array is ntypes. + +\end_layout + +\begin_layout Description +data Extra data to be passed to the 1-d vector loops or +\family typewriter +NULL +\family default + if no extra-data is needed. + This C-array must be the same size ( +\emph on +i.e. + +\emph default + ntypes) as the functions array. + +\family typewriter +NULL +\family default + is used if extra_data is not needed. + Several C-API calls for UFuncs are just 1-d vector loops that make use + of this extra data to receive a pointer to the actual function to call. + +\end_layout + +\begin_layout Description +ntypes The number of supported data types for the ufunc. + This number specifies how many different 1-d loops (of the builtin data + types) are available. + +\end_layout + +\begin_layout Description +check_return Obsolete and unused. + However, it is set by the corresponding entry in the main ufunc creation + routine: +\family typewriter +PyUFunc_FromFuncAndData +\family default +(...). +\end_layout + +\begin_layout Description +name A string name for the ufunc. + This is used dynamically to build the __doc__ attribute of ufuncs. +\end_layout + +\begin_layout Description +types An array of +\emph on +nargs +\series bold +\emph default + +\begin_inset Formula $\times$ +\end_inset + + +\series default +\emph on +ntypes +\emph default + 8-bit type_numbers which contains the type signature for the function for + each of the supported (builtin) data types. + For each of the +\emph on +ntypes +\emph default + functions, the corresponding set of type numbers in this array shows how + the +\emph on +args +\emph default + argument should be interpreted in the 1-d vector loop. + These type numbers do not have to be the same type and mixed-type ufuncs + are supported. + +\end_layout + +\begin_layout Description +doc Documentation for the ufunc. + Should not contain the function signature as this is generated dynamically + when __doc__ is retrieved. +\end_layout + +\begin_layout Description +ptr Any dynamically allocated memory. + Currently, this is used for dynamic ufuncs created from a python function + to store room for the types, data, and name members. +\end_layout + +\begin_layout Description +obj For ufuncs dynamically created from python functions, this member holds + a reference to the underlying Python function. +\end_layout + +\begin_layout Description +userloops A dictionary of user-defined 1-d vector loops (stored as CObject + ptrs) for user-defined types. + A loop may be registered by the user for any user-defined type. + It is retrieved by type number. + User defined type numbers are always larger than +\family typewriter +NPY_USERDEF +\family default +. + +\end_layout + +\begin_layout Subsection +PyArrayIter_Type +\end_layout + +\begin_layout Standard +This +\begin_inset LatexCommand index +name "PyArrayIter\\_Type" + +\end_inset + + is an iterator object that makes it easy to loop over an N-dimensional + array. + It is the object returned from the flat attribute of an ndarray. + It is also used extensively throughout the implementation internals to + loop over an N-dimensional array. + The tp_as_mapping interface is implemented so that the iterator object + can be indexed (using 1-d indexing), and a few methods are implemented + through the tp_methods table. + This object implements the next method and can be used anywhere an iterator + can be used in Python. +\end_layout + +\begin_layout Standard +The C-structure corresponding to an object of +\family typewriter +PyArrayIter_Type +\family default + is the +\family typewriter +PyArrayIterObject +\family default +. + The +\family typewriter +PyArrayIterObject +\family default + is used to keep track of a pointer into an N-dimensional array. + It contains associated information used to quickly march through the array. + The pointer can be adjusted in three basic ways: 1) advance to the +\begin_inset Quotes eld +\end_inset + +next +\begin_inset Quotes erd +\end_inset + + position in the array in a C-style contiguous fashion, 2) advance to an + arbitrary N-dimensional coordinate in the array, and 3) advance to an arbitrary + one-dimensional index into the array. + The members of the +\family typewriter +PyArrayIterObject +\family default + structure are used in these calculations. + Iterator objects keep their own dimension and strides information about + an array. + This can be adjusted as needed for +\begin_inset Quotes eld +\end_inset + +broadcasting, +\begin_inset Quotes erd +\end_inset + + or to loop over only specific dimensions. + +\end_layout + +\begin_layout LyX-Code +typedef struct { +\end_layout + +\begin_layout LyX-Code + PyObject_HEAD +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + nd_m1; +\end_layout + +\begin_layout LyX-Code + +\emph on +npy_intp +\emph default + index; +\end_layout + +\begin_layout LyX-Code + +\emph on +npy_intp +\emph default + size; +\end_layout + +\begin_layout LyX-Code + +\emph on +npy_intp +\emph default + coordinates +\emph on +[NPY_MAXDIMS] +\emph default +; +\end_layout + +\begin_layout LyX-Code + +\emph on +npy_intp +\emph default + dims_m1 +\emph on +[NPY_MAXDIMS] +\emph default +; +\end_layout + +\begin_layout LyX-Code + +\emph on +npy_intp +\emph default + strides +\emph on +[NPY_MAXDIMS] +\emph default +; +\end_layout + +\begin_layout LyX-Code + +\emph on +npy_intp +\emph default + backstrides +\emph on +[NPY_MAXDIMS] +\emph default +; +\end_layout + +\begin_layout LyX-Code + +\emph on +npy_intp +\emph default + factors +\emph on +[NPY_MAXDIMS] +\emph default +; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArrayObject * +\emph default +ao; +\end_layout + +\begin_layout LyX-Code + +\emph on +char * +\emph default +dataptr; +\end_layout + +\begin_layout LyX-Code + +\emph on +Bool +\emph default + contiguous; +\end_layout + +\begin_layout LyX-Code +} +\emph on +PyArrayIterObject +\emph default +; +\end_layout + +\begin_layout Description +nd_m1 +\begin_inset Formula $N-1$ +\end_inset + + where +\begin_inset Formula $N$ +\end_inset + + is the number of dimensions in the underlying array. +\end_layout + +\begin_layout Description +index The current 1-d index into the array. +\end_layout + +\begin_layout Description +size The total size of the underlying array. +\end_layout + +\begin_layout Description +coordinates An +\begin_inset Formula $N$ +\end_inset + +-dimensional index into the array. +\end_layout + +\begin_layout Description +dims_m1 The size of the array minus 1 in each dimension. +\end_layout + +\begin_layout Description +strides The strides of the array. + How many bytes needed to jump to the next element in each dimension. + +\end_layout + +\begin_layout Description +backstrides How many bytes needed to jump from the end of a dimension back + to its beginning. + Note that +\emph on +backstrides +\emph default +[k]= +\emph on +strides +\emph default +[k]*d +\emph on +ims_m1 +\emph default +[k], but it is stored here as an optimization. +\end_layout + +\begin_layout Description +factors This array is used in computing an N-d index from a 1-d index. + It contains needed products of the dimensions. + +\end_layout + +\begin_layout Description +ao A pointer to the underlying ndarray this iterator was created to represent. +\end_layout + +\begin_layout Description +dataptr This member points to an element in the ndarray indicated by the + index. +\end_layout + +\begin_layout Description +contiguous This flag is true if the underlying array is +\family typewriter +NPY_C_CONTIGUOUS +\family default +. + It is used to simplify calculations when possible. + +\end_layout + +\begin_layout Standard +How to use an array iterator on a C-level is explained more fully in later + sections. + Typically, you do not need to concern yourself with the internal structure + of the iterator object, and merely interact with it through the use of + the macros +\family typewriter +PyArray_ITER_NEXT +\family default +(it), +\family typewriter +PyArray_ITER_GOTO +\family default +(it, dest), or +\family typewriter +PyArray_ITER_GOTO1D +\family default +(it, index). + All of these macros require the argument +\emph on +it +\emph default + to be a +\family typewriter +PyArrayIterObject* +\family default +. + +\end_layout + +\begin_layout Subsection +PyArrayMultiIter_Type +\end_layout + +\begin_layout Standard +This type provides an iterator that encapsulates the concept of broadcasting. + It allows +\begin_inset Formula $N$ +\end_inset + + arrays to be broadcast together so that the loop progresses in C-style + contiguous fashion over the broadcasted array. + The corresponding C-structure is the +\family typewriter +PyArrayMultiIterObject +\family default + whose memory layout must begin any object, +\emph on +obj +\emph default +, passed in to the +\family typewriter +PyArray_Broadcast +\family default +(obj) function. + Broadcasting is performed by adjusting array iterators so that each iterator + represents the broadcasted shape and size, but has its strides adjusted + so that the correct element from the array is used at each iteration. + +\end_layout + +\begin_layout LyX-Code +typedef struct { +\end_layout + +\begin_layout LyX-Code + PyObject_HEAD +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + numiter; +\end_layout + +\begin_layout LyX-Code + +\emph on +npy_intp +\emph default + size; +\end_layout + +\begin_layout LyX-Code + +\emph on +npy_intp +\emph default + index; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + nd; +\end_layout + +\begin_layout LyX-Code + +\emph on +npy_intp +\emph default + dimensions +\emph on +[NPY_MAXDIMS] +\emph default +; +\end_layout + +\begin_layout LyX-Code + +\emph on +PyArrayIterObject * +\emph default +iters +\emph on +[NPY_MAXDIMS] +\emph default +; +\end_layout + +\begin_layout LyX-Code +} +\emph on +PyArrayMultiIterObject +\emph default +; +\end_layout + +\begin_layout Description +PyObject_HEAD Needed at the start of every Python object (holds reference + count and type identification). +\end_layout + +\begin_layout Description +numiter The number of arrays that need to be broadcast to the same shape. +\end_layout + +\begin_layout Description +size The total broadcasted size. +\end_layout + +\begin_layout Description +index The current (1-d) index into the broadcasted result. +\end_layout + +\begin_layout Description +nd The number of dimensions in the broadcasted result. +\end_layout + +\begin_layout Description +dimensions The shape of the broadcasted result (only +\family typewriter +nd +\family default + slots are used). +\end_layout + +\begin_layout Description +iters An array of iterator objects that holds the iterators for the arrays + to be broadcast together. + On return, the iterators are adjusted for broadcasting. + +\end_layout + +\begin_layout Subsection +PyArrayFlags_Type +\end_layout + +\begin_layout Standard +When the flags attribute is retrieved from Python, a special builtin object + of this type is constructed. + This special type makes it easier to work with the different flags by accessing + them as attributes or by accessing them as if the object were a dictionary + with the flag names as entries. + +\end_layout + +\begin_layout Subsection +ScalarArrayTypes +\end_layout + +\begin_layout Standard +There is a Python type for each of the different built-in data types that + can be present in the array Most of these are simple wrappers around the + corresponding data type in C. + The C-names for these types are +\series bold +Py +\series default +<TYPE> +\series bold +ArrType_Type +\series default + where <TYPE> can be +\end_layout + +\begin_layout Quote + +\series bold +Bool +\series default +, +\series bold +Byte +\series default +, +\series bold +Short +\series default +, +\series bold +Int +\series default +, +\series bold +Long +\series default +, +\series bold +LongLong +\series default +, +\series bold +UByte +\series default +, +\series bold +UShort +\series default +, +\series bold +UInt +\series default +, +\series bold +ULong +\series default +, +\series bold +ULongLong +\series default +, +\series bold +Float +\series default +, +\series bold +Double +\series default +, +\series bold +LongDouble +\series default +, +\series bold +CFloat +\series default +, +\series bold +CDouble +\series default +, +\series bold +CLongDouble +\series default +, +\series bold +String +\series default +, +\series bold +Unicode +\series default +, +\series bold +Void +\series default +, and +\series bold +Object +\series default +. + +\end_layout + +\begin_layout Standard +These type names are part of the C-API and can therefore be created in extension + C-code. + There is also a +\family typewriter +PyIntpArrType_Type +\family default + and a +\family typewriter +PyUIntpArrType_Type +\family default + that are simple substitutes for one of the integer types that can hold + a pointer on the platform. + The structure of these scalar objects is not exposed to C-code. + The function +\family typewriter +PyArray_ScalarAsCtype +\family default +(..) can be used to extract the C-type value from the array scalar and the + function +\family typewriter +PyArray_Scalar +\family default +(...) can be used to construct an array scalar from a C-value. + +\end_layout + +\begin_layout Section +Other C-Structures +\end_layout + +\begin_layout Standard +A few new C-structures were found to be useful in the development of NumPy. + These C-structures are used in at least one C-API call and are therefore + documented here. + The main reason these structures were defined is to make it easy to use + the Python ParseTuple C-API to convert from Python objects to a useful + C-Object. + +\end_layout + +\begin_layout Subsection +PyArray_Dims +\end_layout + +\begin_layout Standard +This structure is very useful when shape and/or strides information is supposed + to be interpreted. + The structure is +\end_layout + +\begin_layout LyX-Code +typedef struct { +\end_layout + +\begin_layout LyX-Code + +\emph on +npy_intp * +\emph default +ptr; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + len; +\end_layout + +\begin_layout LyX-Code +} +\emph on +PyArray_Dims +\emph default +; +\end_layout + +\begin_layout Standard +The members of this structure are +\end_layout + +\begin_layout Description +ptr A pointer to a list of ( +\family typewriter +npy_intp +\family default +) integers which usually represent array shape or array strides. + +\end_layout + +\begin_layout Description +len The length of the list of integers. + It is assumed safe to access +\emph on +ptr +\emph default +[0] to +\emph on +ptr +\emph default +[len-1]. + +\end_layout + +\begin_layout Subsection +PyArray_Chunk +\end_layout + +\begin_layout Standard +This is equivalent to the buffer object structure in Python up to the ptr + member. + On 32-bit platforms ( +\emph on +i.e. + +\emph default + if +\family typewriter +NPY_SIZEOF_INT +\family default +== +\family typewriter +NPY_SIZEOF_INTP +\family default +) or in Python 2.5, the len member also matches an equivalent member of the + buffer object. + It is useful to represent a generic single-segment chunk of memory. + +\end_layout + +\begin_layout LyX-Code +typedef struct { +\end_layout + +\begin_layout LyX-Code + PyObject_HEAD +\end_layout + +\begin_layout LyX-Code + +\emph on +PyObject * +\emph default +base; +\end_layout + +\begin_layout LyX-Code + +\emph on +void * +\emph default +ptr; +\end_layout + +\begin_layout LyX-Code + +\emph on +npy_intp +\emph default + len; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + flags; +\end_layout + +\begin_layout LyX-Code +} +\emph on +PyArray_Chunk +\emph default +; +\end_layout + +\begin_layout Standard +The members are +\end_layout + +\begin_layout Description +PyObject_HEAD Necessary for all Python objects. + Included here so that the +\family typewriter +PyArray_Chunk +\family default + structure matches that of the buffer object (at least to the len member). + +\end_layout + +\begin_layout Description +base The Python object this chunk of memory comes from. + Needed so that memory can be accounted for properly. +\end_layout + +\begin_layout Description +ptr A pointer to the start of the single-segment chunk of memory. + +\end_layout + +\begin_layout Description +len The length of the segment in bytes. +\end_layout + +\begin_layout Description +flags Any data flags ( +\emph on +e.g. + +\emph default + +\family typewriter +NPY_WRITEABLE +\family default +) that should be used to interpret the memory. + +\end_layout + +\begin_layout Subsection +PyArrayInterface +\end_layout + +\begin_layout Standard +The +\family typewriter +PyArrayInterface +\family default + +\begin_inset LatexCommand index +name "PyArrayInterface" + +\end_inset + + structure is defined so that NumPy and other extension modules can use + the rapid array interface protocol. + The +\series bold +__array_struct__ +\series default + method of an object that supports the rapid array interface protocol should + return a +\family typewriter +PyCObject +\family default + that contains a pointer to a +\family typewriter +PyArrayInterface +\family default + structure with the relevant details of the array. + After the new array is created, the attribute should be +\family typewriter +DECREF +\family default +'d which will free the +\family typewriter +PyArrayInterface +\family default + structure. + Remember to +\family typewriter +INCREF +\family default + the object (whose +\series bold +__array_struct__ +\series default + attribute was retrieved) and point the base member of the new +\family typewriter +PyArrayObject +\family default + to this same object. + In this way the memory for the array will be managed correctly. + +\end_layout + +\begin_layout LyX-Code +typedef struct { +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + two; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + nd; +\end_layout + +\begin_layout LyX-Code + +\emph on +char +\emph default + typekind; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + itemsize; +\end_layout + +\begin_layout LyX-Code + +\emph on +int +\emph default + flags; +\end_layout + +\begin_layout LyX-Code + +\emph on +npy_intp * +\emph default +shape; +\end_layout + +\begin_layout LyX-Code + +\emph on +npy_intp * +\emph default +strides; +\end_layout + +\begin_layout LyX-Code + +\emph on +void * +\emph default +data; +\end_layout + +\begin_layout LyX-Code + PyObject *descr; +\end_layout + +\begin_layout LyX-Code +} +\emph on +PyArrayInterface +\emph default +; +\end_layout + +\begin_layout Description +two the integer 2 as a sanity check. +\end_layout + +\begin_layout Description +nd the number of dimensions in the array. +\end_layout + +\begin_layout Description +typekind A character indicating what kind of array is present according + to the typestring convention with 't' -> bitfield, 'b' -> Boolean, 'i' + -> signed integer, 'u' -> unsigned integer, 'f' -> floating point, 'c' + -> complex floating point, 'O' -> object, 'S' -> string, 'U' -> unicode, + 'V' -> void. +\end_layout + +\begin_layout Description +itemsize the number of bytes each item in the array requires. +\end_layout + +\begin_layout Description +flags any of the bits +\family typewriter +NPY_C_CONTIGUOUS +\family default + (1), +\family typewriter +NPY_F_CONTIGUOUS +\family default + (2), +\family typewriter +NPY_ALIGNED +\family default + (0x100), +\family typewriter +NPY_NOTSWAPPED +\family default + (0x200), or +\family typewriter +NPY_WRITEABLE +\family default + (0x400) to indicate something about the data. + The +\family typewriter +NPY_ALIGNED +\family default +, +\family typewriter +NPY_C_CONTIGUOUS +\family default +, and +\family typewriter +NPY_F_CONTIGUOUS +\family default + flags can actually be determined from the other parameters. + The flag +\family typewriter +NPY_ARR_HAS_DESCR +\family default + (0x800) can also be set to indicate to objects consuming the version 3 + array interface that the descr member of the structure is present (it will + be ignored by objects consuming version 2 of the array interface). + +\end_layout + +\begin_layout Description +shape An array containing the size of the array in each dimension. +\end_layout + +\begin_layout Description +strides An array containing the number of bytes to jump to get to the next + element in each dimension. +\end_layout + +\begin_layout Description +data A pointer +\emph on +to +\emph default + the first element of the array. +\end_layout + +\begin_layout Description +descr A Python object describing the data-type in more detail (currently + an array_description list of tuples). + This can be +\family typewriter +NULL +\family default + if +\emph on +typekind +\emph default + and +\emph on +itemsize +\emph default + provide enough information. + +\end_layout + +\begin_layout Subsection +Internally used structures +\end_layout + +\begin_layout Standard +Internally, the code uses some additional Python objects primarily for memory + management. + These types are not accessible directly from Python, and are not exposed + to the C-API. + They are included here only for completeness and assistance in understanding + the code. + +\end_layout + +\begin_layout Subsubsection +PyUFuncLoopObject +\end_layout + +\begin_layout Standard +A loose wrapper for a C-structure that contains the information needed for + looping. + This is useful if you are trying to understand the ufunc looping code. + The +\family typewriter +PyUFuncLoopObject +\family default + is the associated C-structure. + It is defined in the +\family typewriter +ufuncobject.h +\family default + header. +\end_layout + +\begin_layout Subsubsection +PyUFuncReduceObject +\end_layout + +\begin_layout Standard +A loose wrapper for the C-structure that contains the information needed + for reduce-like methods of ufuncs. + This is useful if you are trying to understand the reduce, accumulate, + and reduce-at code. + The +\family typewriter +PyUFuncReduceObject +\family default + is the associated C-structure. + It is defined in the +\family typewriter +ufuncobject.h +\family default + header. +\end_layout + +\begin_layout Subsubsection +PyUFunc_Loop1d +\end_layout + +\begin_layout Standard +A simple linked-list of C-structures containing the information needed to + define a 1-d loop for a ufunc for every defined signature of a user-defined + data-type. + +\end_layout + +\begin_layout Subsubsection +PyArrayMapIter_Type +\end_layout + +\begin_layout Standard +Advanced indexing is handled with this Python type. + It is simply a loose wrapper around the C-structure containing the variables + needed for advanced array indexing. + The associated C-structure, +\family typewriter +PyArrayMapIterObject +\family default +, is useful if you are trying to understand the advanced-index mapping code. + It is defined in the +\family typewriter +arrayobject.h +\family default + header. + This type is not exposed to Python and could be replaced with a C-structure. + As a Python type it takes advantage of reference-counted memory management. +\end_layout + +\begin_layout Chapter +Complete API +\end_layout + +\begin_layout Quotation +The test of a first-rate intelligence is the ability to hold two opposed + ideas in the mind at the same time, and still retain the ability to function. +\end_layout + +\begin_layout Right Address +--- +\emph on +F. + Scott Fitzgerald +\end_layout + +\begin_layout Quotation +For a successful technology, reality must take precedence over public relations, + for Nature cannot be fooled. + +\end_layout + +\begin_layout Right Address +--- +\emph on +Richard P. + Feynman +\end_layout + +\begin_layout Section +Configuration defines +\end_layout + +\begin_layout Standard +When NumPy is built, a configuration file is constructed and placed as config.h + in the NumPy include directory. + This configuration file ensures that specific macros are defined and defines + other macros based on whether or not your system has certain features. + It is included by the arrayobject.h file. + +\end_layout + +\begin_layout Subsection +Guaranteed to be defined +\end_layout + +\begin_layout Standard +The +\series bold +SIZEOF_ +\series default +<CTYPE> constants are defined so that sizeof information is available to + the pre-processor. + +\end_layout + +\begin_layout Description +CHAR_BIT The number of bits of a char. + The char is the unit of all sizeof definitions +\end_layout + +\begin_layout Description +SIZEOF_SHORT sizeof(short) +\end_layout + +\begin_layout Description +SIZEOF_INT sizeof(int) +\end_layout + +\begin_layout Description +SIZEOF_LONG sizeof(long) +\end_layout + +\begin_layout Description +SIZEOF_LONG_LONG sizeof(longlong) where longlong is defined appropriately + on the platform (A macro defines +\series bold +SIZEOF_LONGLONG +\series default + as well.) +\end_layout + +\begin_layout Description +SIZEOF_PY_LONG_LONG +\end_layout + +\begin_layout Description +SIZEOF_FLOAT sizeof(float) +\end_layout + +\begin_layout Description +SIZEOF_DOUBLE sizeof(double) +\end_layout + +\begin_layout Description +SIZEOF_LONG_DOUBLE sizeof(longdouble) (A macro defines +\series bold +SIZEOF_LONGDOUBLE +\series default + as well.) +\end_layout + +\begin_layout Description +SIZEOF_PY_INTPTR_T Size of a pointer on this platform (sizeof(void *)) (A + macro defines SIZEOF_INTP as well.) +\end_layout + +\begin_layout Subsection +Possible defines +\end_layout + +\begin_layout Standard +These defines will cause the compilation to ignore compatibility code that + is placed in NumPy and use the system code instead. + If they are not defined, then the system does not have that capability. +\end_layout + +\begin_layout Description +HAVE_LONGDOUBLE_FUNCS System has C99 long double math functions. +\end_layout + +\begin_layout Description +HAVE_FLOAT_FUNCS System has C99 float math functions. +\end_layout + +\begin_layout Description +HAVE_INVERSE_HYPERBOLIC System has inverse hyperbolic functions: asinh, + acosh, and atanh. +\end_layout + +\begin_layout Description +HAVE_INVERSE_HYPERBOLIC_FLOAT System has C99 float extensions to inverse + hyperbolic functions: asinhf, acoshf, atanhf +\end_layout + +\begin_layout Description +HAVE_INVERSE_HYPERBOLIC_LONGDOUBLE System has C99 long double extensions + to inverse hyperbolic functions: asinhl, acoshl, atanhl. +\end_layout + +\begin_layout Description +HAVE_ISNAN System has an isnan function. +\end_layout + +\begin_layout Description +HAVE_ISINF System has an isinf function. + +\end_layout + +\begin_layout Description +HAVE_LOG1P System has the log1p function: +\begin_inset Formula $\log\left(x+1\right)$ +\end_inset + +. +\end_layout + +\begin_layout Description +HAVE_EXPM1 System has the expm1 function: +\begin_inset Formula $\exp\left(x\right)-1$ +\end_inset + +. +\end_layout + +\begin_layout Description +HAVE_RINT System has the rint function. + +\end_layout + +\begin_layout Section +Array Data Types +\end_layout + +\begin_layout Standard +The standard array can have 21 different data types (and has some support + for adding your own types). + These data types all have an enumerated type, an enumerated type-character, + and a corresponding array scalar Python type object (placed in a hierarchy). + There are also standard C typedefs to make it easier to manipulate elements + of the given data type. + For the numeric types, there are also bit-width equivalent C typedefs and + named typenumbers that make it easier to select the precision desired. + +\end_layout + +\begin_layout Warning +The names for the types in c code follows c naming conventions more closely. + The Python names for these types follow Python conventions. + Thus, NPY_FLOAT picks up a 32-bit float in C, but +\begin_inset Quotes eld +\end_inset + +float_ +\begin_inset Quotes erd +\end_inset + + in python corresponds to a 64-bit double. + The bit-width names can be used in both Python and C for clarity. +\end_layout + +\begin_layout Subsection +Enumerated Types +\end_layout + +\begin_layout Standard +There is a list of enumerated types defined providing the basic 21 data + types plus some useful generic names. + Whenever the code requires a type number, one of these enumerated types + is requested. + The types are all called +\series bold +NPY_ +\series default +<NAME> where <NAME> can be +\end_layout + +\begin_layout Quote + +\series bold +BOOL +\series default +, +\series bold +BYTE +\series default +, +\series bold +UBYTE +\series default +, +\series bold +SHORT +\series default +, +\series bold +USHORT +\series default +, +\series bold +INT +\series default +, +\series bold +UINT +\series default +, +\series bold +LONG +\series default +, +\series bold +ULONG +\series default +, +\series bold +LONGLONG +\series default +, +\series bold +ULONGLONG +\series default +, +\series bold +FLOAT +\series default +, +\series bold +DOUBLE +\series default +, +\series bold +LONGDOUBLE +\series default +, +\series bold +CFLOAT +\series default +, +\series bold +CDOUBLE +\series default +, +\series bold +CLONGDOUBLE +\series default +, +\series bold +OBJECT +\series default +, +\series bold +STRING +\series default +, +\series bold +UNICODE +\series default +, +\series bold +VOID +\end_layout + +\begin_layout Quote + +\series bold +NTYPES +\series default +, +\series bold +NOTYPE +\series default +, +\series bold +USERDEF +\series default +, +\series bold +DEFAULT_TYPE +\end_layout + +\begin_layout Standard +The various character codes indicating certain types are also part of an + enumerated list. + References to type characters (should they be needed at all) should always + use these enumerations. + The form of them is +\series bold +NPY_ +\series default +<NAME> +\series bold +LTR +\series default + where <NAME> can be +\end_layout + +\begin_layout Quote + +\series bold +BOOL +\series default +, +\series bold +BYTE +\series default +, +\series bold +UBYTE +\series default +, +\series bold +SHORT +\series default +, +\series bold +USHORT +\series default +, +\series bold +INT +\series default +, +\series bold +UINT +\series default +, +\series bold +LONG +\series default +, +\series bold +ULONG +\series default +, +\series bold +LONGLONG +\series default +, +\series bold +ULONGLONG +\series default +, +\series bold +FLOAT +\series default +, +\series bold +DOUBLE +\series default +, +\series bold +LONGDOUBLE +\series default +, +\series bold +CFLOAT +\series default +, +\series bold +CDOUBLE +\series default +, +\series bold +CLONGDOUBLE +\series default +, +\series bold +OBJECT +\series default +, +\series bold +STRING +\series default +, +\series bold +VOID +\series default + +\end_layout + +\begin_layout Quote + +\series bold +INTP +\series default +, +\series bold +UINTP +\end_layout + +\begin_layout Quote + +\series bold +GENBOOL +\series default +, +\series bold +SIGNED +\series default +, +\series bold +UNSIGNED +\series default +, +\series bold +FLOATING +\series default +, +\series bold +COMPLEX +\end_layout + +\begin_layout Standard +The latter group of <NAME>s corresponds to letters used in the array interface + typestring specification. + +\end_layout + +\begin_layout Subsection +Defines +\end_layout + +\begin_layout Subsubsection +Max and min values for integers +\end_layout + +\begin_layout Description +NPY_MAX_INT +\series medium +<bits> +\end_layout + +\begin_layout Description +NPY_MAX_UINT +\series medium +<bits> +\end_layout + +\begin_layout Description +NPY_MIN_INT +\series medium +<bits> +\series default + +\end_layout + +\begin_layout Description +\InsetSpace ~ + These are defined for <bits> = 8, 16, 32, 64, 128, and 256 and provide + the maximum (minimum) value of the corresponding (unsigned) integer type. + Note: the actual integer type may not be available on all platforms (i.e. + 128-bit and 256-bit integers are rare). + +\end_layout + +\begin_layout Description +NPY_MIN_ +\series medium +<type> +\end_layout + +\begin_layout Description +\InsetSpace ~ + This is defined for <type> = +\series bold +BYTE +\series default +, +\series bold +SHORT +\series default +, +\series bold +INT +\series default +, +\series bold +LONG +\series default +, +\series bold +LONGLONG +\series default +, +\series bold +INTP +\end_layout + +\begin_layout Description +NPY_MAX_ +\series medium +<type> +\end_layout + +\begin_layout Description +\InsetSpace ~ + This is defined for all defined for <type> = +\series bold +BYTE +\series default +, +\series bold +UBYTE +\series default +, +\series bold +SHORT +\series default +, +\series bold +USHORT +\series default +, +\series bold +INT +\series default +, +\series bold +UINT +\series default +, +\series bold +LONG +\series default +, +\series bold +ULONG +\series default +, +\series bold +LONGLONG +\series default +, +\series bold +ULONGLONG +\series default +, +\series bold +INTP +\series default +, +\series bold +UINTP +\end_layout + +\begin_layout Subsubsection +Number of bits in data types +\end_layout + +\begin_layout Standard +All +\series bold +NPY_SIZEOF_ +\series default +<CTYPE> constants have corresponding +\series bold +NPY_BITSOF_ +\series default +<CTYPE> constants defined. + The +\series bold +NPY_BITSOF_ +\series default +<CTYPE> constants provide the number of bits in the data type. + Specifically, the available <CTYPE>s are +\end_layout + +\begin_layout Quote + +\series bold +BOOL +\series default +, +\series bold +CHAR +\series default +, +\series bold +SHORT +\series default +, +\series bold +INT +\series default +, +\series bold +LONG +\series default +, +\series bold +LONGLONG +\series default +, +\series bold +FLOAT +\series default +, +\series bold +DOUBLE +\series default +, +\series bold +LONGDOUBLE +\end_layout + +\begin_layout Subsubsection +Bit-width references to enumerated typenums +\end_layout + +\begin_layout Standard +All of the numeric data types (integer, floating point, and complex) have + constants that are defined to be a specific enumerated type number. + Exactly which enumerated type a bit-width type refers to is platform dependent. + In particular, the constants available are +\series bold +PyArray_ +\series default +<NAME><BITS> where <NAME> is +\series bold +INT +\series default +, +\series bold +UINT +\series default +, +\series bold +FLOAT +\series default +, +\series bold +COMPLEX +\series default + and <BITS> can be 8, 16, 32, 64, 80, 96, 128, 160, 192, 256, and 512. + Obviously not all bit-widths are available on all platforms for all the + kinds of numeric types. + Commonly 8-, 16-, 32-, 64-bit integers; 32-, 64-bit floats; and 64-, 128-bit + complex types are available. + +\end_layout + +\begin_layout Subsubsection +Integer that can hold a pointer +\end_layout + +\begin_layout Standard +The constants +\series bold +PyArray_INTP +\series default + and +\series bold +PyArray_UINTP +\series default + refer to an enumerated integer type that is large enough to hold a pointer + on the platform. + Index arrays should always be converted to +\series bold +PyArray_INTP +\series default +, because the dimension of the array is of type npy_intp. + +\end_layout + +\begin_layout Subsection +C-type names +\end_layout + +\begin_layout Standard +There are standard variable types for each of the numeric data types and + the bool data type. + Some of these are already available in the C-specification. + You can create variables in extension code with these types. + +\end_layout + +\begin_layout Subsubsection +Boolean +\end_layout + +\begin_layout Description +npy_bool unsigned char; The constants NPY_FALSE and NPY_TRUE are also defined. + +\end_layout + +\begin_layout Subsubsection +(Un)Signed Integer +\end_layout + +\begin_layout Standard +Unsigned versions of the integers can be defined by pre-pending a 'u' to + the front of the integer name. + +\end_layout + +\begin_layout Description +npy_(u)byte (unsigned) char +\end_layout + +\begin_layout Description +npy_(u)short (unsigned) short +\end_layout + +\begin_layout Description +npy_(u)int (unsigned) int +\end_layout + +\begin_layout Description +npy_(u)long (unsigned) long int +\end_layout + +\begin_layout Description +npy_(u)longlong (unsigned long long int) +\end_layout + +\begin_layout Description +npy_(u)intp (unsigned) Py_intptr_t (an integer that is the size of a pointer + on the platform). + +\end_layout + +\begin_layout Subsubsection +(Complex) Floating point +\end_layout + +\begin_layout Description +npy_(c)float float +\end_layout + +\begin_layout Description +npy_(c)double double +\end_layout + +\begin_layout Description +npy_(c)longdouble long double +\end_layout + +\begin_layout Standard +complex types are structures with +\series bold +.real +\series default + and +\series bold +.imag +\series default + members (in that order). +\end_layout + +\begin_layout Subsubsection +Bit-width names +\end_layout + +\begin_layout Standard +There are also typedefs for signed integers, unsigned integers, floating + point, and complex floating point types of specific bit-widths. + The available type names are +\end_layout + +\begin_layout Quote + +\series bold +npy_int +\series default +<bits>, +\series bold +npy_uint +\series default +<bits>, +\series bold +npy_float +\series default +<bits>, and +\series bold +npy_complex +\series default +<bits> +\end_layout + +\begin_layout Standard +where <bits> is the number of bits in the type and can be +\series bold +8 +\series default +, +\series bold +16 +\series default +, +\series bold +32 +\series default +, +\series bold +64 +\series default +, 128, and 256 for integer types; 16, +\series bold +32 +\series default +, +\series bold +64 +\series default +, 80, 96, 128, and 256 for floating-point types; and 32, +\series bold +64 +\series default +, +\series bold +128 +\series default +, 160, 192, and 512 for complex-valued types. + Which bit-widths are available is platform dependent. + The bolded bit-widths are usually available on all platforms. + +\end_layout + +\begin_layout Subsection +Printf Formatting +\end_layout + +\begin_layout Standard +For help in printing, the following strings are defined as the correct format + specifier in printf and related commands. +\end_layout + +\begin_layout Quote + +\series bold +NPY_LONGLONG_FMT +\series default +, +\series bold +NPY_ULONGLONG_FMT +\series default +, +\series bold +NPY_INTP_FMT +\series default +, +\series bold +NPY_UINTP_FMT +\series default +, +\series bold +NPY_LONGDOUBLE_FMT +\end_layout + +\begin_layout Section +Array API +\begin_inset LatexCommand index +name "ndarray!C-API|(" + +\end_inset + + +\begin_inset LatexCommand index +name "C-API!array|(" + +\end_inset + + +\end_layout + +\begin_layout Subsection +Array structure and data access +\end_layout + +\begin_layout Standard +These macros all access the PyArrayObject structure members. + The input argument, obj, can be any +\family typewriter +PyObject* +\family default + that is directly interpretable as a +\family typewriter +PyArrayObject* +\family default + (any instance of the +\series bold +PyArray_Type +\series default + and its sub-types). + +\end_layout + +\begin_layout Description +PyArray_DATA ( +\family typewriter +void* +\family default +) ( +\family typewriter +PyObject* +\family default + obj) +\end_layout + +\begin_layout Description +PyArray_BYTES ( +\family typewriter +char* +\family default +) ( +\family typewriter +PyObject* +\family default + obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + These two macros are similar and obtain the pointer to the data-buffer + for the array. + The first macro can (and should be) assigned to a particular pointer where + the second is for generic processing. + If you have not guaranteed a contiguous and/or aligned array then be sure + you understand how to access the data in the array to avoid memory and/or + alignment problems. + +\end_layout + +\begin_layout Description +PyArray_DIMS ( +\family typewriter +npy_intp* +\family default +) ( +\family typewriter +PyObject* +\family default + arr) +\end_layout + +\begin_layout Description +PyArray_STRIDES ( +\family typewriter +npy_intp* +\family default +) ( +\family typewriter +PyObject* +\family default + arr) +\end_layout + +\begin_layout Description +PyArray_DIM ( +\family typewriter +npy_intp +\family default +) ( +\family typewriter +PyObject* +\family default + arr, +\family typewriter +int +\family default + n) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the shape in the +\emph on +n +\emph default + +\begin_inset Formula $^{\textrm{th}}$ +\end_inset + + dimension. +\end_layout + +\begin_layout Description +PyArray_STRIDE ( +\family typewriter +npy_intp +\family default +) ( +\family typewriter +PyObject* +\family default + arr, +\family typewriter +int +\family default + n) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the stride in the +\emph on +n +\emph default + +\begin_inset Formula $^{\textrm{th}}$ +\end_inset + + dimension. +\end_layout + +\begin_layout Description +PyArray_BASE ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + arr) +\end_layout + +\begin_layout Description +PyArray_DESCR ( +\family typewriter +PyArray_Descr* +\family default +) ( +\family typewriter +PyObject* +\family default + arr) +\end_layout + +\begin_layout Description +PyArray_FLAGS ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + arr) +\end_layout + +\begin_layout Description +PyArray_ITEMSIZE ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the itemsize for the elements of this array. +\end_layout + +\begin_layout Description +PyArray_TYPE ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the (builtin) typenumber for the elements of this array. + +\end_layout + +\begin_layout Description +PyArray_GETITEM ( +\family typewriter +PyObject +\family default + *) ( +\family typewriter +PyObject* +\family default + arr, +\family typewriter +void* +\family default + itemptr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Get a Python object from the ndarray, +\emph on +arr +\emph default +, at the location pointed to by itemptr. + Return +\family typewriter +NULL +\family default + on failure. + +\end_layout + +\begin_layout Description +PyArray_SETITEM ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + arr, +\family typewriter +void* +\family default + itemptr, +\family typewriter +PyObject* +\family default + obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert obj and place it in the ndarray, +\emph on +arr +\emph default +, at the place pointed to by itemptr. + Return -1 if an error occurs or 0 on success. + +\end_layout + +\begin_layout Description +PyArray_SIZE ( +\family typewriter +npy_intp +\family default +) ( +\family typewriter +PyObject* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns the total size (in number of elements) of the array. +\end_layout + +\begin_layout Description +PyArray_Size ( +\family typewriter +npy_intp +\family default +) ( +\family typewriter +PyObject* +\family default + obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns 0 if +\emph on +obj +\emph default + is not a sub-class of bigndarray. + Otherwise, returns the total number of elements in the array. + Safer version of +\family typewriter +PyArray_SIZE +\family default +( +\emph on +obj +\emph default +). +\end_layout + +\begin_layout Description +PyArray_NBYTES ( +\family typewriter +npy_intp +\family default +) ( +\family typewriter +PyObject* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns the total number of bytes consumed by the array. + +\end_layout + +\begin_layout Subsubsection +Data access +\end_layout + +\begin_layout Standard +These functions and macros provide easy access to elements of the ndarray + from C. + These work for all arrays. + You may need to take care when accessing the data in the array, however, + if it is not in machine byte-order, misaligned, or not writeable. + In other words, be sure to respect the state of the flags unless you know + what you are doing, or have previously guaranteed an array that is writeable, + aligned, and in machine byte-order using PyArray_FromAny. + If you wish to handle all types of arrays, the copyswap function for each + type is useful for handling misbehaved arrays. + Some platforms (e.g. + Solaris) do not like misaligned data and will crash if you de-reference + a misaligned pointer. + Other platforms (e.g. + x86 Linux) will just work more slowly with misaligned data. + +\end_layout + +\begin_layout Description +PyArray_GetPtr ( +\family typewriter +void* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + aobj, +\family typewriter +npy_intp* +\family default + ind) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a pointer to the data of the ndarray, +\emph on +aobj +\emph default +, at the N-dimensional index given by the c-array, +\emph on +ind +\emph default +, (which must be at least +\emph on +aobj +\emph default +->nd in size). + You may want to typecast the returned pointer to the data type of the ndarray. +\end_layout + +\begin_layout Description +PyArray_GETPTR1 ( +\family typewriter +void* +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +<npy_intp> +\family default + i) +\end_layout + +\begin_layout Description +PyArray_GETPTR2 ( +\family typewriter +void* +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +<npy_intp> +\family default + i, +\family typewriter +<npy_intp> +\family default + j) +\end_layout + +\begin_layout Description +PyArray_GETPTR3 ( +\family typewriter +void* +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +<npy_intp> +\family default + i, +\family typewriter +<npy_intp> +\family default + j, +\family typewriter +<npy_intp> +\family default + k) +\end_layout + +\begin_layout Description +PyArray_GETPTR4 ( +\family typewriter +void* +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +<npy_intp> +\family default + i, +\family typewriter +<npy_intp> +\family default + j, +\family typewriter +<npy_intp> +\family default + k, +\family typewriter +<npy_intp> +\family default + l) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Quick, inline access to the element at the given coordinates in the ndarray, + +\emph on +obj +\emph default +, which must have respectively 1, 2, 3, or 4 dimensions (this is not checked). + The corresponding +\emph on +i +\emph default +, +\emph on +j +\emph default +, +\emph on +k +\emph default +, and +\emph on +l +\emph default + coordinates can be any integer but will be interpreted as +\family typewriter +npy_intp +\family default +. + You may want to typecast the returned pointer to the data type of the ndarray. + +\end_layout + +\begin_layout Subsection +Creating arrays +\end_layout + +\begin_layout Subsubsection +From scratch +\end_layout + +\begin_layout Description +PyArray_NewFromDescr ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyTypeObject* +\family default + subtype, +\family typewriter +PyArray_Descr* +\family default + descr, +\family typewriter +int +\family default + nd, +\family typewriter +npy_intp* +\family default + dims, +\family typewriter +npy_intp* +\family default + strides, +\family typewriter +void* +\family default + data, +\family typewriter +int +\family default + flags, +\family typewriter +PyObject* +\family default + obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This is the main array creation function. + Most new arrays are created with this flexible function. + The returned object is an object of Python-type +\emph on +subtype +\emph default +, which must be a subtype of +\family typewriter +PyArray_Type +\family default +. + The array has +\emph on +nd +\emph default + dimensions, described by +\emph on +dims +\emph default +. + The data-type descriptor of the new array is +\emph on +descr +\emph default +. + If +\emph on +subtype +\emph default + is not +\family typewriter +&PyArray_Type +\family default + ( +\emph on +e.g. + +\emph default + a Python subclass of the ndarray), then +\emph on +obj +\emph default + is the object to pass to the +\series bold +__array_finalize__ +\series default + method of the subclass. + If +\emph on +data +\emph default + is +\family typewriter +NULL +\family default +, then new memory will be allocated and +\emph on +flags +\emph default + can be non-zero to indicate a Fortran-style contiguous array. + If +\emph on +data +\emph default + is not +\family typewriter +NULL +\family default +, then it is assumed to point to the memory to be used for the array and + the +\emph on +flags +\emph default + argument is used as the new flags for the array (except the state of +\family typewriter +NPY_OWNDATA +\family default + and +\family typewriter +UPDATEIFCOPY +\family default + flags of the new array will be reset). + In addition, if +\emph on +data +\emph default + is non-NULL, then +\emph on +strides +\emph default + can also be provided. + If +\emph on +strides +\emph default + is +\family typewriter +NULL +\family default +, then the array strides are computed as C-style contiguous (default) or + Fortran-style contiguous ( +\emph on +flags +\emph default + is nonzero for +\emph on +data +\emph default += +\family typewriter +NULL +\family default + or +\emph on +flags +\emph default + & +\family typewriter +NPY_F_CONTIGUOUS +\family default + is nonzero non-NULL +\emph on +data +\emph default +). + Any provided +\emph on +dims +\emph default + and +\emph on +strides +\emph default + are copied into newly allocated dimension and strides arrays for the new + array object. +\end_layout + +\begin_layout Description +PyArray_New ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyTypeObject* +\family default + subtype, +\family typewriter +int +\family default + nd, +\family typewriter +npy_intp* +\family default + dims, +\family typewriter +int +\family default + type_num, +\family typewriter +npy_intp* +\family default + strides, +\family typewriter +void* +\family default + data, +\family typewriter +int +\family default + itemsize, +\family typewriter +int +\family default + flags, +\family typewriter +PyObject* +\family default + obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This is similar to +\family typewriter +PyArray +\family default +\series bold +_ +\family typewriter +\series default +DescrNew +\family default +(...) except you specify the data-type descriptor with +\emph on +type_num +\emph default + and +\emph on +itemsize +\emph default +, where +\emph on +type_num +\emph default + corresponds to a builtin (or user-defined) type. + If the type always has the same number of bytes, then itemsize is ignored. + Otherwise, itemsize specifies the particular size of this array. + +\end_layout + +\begin_layout Warning +If data is passed to +\family typewriter +PyArray_NewFromDescr +\family default + or +\family typewriter +PyArray_New +\family default +, this memory must not be deallocated until the new array is deleted. + If this data came from another Python object, this can be accomplished + using +\family typewriter +Py_INCREF +\family default + on that object and setting the base member of the new array to point to + that object. + If strides are passed in they must be consistent with the dimensions, the + itemsize, and the data of the array. +\end_layout + +\begin_layout Description +PyArray_SimpleNew ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +int +\family default + nd, +\family typewriter +npy_intp* +\family default + dims, +\family typewriter +int +\family default + typenum) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Create a new unitialized array of type, +\emph on +typenum +\emph default +, whose size in each of +\emph on +nd +\emph default + dimensions is given by the integer array, +\emph on +dims +\emph default +. + This function cannot be used to create a flexible-type array (no itemsize + given). +\end_layout + +\begin_layout Description +PyArray_SimpleNewFromData ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +int +\family default + nd, +\family typewriter +npy_intp* +\family default + dims, +\family typewriter +int +\family default + typenum, +\family typewriter +void* +\family default + data) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Create an array wrapper around +\emph on +data +\emph default + pointed to by the given pointer. + The array flags will have a default that the data area is well-behaved + and C-style contiguous. + The shape of the array is given by the +\emph on +dims +\emph default + c-array of length +\emph on +nd +\emph default +. + The data-type of the array is indicated by +\emph on +typenum +\emph default +. + +\end_layout + +\begin_layout Description +PyArray_SimpleNewFromDescr ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +int +\family default + nd, +\family typewriter +npy_intp* +\family default + dims, +\family typewriter +PyArray_Descr* +\family default + descr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Create a new array with the provided data-type descriptor, +\emph on +descr +\emph default +, of the shape deteremined by +\emph on +nd +\emph default + and +\emph on +dims +\emph default +. +\end_layout + +\begin_layout Description +PyArray_FILLWBYTE ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +int +\family default + val) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Fill the array pointed to by +\emph on +obj +\emph default +---which must be a (subclass of) bigndarray---with the contents of +\emph on +val +\emph default + (evaluated as a byte). +\end_layout + +\begin_layout Description +PyArray_Zeros ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +int +\family default + nd, +\family typewriter +npy_intp* +\family default + dims, +\family typewriter +PyArray_Descr* +\family default + dtype, +\family typewriter +int +\family default + fortran) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct a new +\emph on +nd +\emph default +-dimensional array with shape given by +\emph on +dims +\emph default + and data type given by +\emph on +dtype +\emph default +. + If +\emph on +fortran +\emph default + is non-zero, then a Fortran-order array is created, otherwise a C-order + array is created. + Fill the memory with zeros (or the 0 object if +\emph on +dtype +\emph default + corresponds to +\family typewriter +PyArray_OBJECT +\family default +). + +\end_layout + +\begin_layout Description +PyArray_ZEROS ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +int +\family default + nd, +\family typewriter +npy_intp* +\family default + dims, +\family typewriter +int +\family default + type_num, +\family typewriter +int +\family default + fortran) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Macro form of +\family typewriter +PyArray_Zeros +\family default + which takes a type-number instead of a data-type object. +\end_layout + +\begin_layout Description +PyArray_Empty ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +int +\family default + nd, +\family typewriter +npy_intp* +\family default + dims, +\family typewriter +PyArray_Descr* +\family default + dtype, +\family typewriter +int +\family default + fortran) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct a new +\emph on +nd +\emph default +-dimensional array with shape given by +\emph on +dims +\emph default + and data type given by +\emph on +dtype +\emph default +. + If +\emph on +fortran +\emph default + is non-zero, then a Fortran-order array is created, otherwise a C-order + array is created. + The array is uninitialized unless the data type corresponds to +\family typewriter +PyArray_OBJECT +\family default + in which case the array is filled with +\family typewriter +Py_None +\family default +. + +\end_layout + +\begin_layout Description +PyArray_EMPTY ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +int +\family default + nd, +\family typewriter +npy_intp* +\family default + dims, +\family typewriter +int +\family default + typenum, +\family typewriter +int +\family default + fortran) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Macro form of +\family typewriter +PyArray_Empty +\family default + which takes a type-number, +\emph on +typenum +\emph default +, instead of a data-type object. +\end_layout + +\begin_layout Description +PyArray_Arange ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +double +\family default + start, +\family typewriter +double +\family default + stop, +\family typewriter +double +\family default + step, +\family typewriter +int +\family default + typenum) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct a new 1-dimensional array of data-type, +\emph on +typenum +\emph default +, that ranges from +\emph on +start +\emph default + to +\emph on +stop +\emph default + (exclusive) in increments of +\emph on +step +\emph default +. + Equivalent to +\series bold +arange +\series default +( +\emph on +start +\emph default +, +\emph on +stop +\emph default +, +\emph on +step +\emph default +, dtype). +\end_layout + +\begin_layout Description +PyArray_ArangeObj ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + start, +\family typewriter +PyObject* +\family default + stop, +\family typewriter +PyObject* +\family default + step, +\family typewriter +PyArray_Descr* +\family default + descr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct a new 1-dimensional array of data-type determined by +\family typewriter +descr +\family default +, that ranges from +\family typewriter +start +\family default + to +\family typewriter +stop +\family default + (exclusive) in increments of +\family typewriter +step +\family default +. + Equivalent to arange( +\family typewriter +start +\family default +, +\family typewriter +stop +\family default +, +\family typewriter +step +\family default +, +\family typewriter +typenum +\family default +). + +\end_layout + +\begin_layout Subsubsection +From other objects +\end_layout + +\begin_layout Description +PyArray_FromAny ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + op, +\family typewriter +PyArray_Descr* +\family default + dtype, +\family typewriter +int +\family default + min_depth, +\family typewriter +int +\family default + max_depth, +\family typewriter +int +\family default + requirements, +\family typewriter +PyObject* +\family default + context) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This is the main function used to obtain an array from any nested sequence, + or object that exposes the array interface, +\family typewriter +op +\family default +. + The parameters allow specification of the required +\emph on +type +\emph default +, the minimum ( +\emph on +min_depth +\emph default +) and maximum ( +\emph on +max_depth +\emph default +) number of dimensions acceptable, and other +\emph on +requirements +\emph default + for the array. + The +\emph on +dtype +\emph default + argument needs to be a +\family typewriter +PyArray_Descr +\family default + structure indicating the desired data-type (including required byteorder). + The +\emph on +dtype +\emph default + argument may be NULL, indicating that any data-type (and byteorder) is + acceptable. + If you want to use +\family typewriter +NULL +\family default + for the +\emph on +dtype +\emph default + and ensure the array is notswapped then use +\family typewriter +PyArray_CheckFromAny +\family default +. + A value of 0 for either of the depth parameters causes the parameter to + be ignored. + Any of the following array flags can be added ( +\emph on +e.g. + +\emph default + using |) to get the +\emph on +requirements +\emph default + argument. + If your code can handle general ( +\emph on +e.g. + +\emph default + strided, byte-swapped, or unaligned arrays) then +\emph on +requirements +\emph default + may be 0. + Also, if +\emph on +op +\emph default + is not already an array (or does not expose the array interface), then + a new array will be created (and filled from +\emph on +op +\emph default + using the sequence protocol). + The new array will have +\family typewriter +NPY_DEFAULT +\family default + as its flags member. + The +\emph on +context +\emph default + argument is passed to the +\series bold +__array__ +\series default + method of +\emph on +op +\emph default + and is only used if the array is constructed that way. + +\end_layout + +\begin_deeper +\begin_layout Description +NPY_C_CONTIGUOUS Make sure the returned array is C-style contiguous +\end_layout + +\begin_layout Description +NPY_F_CONTIGUOUS Make sure the returned array is Fortran-style contiguous. + +\end_layout + +\begin_layout Description +NPY_ALIGNED Make sure the returned array is aligned on proper boundaries + for its data type. + An aligned array has the data pointer and every strides factor as a multiple + of the alignment factor for the data-type-descriptor. +\end_layout + +\begin_layout Description +NPY_WRITEABLE Make sure the returned array can be written to. + +\end_layout + +\begin_layout Description +NPY_ENSURECOPY Make sure a copy is made of +\emph on +op +\emph default +. + If this flag is not present, data is not copied if it can be avoided. + +\end_layout + +\begin_layout Description +NPY_ENSUREARRAY Make sure the result is a base-class ndarray or bigndarray. + By default, if +\emph on +op +\emph default + is an instance of a subclass of the bigndarray, an instance of that same + subclass is returned. + If this flag is set, an ndarray object will be returned instead. +\end_layout + +\begin_layout Description +NPY_FORCECAST Force a cast to the output type even if it cannot be done + safely. + Without this flag, a data cast will occur only if it can be done safely, + otherwise an error is reaised. + +\end_layout + +\begin_layout Description +NPY_UPDATEIFCOPY If +\emph on +op +\emph default + is already an array, but does not satisfy the requirements, then a copy + is made (which will satisfy the requirements). + If this flag is present and a copy (of an object that is already an array) + must be made, then the corresponding +\family typewriter +NPY_UPDATEIFCOPY +\family default + flag is set in the returned copy and +\emph on +op +\emph default + is made to be read-only. + When the returned copy is deleted (presumably after your calculations are + complete), its contents will be copied back into +\emph on +op +\emph default + and the +\emph on +op +\emph default + array will be made writeable again. + If +\emph on +op +\emph default + is not writeable to begin with, then an error is raised. + If +\emph on +op +\emph default + is not already an array, then this flag has no effect. +\end_layout + +\begin_layout Description +NPY_BEHAVED +\family typewriter +NPY_ALIGNED +\family default + | +\family typewriter +NPY_WRITEABLE +\end_layout + +\begin_layout Description +NPY_CARRAY +\family typewriter +NPY_C_CONTIGUOUS +\family default + | +\family typewriter +NPY_BEHAVED +\end_layout + +\begin_layout Description +NPY_CARRAY_RO +\family typewriter +NPY_C_CONTIGUOUS +\family default + | +\family typewriter +NPY_ALIGNED +\end_layout + +\begin_layout Description +NPY_FARRAY +\family typewriter +NPY_F_CONTIGUOUS +\family default + | +\family typewriter +NPY_BEHAVED +\end_layout + +\begin_layout Description +NPY_FARRAY_RO +\family typewriter +NPY_F_CONTIGUOUS +\family default + | +\family typewriter +NPY_ALIGNED +\end_layout + +\begin_layout Description +NPY_DEFAULT +\family typewriter +NPY_CARRAY +\end_layout + +\begin_layout Description +NPY_IN_ARRAY +\family typewriter +NPY_CONTIGUOUS +\family default + | +\family typewriter +NPY_ALIGNED +\end_layout + +\begin_layout Description +NPY_IN_FARRAY +\family typewriter +NPY_F_CONTIGUOUS +\family default + | +\family typewriter +NPY_ALIGNED +\end_layout + +\begin_layout Description +NPY_INOUT_ARRAY +\family typewriter +NPY_C_CONTIGUOUS +\family default + | +\family typewriter +NPY_WRITEABLE +\family default + | +\family typewriter +NPY_ALIGNED +\end_layout + +\begin_layout Description +NPY_INOUT_FARRAY +\family typewriter +NPY_F_CONTIGUOUS +\family default + | +\family typewriter +NPY_WRITEABLE +\family default + | +\family typewriter +NPY_ALIGNED +\end_layout + +\begin_layout Description +NPY_OUT_ARRAY +\family typewriter +NPY_C_CONTIGUOUS +\family default + | +\family typewriter +NPY_WRITEABLE +\family default + | +\family typewriter +NPY_ALIGNED +\family default + | +\family typewriter +NPY_UPDATEIFCOPY +\end_layout + +\begin_layout Description +NPY_OUT_FARRAY +\family typewriter +NPY_F_CONTIGUOUS +\family default + | +\family typewriter +NPY_WRITEABLE +\family default + | +\family typewriter +NPY_ALIGNED +\family default + | +\family typewriter +UPDATEIFCOPY +\end_layout + +\end_deeper +\begin_layout Description +PyArray_CheckFromAny ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + op, +\family typewriter +PyArray_Descr* +\family default + dtype, +\family typewriter +int +\family default + min_depth, +\family typewriter +int +\family default + max_depth, +\family typewriter +int +\family default + requirements, +\family typewriter +PyObject* +\family default + context) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Nearly identical to +\family typewriter +PyArray_FromAny +\family default +(...) except +\emph on +requirements +\emph default + can contain +\family typewriter +NPY_NOTSWAPPED +\family default + (over-riding the specification in +\emph on +dtype +\emph default +) and +\family typewriter +NPY_ELEMENTSTRIDES +\family default + which indicates that the array should be aligned in the sense that the + strides are multiples of the element size. + +\end_layout + +\begin_layout Description +NPY_NOTSWAPPED Make sure the returned array has a data-type descriptor that + is in machine byte-order, over-riding any specification in the +\emph on +dtype +\emph default + argument. + Normally, the byte-order requirement is determined by the +\emph on +dtype +\emph default + argument. + If this flag is set and the dtype argument does not indicate a machine + byte-order descriptor (or is NULL and the object is already an array with + a data-type descriptor that is not in machine byte-order), then a new data-type + descriptor is created and used with its byte-order field set to native. +\end_layout + +\begin_layout Description +NPY_BEHAVED_NS +\family typewriter +NPY_ALIGNED +\family default + | +\family typewriter +NPY_WRITEABLE +\family default + | +\family typewriter +NPY_NOTSWAPPED +\end_layout + +\begin_layout Description +NPY_ELEMENTSTRIDES Make sure the returned array has strides that are multiples + of the element size. + +\end_layout + +\begin_layout Description +PyArray_FromArray ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + op, +\family typewriter +PyArray_Descr* +\family default + newtype, +\family typewriter +int +\family default + requirements) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Special case of +\family typewriter +PyArray_FromAny +\family default + for when +\emph on +op +\emph default + is already an array but it needs to be of a specific +\emph on +newtype +\emph default + (including byte-order) or has certain +\emph on +requirements +\emph default +. +\end_layout + +\begin_layout Description +PyArray_FromStructInterface ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns an ndarray object from a Python object that exposes the +\series bold +__array_struct__ +\series default + method and follows the array interface protocol. + If the object does not contain this method then a borrowed reference to + +\family typewriter +Py_NotImplemented +\family default + is returned. +\end_layout + +\begin_layout Description +PyArray_FromInterface ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns an ndarray object from a Python object that exposes the +\series bold +__array_shape__ +\series default + and +\series bold +__array_typestr__ +\series default + methods following the array interface protocol. + If the object does not contain one of these method then a borrowed reference + to +\family typewriter +Py_NotImplemented +\family default + is returned. +\end_layout + +\begin_layout Description +PyArray_FromArrayAttr ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + op, +\family typewriter +PyArray_Descr* +\family default + dtype, +\family typewriter +PyObject* +\family default + context) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an ndarray object from a Python object that exposes the +\series bold +__array__ +\series default + method. + The +\series bold +__array__ +\series default + method can take 0, 1, or 2 arguments ([dtype, context]) where +\emph on +context +\emph default + is used to pass information about where the +\series bold +__array__ +\series default + method is being called from (currently only used in ufuncs). + +\end_layout + +\begin_layout Description +PyArray_ContiguousFromAny ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + op, +\family typewriter +int +\family default + typenum, +\family typewriter +int +\family default + min_depth, +\family typewriter +int +\family default + max_depth) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This function returns a (C-style) contiguous and behaved function array + from any nested sequence or array interface exporting object, +\emph on +op +\emph default +, of (non-flexible) type given by the enumerated +\emph on +typenum +\emph default +, of minimum depth +\emph on +min_depth +\emph default +, and of maximum depth +\emph on +max_depth +\emph default +. + Equivalent to a call to +\family typewriter +PyArray_FromAny +\family default + with requirements set to +\family typewriter +NPY_DEFAULT +\family default + and the type_num member of the type argument set to +\emph on +typenum +\emph default +. +\end_layout + +\begin_layout Description +PyArray_FromObject (PyObject *) (PyObject * op, int typenum, int min_depth, + int max_depth) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an aligned and in native-byteorder array from any nested sequence + or array-interface exporting object, op, of a type given by the enumerated + typenum. + The minimum number of dimensions the array can have is given by min_depth + while the maximum is max_depth. + This is equivalent to a call to PyArray_FromAny with requirements set to + BEHAVED. + +\end_layout + +\begin_layout Description +PyArray_EnsureArray ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This function +\series bold +steals a reference +\series default + to +\family typewriter +op +\family default + and makes sure that +\family typewriter +op +\family default + is a base-class ndarray. + It special cases array scalars, but otherwise calls +\series bold +PyArray_FromAny +\series default +( +\family typewriter +op +\family default +, NULL, 0, 0, NPY_ENSUREARRAY). +\end_layout + +\begin_layout Description +PyArray_FromString ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +char* +\family default + string, +\family typewriter +npy_intp +\family default + slen, +\family typewriter +PyArray_Descr* +\family default + dtype, +\family typewriter +npy_intp +\family default + num, +\family typewriter +char* +\family default + sep) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct a one-dimensional ndarray of a single type from a binary or (ASCII) + text +\family typewriter +string +\family default + of length +\family typewriter +slen +\family default +. + The data-type of the array to-be-created is given by +\family typewriter +dtype +\family default +. + If num is -1, then +\series bold +copy +\series default + the entire string and return an appropriately sized array, otherwise, +\family typewriter +num +\family default + is the number of items to +\series bold +copy +\series default + from the string. + If +\family typewriter +sep +\family default + is NULL (or +\begin_inset Quotes eld +\end_inset + + +\begin_inset Quotes erd +\end_inset + +), then interpret the string as bytes of binary data, otherwise convert + the sub-strings separated by +\family typewriter +sep +\family default + to items of data-type +\family typewriter +dtype +\family default +. + Some data-types may not be readable in text mode and an error will be raised + if that occurs. + All errors return NULL. + +\end_layout + +\begin_layout Description +PyArray_FromFile ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +FILE* +\family default + fp, +\family typewriter +PyArray_Descr* +\family default + dtype, +\family typewriter +npy_intp +\family default + num, +\family typewriter +char* +\family default + sep) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct a one-dimensional ndarray of a single type from a binary or text + file. + The open file pointer is +\family typewriter +fp +\family default +, the data-type of the array to be created is given by +\family typewriter +dtype +\family default +. + This must match the data in the file. + If +\family typewriter +num +\family default + is -1, then read until the end of the file and return an appropriately + sized array, otherwise, +\family typewriter +num +\family default + is the number of items to read. + If +\family typewriter +sep +\family default + is NULL (or +\begin_inset Quotes eld +\end_inset + + +\begin_inset Quotes erd +\end_inset + +), then read from the file in binary mode, otherwise read from the file + in text mode with +\family typewriter +sep +\family default + providing the item separator. + Some array types cannot be read in text mode in which case an error is + raised. +\end_layout + +\begin_layout Description +PyArray_FromBuffer ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + buf, +\family typewriter +PyArray_Descr* +\family default + dtype, +\family typewriter +npy_intp +\family default + count, +\family typewriter +npy_intp +\family default + offset) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct a one-dimensional ndarray of a single type from an object, +\family typewriter +buf +\family default +, that exports the (single-segment) buffer protocol (or has an attribute + __buffer__ that returns an object that exports the buffer protocol). + A writeable buffer will be tried first followed by a read-only buffer. + The NPY_WRITEABLE flag of the returned array will reflect which one was + successful. + The data is assumed to start at +\family typewriter +offset +\family default + bytes from the start of the memory location for the object. + The type of the data in the buffer will be interpreted depending on the + data-type descriptor, +\family typewriter +dtype. + +\family default + If +\family typewriter +count +\family default + is negative then it will be determined from the size of the buffer and + the requested itemsize, otherwise, +\family typewriter +count +\family default + represents how many elements should be converted from the buffer. + +\end_layout + +\begin_layout Description +PyArray_CopyInto ( +\family typewriter +int +\family default +) ( +\family typewriter +PyArrayObject* +\family default + dest, +\family typewriter +PyArrayObject* +\family default + src) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Copy from the source array, +\family typewriter +src +\family default +, into the destination array, +\family typewriter +dest +\family default +, performing a data-type conversion if necessary. + If an error occurs return -1 (otherwise 0). + The shape of +\family typewriter +src +\family default + must be broadcastable to the shape of +\family typewriter +dest +\family default +. + The data areas of dest and src must not overlap. + +\end_layout + +\begin_layout Description +PyArray_MoveInto ( +\family typewriter +int +\family default +) ( +\family typewriter +PyArrayObject* +\family default + dest, +\family typewriter +PyArrayObject* +\family default + src) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Move data from the source array, +\family typewriter +src +\family default +, into the destination array, +\family typewriter +dest +\family default +, performing a data-type conversion if necessary. + If an error occurs return -1 (otherwise 0). + The shape of +\family typewriter +src +\family default + must be broadcastable to the shape of +\family typewriter +dest +\family default +. + The data areas of dest and src may overlap. + +\end_layout + +\begin_layout Description +PyArray_GETCONTIGUOUS ( +\family typewriter +PyArrayObject* +\family default +) ( +\family typewriter +PyObject* +\family default + op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + If +\family typewriter +op +\family default + is already (C-style) contiguous and well-behaved then just return a reference, + otherwise return a (contiguous and well-behaved) copy of the array. + The parameter op must be a (sub-class of an) ndarray and no checking for + that is done. +\end_layout + +\begin_layout Description +PyArray_FROM_O ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert +\family typewriter +obj +\family default + to an ndarray. + The argument can be any nested sequence or object that exports the array + interface. + This is a macro form of +\family typewriter +PyArray_FromAny +\family default + using +\family typewriter +NULL +\family default +, 0, 0, 0 for the other arguments. + Your code must be able to handle any data-type descriptor and any combination + of data-flags to use this macro. + +\end_layout + +\begin_layout Description +PyArray_FROM_OF ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +int +\family default + requirements) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Similar to +\family typewriter +PyArray_FROM_O +\family default + except it can take an argument of +\emph on +requirements +\emph default + indicating properties the resulting array must have. + Available requirements that can be enforced are +\family typewriter +NPY_CONTIGUOUS +\family default +, +\family typewriter +NPY_F_CONTIGUOUS +\family default +, +\family typewriter +NPY_ALIGNED +\family default +, +\family typewriter +NPY_WRITEABLE +\family default +, +\family typewriter +NPY_NOTSWAPPED +\family default +, +\family typewriter +NPY_ENSURECOPY +\family default +, +\family typewriter +NPY_UPDATEIFCOPY +\family default +, +\family typewriter +NPY_FORCECAST +\family default +, and +\family typewriter +NPY_ENSUREARRAY +\family default +. + Standard combinations of flags can also be used: +\end_layout + +\begin_layout Description +PyArray_FROM_OT ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +int +\family default + typenum) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Similar to +\family typewriter +PyArray_FROM_O +\family default + except it can take an argument of +\emph on +typenum +\emph default + specifying the type-number the returned array. +\end_layout + +\begin_layout Description +PyArray_FROM_OTF ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +int +\family default + typenum, +\family typewriter +int +\family default + requirements) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Combination of +\family typewriter +PyArray_FROM_OF +\family default + and +\family typewriter +PyArray_FROM_OT +\family default + allowing both a +\emph on +typenum +\emph default + and a +\emph on +flags +\emph default + argument to be provided.. +\end_layout + +\begin_layout Description +PyArray_FROMANY ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +int +\family default + typenum, +\family typewriter +int +\family default + min, +\family typewriter +int +\family default + max, +\family typewriter +int +\family default + requirements) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Similar to +\family typewriter +PyArray_FromAny +\family default + except the data-type is specified using a typenumber. + +\family typewriter +PyArray_DescrFromType +\family default +( +\emph on +typenum +\emph default +) is passed directly to +\family typewriter +PyArray_FromAny +\family default +. + This macro also adds +\family typewriter +NPY_DEFAULT +\family default + to requirements if +\family typewriter +NPY_ENSURECOPY +\family default + is passed in as requirements. + +\end_layout + +\begin_layout Description +PyArray_CheckAxis ( +\family typewriter +PyObject* +\family default +)( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +int* +\family default + axis, +\family typewriter +int +\family default + requirements) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Encapsulate the functionality of functions and methods that take the axis= + keyword and work properly with None as the axis argument. + The input array is +\family typewriter +obj +\family default +, while +\family typewriter +*axis +\family default + is a converted integer (so that >=MAXDIMS is the None value), and +\family typewriter +requirements +\family default + gives the needed properties of +\family typewriter +obj +\family default +. + The output is a converted version of the input so that requirements are + met and if needed a flattening has occurred. + On output negative values of +\family typewriter +*axis +\family default + are converted and the new value is checked to ensure consistency with the + shape of +\family typewriter +obj +\family default +. +\end_layout + +\begin_layout Subsection +Dealing with types +\end_layout + +\begin_layout Subsubsection +General check of Python Type +\end_layout + +\begin_layout Description +PyArray_Check (op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if +\emph on +op +\emph default + is a Python object whose type is a sub-type of +\family typewriter +PyArray_Type +\family default +. + +\end_layout + +\begin_layout Description +PyArray_CheckExact (op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if +\emph on +op +\emph default + is a Python object with type +\family typewriter +PyArray_Type +\family default +. +\end_layout + +\begin_layout Description +PyArray_HasArrayInterface (op, out) +\end_layout + +\begin_layout Description +\InsetSpace ~ + If +\family typewriter +op +\family default + implements any part of the array interface, then +\family typewriter +out +\family default + will contain a new reference to the newly created ndarray using the interface + or +\family typewriter +out +\family default + will contain +\family typewriter +NULL +\family default + if an error during conversion occurs. + Otherwise, out will contain a borrowed reference to +\family typewriter +Py_NotImplemented +\family default + and no error condition is set. + +\end_layout + +\begin_layout Description +PyArray_HasArrayInterfaceType (op, type, context, out) +\end_layout + +\begin_layout Description +\InsetSpace ~ + If +\family typewriter +op +\family default + implements any part of the array interface, then +\family typewriter +out +\family default + will contain a new reference to the newly created ndarray using the interface + or +\family typewriter +out +\family default + will contain +\family typewriter +NULL +\family default + if an error during conversion occurs. + Otherwise, out will contain a borrowed reference to Py_NotImplemented and + no error condition is set. + This version allows setting of the type and context in the part of the + array interface that looks for the +\series bold +__array__ +\series default + attribute. + +\end_layout + +\begin_layout Description +PyArray_IsZeroDim (op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if +\emph on +op +\emph default + is an instance of (a subclass of) +\family typewriter +PyArray_Type +\family default + and has 0 dimensions. +\end_layout + +\begin_layout Description +PyArray_IsScalar (op, cls) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if +\emph on +op +\emph default + is an instance of +\family typewriter +Py<cls>ArrType_Type +\family default +. +\end_layout + +\begin_layout Description +PyArray_CheckScalar (op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if +\emph on +op +\emph default + is either an array scalar (an instance of a sub-type of +\family typewriter +PyGenericArr_Type +\family default +), or an instance of (a sub-class of) +\family typewriter +PyArray_Type +\family default + whose dimensionality is 0. +\end_layout + +\begin_layout Description +PyArray_IsPythonScalar (op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if +\emph on +op +\emph default + is a builtin Python +\begin_inset Quotes eld +\end_inset + +scalar +\begin_inset Quotes erd +\end_inset + + object (int, float, complex, str, unicode, long, bool). +\end_layout + +\begin_layout Description +PyArray_IsAnyScalar (op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if +\emph on +op +\emph default + is either a Python scalar or an array scalar (an instance of a sub-type + of +\family typewriter +PyGenericArr_Type +\family default +). + +\end_layout + +\begin_layout Subsubsection +Data-type checking +\end_layout + +\begin_layout Standard +For the typenum macros, the argument is an integer representing an enumerated + array data type. + For the array type checking macros the argument must be a +\family typewriter +PyObject* +\family default + that can be directly interpreted as a +\family typewriter +PyArrayObject* +\family default +. + +\end_layout + +\begin_layout Description +PyTypeNum_ISUNSIGNED (num) +\end_layout + +\begin_layout Description +PyDataType_ISUNSIGNED (descr) +\end_layout + +\begin_layout Description +PyArray_ISUNSIGNED (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Type represents an unsigned integer. +\end_layout + +\begin_layout Description +PyTypeNum_ISSIGNED (num) +\end_layout + +\begin_layout Description +PyDataType_ISSIGNED (descr) +\end_layout + +\begin_layout Description +PyArray_ISSIGNED (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Type represents a signed integer. +\end_layout + +\begin_layout Description +PyTypeNum_ISINTEGER (num) +\end_layout + +\begin_layout Description +PyDataType_ISINTEGER (descr) +\end_layout + +\begin_layout Description +PyArray_ISINTEGER (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Type represents any integer. +\end_layout + +\begin_layout Description +PyTypeNum_ISFLOAT (num) +\end_layout + +\begin_layout Description +PyDataType_ISFLOAT (descr) +\end_layout + +\begin_layout Description +PyArray_ISFLOAT (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Type represents any floating point number. +\end_layout + +\begin_layout Description +PyTypeNum_ISCOMPLEX (num) +\end_layout + +\begin_layout Description +PyDataType_ISCOMPLEX (descr) +\end_layout + +\begin_layout Description +PyArray_ISCOMPLEX (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Type represents any complex floating point number. +\end_layout + +\begin_layout Description +PyTypeNum_ISNUMBER (num) +\end_layout + +\begin_layout Description +PyDataType_ISNUMBER (descr) +\end_layout + +\begin_layout Description +PyArray_ISNUMBER (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Type represents any integer, floating point, or complex floating point + number. +\end_layout + +\begin_layout Description +PyTypeNum_ISSTRING (num) +\end_layout + +\begin_layout Description +PyDataType_ISSTRING (descr) +\end_layout + +\begin_layout Description +PyArray_ISSTRING (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Type represents a string data type. +\end_layout + +\begin_layout Description +PyTypeNum_ISPYTHON (num) +\end_layout + +\begin_layout Description +PyDataType_ISPYTHON (descr) +\end_layout + +\begin_layout Description +PyArray_ISPYTHON (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Type represents an enumerated type corresponding to one of the standard + Python scalar (bool, int, float, or complex). + +\end_layout + +\begin_layout Description +PyTypeNum_ISFLEXIBLE (num) +\end_layout + +\begin_layout Description +PyDataType_ISFLEXIBLE (descr) +\end_layout + +\begin_layout Description +PyArray_ISFLEXIBLE (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Type represents one of the flexible array types ( +\family typewriter +NPY_STRING +\family default +, +\family typewriter +NPY_UNICODE +\family default +, or +\family typewriter +NPY_VOID +\family default +). +\end_layout + +\begin_layout Description +PyTypeNum_ISUSERDEF (num) +\end_layout + +\begin_layout Description +PyDataType_ISUSERDEF (descr) +\end_layout + +\begin_layout Description +PyArray_ISUSERDEF (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Type represents a user-defined type. +\end_layout + +\begin_layout Description +PyTypeNum_ISEXTENDED (num) +\end_layout + +\begin_layout Description +PyDataType_ISEXTENDED (descr) +\end_layout + +\begin_layout Description +PyArray_ISEXTENDED (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Type is either flexible or user-defined. +\end_layout + +\begin_layout Description +PyTypeNum_ISOBJECT (num) +\end_layout + +\begin_layout Description +PyDataType_ISOBJECT (descr) +\end_layout + +\begin_layout Description +PyArray_ISOBJECT (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Type represents object data type. +\end_layout + +\begin_layout Description +PyTypeNum_ISBOOL (num) +\end_layout + +\begin_layout Description +PyDataType_ISBOOL (descr) +\end_layout + +\begin_layout Description +PyArray_ISBOOL (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Type represents Boolean data type. +\end_layout + +\begin_layout Description +PyDataType_HASFIELDS (descr) +\end_layout + +\begin_layout Description +PyArray_HASFIELDS (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Type has fields associated with it. +\end_layout + +\begin_layout Description +PyArray_ISNOTSWAPPED (m) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if the data area of the ndarray +\emph on +m +\emph default + is in machine byte-order according to the array's data-type descriptor. +\end_layout + +\begin_layout Description +PyArray_ISBYTESWAPPED (m) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if the data area of the ndarray +\emph on +m +\emph default + is +\series bold +not +\series default + in machine byte-order according to the array's data-type descriptor. + +\end_layout + +\begin_layout Description +PyArray_EquivTypes ( +\family typewriter +Bool +\family default +) ( +\family typewriter +PyArray_Descr* +\family default + type1, +\family typewriter +PyArray_Descr* +\family default + type2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return +\family typewriter +NPY_TRUE +\family default + if +\emph on +type1 +\emph default + and +\emph on +type2 +\emph default + actually represent equivalent types for this platform (the fortran member + of each type is ignored). + For example, on 32-bit platforms, +\family typewriter +NPY_LONG +\family default + and +\family typewriter +NPY_INT +\family default + are equivalent. + Otherwise return +\family typewriter +NPY_FALSE +\family default +. +\end_layout + +\begin_layout Description +PyArray_EquivArrTypes ( +\family typewriter +Bool +\family default +) ( +\family typewriter +PyArrayObject* +\family default + a1, +\family typewriter +PyArrayObject +\family default +* a2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return +\family typewriter +NPY_TRUE +\family default + if +\emph on +a1 +\emph default + and +\emph on +a2 +\emph default + are arrays with equivalent types for this platform. + +\end_layout + +\begin_layout Description +PyArray_EquivTypenums ( +\family typewriter +Bool +\family default +) ( +\family typewriter +int +\family default + typenum1, +\family typewriter +int +\family default + typenum2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Special case of +\family typewriter +PyArray_EquivTypes +\family default +(...) that does not accept flexible data types but may be easier to call. + +\end_layout + +\begin_layout Description +PyArray_EquivByteorders (int) (<byteorder> b1, <byteorder> b2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + True if byteorder characters ( +\family typewriter +NPY_LITTLE +\family default +, +\family typewriter +NPY_BIG +\family default +, +\family typewriter +NPY_NATIVE +\family default +, +\family typewriter +NPY_IGNORE +\family default +) are either equal or equivalent as to their specification of a native byte + order. + Thus, on a little-endian machine +\family typewriter +NPY_LITTLE +\family default + and +\family typewriter +NPY_NATIVE +\family default + are equivalent where they are not equivalent on a big-endian machine. + +\end_layout + +\begin_layout Subsubsection +Converting data types +\end_layout + +\begin_layout Description +PyArray_Cast ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + arr, +\family typewriter +int +\family default + typenum) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Mainly for backwards compatibility to the Numeric C-API and for simple + casts to non-flexible types. + Return a new array object with the elements of +\emph on +arr +\emph default + cast to the data-type +\emph on +typenum +\emph default + which must be one of the enumerated types and not a flexible type. +\end_layout + +\begin_layout Description +PyArray_CastToType ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + arr, +\family typewriter +PyArray_Descr* +\family default + type, +\family typewriter +int +\family default + fortran) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a new array of the +\emph on +type +\emph default + specified, casting the elements of +\emph on +arr +\emph default + as appropriate. + The fortran argument specifies the ordering of the output array. + +\end_layout + +\begin_layout Description +PyArray_CastTo ( +\family typewriter +int +\family default +) ( +\family typewriter +PyArrayObject* +\family default + out, +\family typewriter +PyArrayObject* +\family default + in) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Cast the elements of the array +\emph on +in +\emph default + into the array +\emph on +out +\emph default +. + The output array should be writeable, have an integer-multiple of the number + of elements in the input array (more than one copy can be placed in out), + and have a data type that is one of the builtin types. + Returns 0 on success and -1 if an error occurs. +\end_layout + +\begin_layout Description +PyArray_GetCastFunc ( +\family typewriter +PyArray_VectorUnaryFunc* +\family default +) ( +\family typewriter +PyArray_Descr* +\family default + from, +\family typewriter +int +\family default + totype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the low-level casting function to cast from the given descriptor + to the builtin type number. + If no casting function exists return +\family typewriter +NULL +\family default + and set an error. + Using this function instead of direct access to +\emph on +from +\emph default +->f->cast will allow support of any user-defined casting functions added + to a descriptors casting dictionary. + +\end_layout + +\begin_layout Description +PyArray_CanCastSafely ( +\family typewriter +int +\family default +) ( +\family typewriter +int +\family default + fromtype, +\family typewriter +int +\family default + totype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns non-zero if an array of data type +\emph on +fromtype +\emph default + can be cast to an array of data type +\emph on +totype +\emph default + without losing information. + An exception is that 64-bit integers are allowed to be cast to 64-bit floating + point values even though this can lose precision on large integers so as + not to proliferate the use of long doubles without explict requests. + Flexible array types are not checked according to their lengths with this + function. + +\end_layout + +\begin_layout Description +PyArray_CanCastTo ( +\family typewriter +int +\family default +) ( +\family typewriter +PyArray_Descr* +\family default + fromtype, +\family typewriter +PyArray_Descr* +\family default + totype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns non-zero if an array of data type +\emph on +fromtype +\emph default + (which can include flexible types) can be cast safely to an array of data + type +\emph on +totype +\emph default + (which can include flexible types). + This is basically a wrapper around +\family typewriter +PyArray_CanCastSafely +\family default + with additional support for size checking if +\emph on +fromtype +\emph default + and +\emph on +totype +\emph default + are +\family typewriter +NPY_STRING +\family default + or +\family typewriter +NPY_UNICODE +\family default +. +\end_layout + +\begin_layout Description +PyArray_ObjectType ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + op, +\family typewriter +int +\family default + mintype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This function is useful for determining a common type that two or more + arrays can be converted to. + It only works for non-flexible array types as no itemsize information is + passed. + The +\emph on +mintype +\emph default + argument represents the minimum type acceptable, and +\emph on +op +\emph default + represents the object that will be converted to an array. + The return value is the enumerated typenumber that represents the data-type + that +\emph on +op +\emph default + should have. +\end_layout + +\begin_layout Description +PyArray_ArrayType ( +\family typewriter +void +\family default +) ( +\family typewriter +PyObject* +\family default + op, +\family typewriter +PyArray_Descr* +\family default + mintype, +\family typewriter +PyArray_Descr* +\family default + outtype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This function works similarly to +\family typewriter +PyArray_ObjectType +\family default +(...) except it handles flexible arrays. + The +\emph on +mintype +\emph default + argument can have an itemsize member and the +\emph on +outtype +\emph default + argument will have an itemsize member at least as big but perhaps bigger + depending on the object +\emph on +op +\emph default +. + +\end_layout + +\begin_layout Description +PyArray_ConvertToCommonType ( +\family typewriter +PyArrayObject** +\family default +) ( +\family typewriter +PyObject* +\family default + op, +\family typewriter +int* +\family default + n) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert a sequence of Python objects contained in +\emph on +op +\emph default + to an array of ndarrays each having the same data type. + The type is selected based on the typenumber (larger type number is chosen + over a smaller one) ignoring objects that are only scalars. + The length of the sequence is returned in +\emph on +n +\emph default +, and an +\emph on +n +\emph default +-length array of +\family typewriter +PyArrayObject +\family default + pointers is the return value (or +\family typewriter +NULL +\family default + if an error occurs). + The returned array must be freed by the caller of this routine (using +\family typewriter +PyDataMem_FREE +\family default +) and all the array objects in it +\family typewriter +DECREF +\family default +'d or a memory-leak will occur. + The example template-code below shows a typically usage. +\end_layout + +\begin_layout LyX-Code +mps = PyArray_ConvertToCommonType(obj, &n); +\end_layout + +\begin_layout LyX-Code +if (mps==NULL) return NULL; +\end_layout + +\begin_layout LyX-Code +<code> +\end_layout + +\begin_layout LyX-Code +<before return> +\end_layout + +\begin_layout LyX-Code +for (i=0; i<n; i++) Py_DECREF(mps[i]); +\end_layout + +\begin_layout LyX-Code +PyDataMem_FREE(mps); +\end_layout + +\begin_layout LyX-Code +<return> +\end_layout + +\begin_layout Description +PyArray_Zero ( +\family typewriter +char* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A pointer to newly created memory of size +\emph on +arr +\emph default +->itemsize that holds the representation of 0 for that type. + The returned pointer, +\emph on +ret +\emph default +, +\series bold +must be freed +\series default + using +\family typewriter +\emph on +PyDataMem_FREE +\family default +\emph default +(ret) when it is not needed anymore. +\end_layout + +\begin_layout Description +PyArray_One ( +\family typewriter +char* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A pointer to newly created memory of size +\emph on +arr +\emph default +->itemsize that holds the representation of 1 for that type. + The returned pointer, +\emph on +ret +\emph default +, +\series bold +must be freed +\series default + using +\family typewriter +PyDataMem_FREE +\family default +(ret) when it is not needed anymore. +\end_layout + +\begin_layout Description +PyArray_ValidType ( +\family typewriter +int +\family default +) ( +\family typewriter +int +\family default + typenum) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns +\family typewriter +NPY_TRUE +\family default + if +\family typewriter +\emph on +typenum +\family default +\emph default + represents a valid type-number (builtin or user-defined or character code). + Otherwise, this function returns +\family typewriter +NPY_FALSE +\family default +. +\end_layout + +\begin_layout Subsubsection +New data types +\end_layout + +\begin_layout Description +PyArray_InitArrFuncs ( +\family typewriter +void +\family default +) ( +\family typewriter +PyArray_ArrFuncs* +\family default + f) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Initialize all function pointers and members to +\family typewriter +NULL +\family default +. +\end_layout + +\begin_layout Description +PyArray_RegisterDataType ( +\family typewriter +int +\family default +) ( +\family typewriter +PyArray_Descr* +\family default + dtype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Register a data-type as a new user-defined data type for arrays. + The type must have most of its entries filled in. + This is not always checked and errors can produce segfaults. + In particular, the typeobj member of the +\family typewriter +dtype +\family default + structure must be filled with a Python type that has a fixed-size element-size + that corresponds to the elsize member of +\emph on +dtype +\emph default +. + Also the +\family typewriter +f +\family default + member must have the required functions: nonzero, copyswap, copyswapn, + getitem, setitem, and cast (some of the cast functions may be +\family typewriter +NULL +\family default + if no support is desired). + To avoid confusion, you should choose a unique character typecode but this + is not enforced and not relied on internally. + +\end_layout + +\begin_layout Description +\InsetSpace ~ + A user-defined type number is returned that uniquely identifies the type. + A pointer to the new structure can then be obtained from +\family typewriter +PyArray_DescrFromType +\family default + using the returned type number. + A -1 is returned if an error occurs. + If this +\family typewriter +\emph on +dtype +\family default +\emph default + has already been registered (checked only by the address of the pointer), + then return the previously-assigned type-number. + +\end_layout + +\begin_layout Description +PyArray_RegisterCastFunc ( +\family typewriter +int +\family default +) ( +\family typewriter +PyArray_Descr* +\family default + descr, +\family typewriter +int +\family default + totype, +\family typewriter +PyArray_VectorUnaryFunc* +\family default + castfunc) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Register a low-level casting function, +\emph on +castfunc +\emph default +, to convert from the data-type, +\emph on +descr +\emph default +, to the given data-type number, +\emph on +totype +\emph default +. + Any old casting function is over-written. + A +\family typewriter +0 +\family default + is returned on success or a +\family typewriter +-1 +\family default + on failure. + +\end_layout + +\begin_layout Description +PyArray_RegisterCanCast ( +\family typewriter +int +\family default +) ( +\family typewriter +PyArray_Descr* +\family default + descr, +\family typewriter +int +\family default + totype, +\family typewriter +PyArray_SCALARKIND +\family default + scalar) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Register the data-type number, +\emph on +totype +\emph default +, as castable from data-type object, +\emph on +descr +\emph default +, of the given +\emph on +scalar +\emph default + kind. + Use +\emph on +scalar +\emph default + = +\family typewriter +NPY_NOSCALAR +\family default + to register that an array of data-type +\emph on +descr +\emph default + can be cast safely to a data-type whose type_number is +\emph on +totype +\emph default +. + +\end_layout + +\begin_layout Subsubsection +Special functions for PyArray_OBJECT +\end_layout + +\begin_layout Description +PyArray_INCREF ( +\family typewriter +int +\family default +) ( +\family typewriter +PyArrayObject* +\family default + op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Used for an array, +\emph on +op +\emph default +, that contains any Python objects. + It increments the reference count of every object in the array according + to the data-type of +\emph on +op +\emph default +. + A -1 is returned if an error occurs, otherwise 0 is returned. +\end_layout + +\begin_layout Description +PyArray_Item_INCREF ( +\family typewriter +void +\family default +) ( +\family typewriter +char* +\family default + ptr, +\family typewriter +PyArray_Descr* +\family default + dtype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A function to INCREF all the objects at the location +\emph on +ptr +\emph default + according to the data-type +\emph on +dtype +\emph default +. + If +\emph on +ptr +\emph default + is the start of a record with an object at any offset, then this will (recursiv +ely) increment the reference count of all object-like items in the record. +\end_layout + +\begin_layout Description +PyArray_XDECREF ( +\family typewriter +int +\family default +) ( +\family typewriter +PyArrayObject* +\family default + op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Used for an array, +\emph on +op +\emph default +, that contains any Python objects. + It decrements the reference count of every object in the array according + to the data-type of +\emph on +op +\emph default +. + Normal return value is 0. + A -1 is returned if an error occurs. +\end_layout + +\begin_layout Description +PyArray_Item_XDECREF ( +\family typewriter +void +\family default +) ( +\family typewriter +char* +\family default + ptr, +\family typewriter +PyArray_Descr* +\family default + dtype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A function to XDECREF all the object-like items at the loacation +\emph on +ptr +\emph default + as recorded in the data-type, +\emph on +dtype +\emph default +. + This works recursively so that if +\family typewriter +dtype +\family default + itself has fields with data-types that contain object-like items, all the + object-like fields will be XDECREF +\family typewriter +'d +\family default +. + +\end_layout + +\begin_layout Description +PyArray_FillObjectArray ( +\family typewriter +void +\family default +) ( +\family typewriter +PyArrayObject* +\family default + arr, +\family typewriter +PyObject* +\family default + obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Fill a newly created array with a single value obj at all locations in + the structure with object data-types. + No checking is performed but +\emph on +arr +\emph default + must be of data-type +\family typewriter +PyArray_OBJECT +\family default + and be single-segment and uninitialized (no previous objects in position). + Use +\family typewriter +PyArray_DECREF +\family default +( +\emph on +arr +\emph default +) if you need to decrement all the items in the object array prior to calling + this function. + +\end_layout + +\begin_layout Subsection +Array flags +\end_layout + +\begin_layout Subsubsection +Basic Array Flags +\end_layout + +\begin_layout Standard +An ndarray can have a data segment that is not a simple contiguous chunk + of well-behaved memory you can manipulate. + It may not be aligned with word boundaries (very important on some platforms). + It might have its data in a different byte-order than the machine recognizes. + It might not be writeable. + It might be in Fortan-contiguous order. + The array flags are used to indicate what can be said about data associated + with an array. +\end_layout + +\begin_layout Description +NPY_C_CONTIGUOUS The data area is in C-style contiguous order (last index + varies the fastest). +\end_layout + +\begin_layout Description +NPY_F_CONTIGUOUS The data area is in Fortran-style contiguous order (first + index varies the fastest). +\end_layout + +\begin_layout Description +NPY_OWNDATA The data area is owned by this array. +\end_layout + +\begin_layout Description +NPY_ALIGNED The data area is aligned appropriately (for all strides). +\end_layout + +\begin_layout Description +NPY_WRITEABLE The data area can be written to. + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Notice that the above 3 flags are are defined so that a new, well-behaved + array has these flags defined as true. + +\end_layout + +\begin_layout Description +NPY_UPDATEIFCOPY The data area represents a (well-behaved) copy whose informatio +n should be transferred back to the original when this array is deleted. +\end_layout + +\begin_layout Subsubsection +Combinations of array flags +\end_layout + +\begin_layout Description +NPY_BEHAVED +\family typewriter +NPY_ALIGNED +\family default + | +\family typewriter +NPY_WRITEABLE +\end_layout + +\begin_layout Description +NPY_CARRAY +\family typewriter +NPY_C_CONTIGUOUS +\family default + | +\family typewriter +NPY_BEHAVED +\end_layout + +\begin_layout Description +NPY_CARRAY_RO +\family typewriter +NPY_C_CONTIGUOUS +\family default + | +\family typewriter +NPY_ALIGNED +\end_layout + +\begin_layout Description +NPY_FARRAY +\family typewriter +NPY_F_CONTIGUOUS +\family default + | +\family typewriter +NPY_BEHAVED +\end_layout + +\begin_layout Description +NPY_FARRAY_RO +\family typewriter +NPY_F_CONTIGUOUS +\family default + | +\family typewriter +NPY_ALIGNED +\end_layout + +\begin_layout Description +NPY_DEFAULT +\family typewriter +NPY_CARRAY +\end_layout + +\begin_layout Description +NPY_UPDATE_ALL +\family typewriter +NPY_C_CONTIGUOUS +\family default + | +\family typewriter +NPY_F_CONTIGUOUS +\family default + | +\family typewriter +NPY_ALIGNED +\end_layout + +\begin_layout Subsubsection +Flag-like constants +\end_layout + +\begin_layout Standard +These constants are used in PyArray_FromAny (and its macro forms) to specify + desired properties of the new array. +\end_layout + +\begin_layout Description +NPY_FORCECAST Cast to the desired type, even if it can't be done without + losing information. +\end_layout + +\begin_layout Description +NPY_ENSURECOPY Make sure the resulting array is a copy of the original. +\end_layout + +\begin_layout Description +NPY_ENSUREARRAY Make sure the resulting object is an actual ndarray (or + bigndarray), and not a sub-class. +\end_layout + +\begin_layout Description +NPY_NOTSWAPPED Only used in +\family typewriter +PyArray_CheckFromAny +\family default + to over-ride the byteorder of the data-type object passed in. + +\end_layout + +\begin_layout Description +NPY_BEHAVED_NS +\family typewriter +NPY_ALIGNED +\family default + | +\family typewriter +NPY_WRITEABLE +\family default + | +\family typewriter +NPY_NOTSWAPPED +\end_layout + +\begin_layout Subsubsection +Flag checking +\end_layout + +\begin_layout Standard +For all of these macros +\emph on +arr +\emph default + must be an instance of a (subclass of) +\family typewriter +PyArray_Type +\family default +, but no checking is done. +\end_layout + +\begin_layout Description +PyArray_CHKFLAGS (arr, flags) +\end_layout + +\begin_layout Description +\InsetSpace ~ + The first parameter, arr, must be an ndarray or subclass. + The parameter, +\emph on +flags +\emph default +, should be an integer consisting of bitwise combinations of the possible + flags an array can have: +\family typewriter +NPY_C_CONTIGUOUS +\family default +, +\family typewriter +NPY_F_CONTIGUOUS +\family default +, +\family typewriter +NPY_OWNDATA +\family default +, +\family typewriter +NPY_ALIGNED +\family default +, +\family typewriter +NPY_WRITEABLE +\family default +, +\family typewriter +NPY_UPDATEIFCOPY +\family default +. +\end_layout + +\begin_layout Description +PyArray_ISCONTIGUOUS (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if +\emph on +arr +\emph default + is C-style contiguous. +\end_layout + +\begin_layout Description +PyArray_ISFORTRAN (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if +\emph on +arr +\emph default + is Fortran-style contiguous. +\end_layout + +\begin_layout Description +PyArray_ISWRITEABLE (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if the data area of +\emph on +arr +\emph default + can be written to +\end_layout + +\begin_layout Description +PyArray_ISALIGNED (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if the data area of +\emph on +arr +\emph default + is properly aligned on the machine. +\end_layout + +\begin_layout Description +PyArray_ISBEHAVED (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evalutes true if the data area of +\emph on +arr +\emph default + is aligned and writeable and in machine byte-order according to its descriptor. +\end_layout + +\begin_layout Description +PyArray_ISBEHAVED_RO (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if the data area of +\emph on +arr +\emph default + is aligned and in machine byte-order. +\end_layout + +\begin_layout Description +PyArray_ISCARRAY (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if the data area of +\emph on +arr +\emph default + is C-style contiguous, and +\family typewriter +PyArray_ISBEHAVED +\family default +( +\emph on +arr +\emph default +) is true. +\end_layout + +\begin_layout Description +PyArray_ISFARRAY (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if the data area of +\emph on +arr +\emph default + is Fortran-style contiguous and +\family typewriter +PyArray_ISBEHAVED +\family default +( +\emph on +arr +\emph default +) is true. +\end_layout + +\begin_layout Description +PyArray_ISCARRAY_RO (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if the data area of +\emph on +arr +\emph default + is C-style contiguous, aligned, and in machine byte-order. + +\end_layout + +\begin_layout Description +PyArray_ISFARRAY_RO (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if the data area of +\emph on +arr +\emph default + is Fortran-style contiguous, aligned, and in machine byte-order +\series bold +. + +\end_layout + +\begin_layout Description +PyArray_ISONESEGMENT (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if the data area of +\emph on +arr +\emph default + consists of a single (C-style or Fortran-style) contiguous segment. +\end_layout + +\begin_layout Description +PyArray_UpdateFlags ( +\family typewriter +void +\family default +) ( +\family typewriter +PyArrayObject* +\family default + arr, +\family typewriter +int +\family default + flagmask) +\end_layout + +\begin_layout Description +\InsetSpace ~ + The +\family typewriter +NPY_C_CONTIGUOUS +\family default +, +\family typewriter +NPY_ALIGNED +\family default +, and +\family typewriter +NPY_F_CONTIGUOUS +\family default + array flags can be +\begin_inset Quotes eld +\end_inset + +calculated +\begin_inset Quotes erd +\end_inset + + from the array object itself. + This routine updates one or more of these flags of +\emph on +arr +\emph default + as specified in +\emph on +flagmask +\emph default + by performing the required calculation. + +\end_layout + +\begin_layout Warning +It is important to keep the flags updated (using PyArray_UpdateFlags can + help) whenever a manipulation with an array is performed that might cause + them to change. + Later calculations in NumPy that rely on the state of these flags do not + repeat the calculation to update them. + +\end_layout + +\begin_layout Subsection +Array method alternative API +\end_layout + +\begin_layout Subsubsection +Conversion +\end_layout + +\begin_layout Description +PyArray_GetField ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +PyArray_Descr* +\family default + dtype, +\family typewriter +int +\family default + offset) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +getfield +\series default +( +\emph on +dtype +\emph default +, +\emph on +offset +\emph default +). + Return a new array of the given +\emph on +dtype +\emph default + using the data in the current array at a specified +\emph on +offset +\emph default + in bytes. + The +\emph on +offset +\emph default + plus the itemsize of the new array type must be less than +\emph on +self +\emph default +->descr->elsize or an error is raised. + The same shape and strides as the original array are used. + Therefore, this function has the effect of returning a field from a record + array. + But, it can also be used to select specific bytes or groups of bytes from + any array type. + +\end_layout + +\begin_layout Description +PyArray_SetField ( +\family typewriter +int +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +PyArray_Descr* +\family default + dtype, +\family typewriter +int +\family default + offset, +\family typewriter +PyObject* +\family default + val) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +setfield +\series default +( +\emph on +val +\emph default +, +\emph on +dtype +\emph default +, +\emph on +offset +\emph default +). + Set the field starting at +\emph on +offset +\emph default + in bytes and of the given +\emph on +dtype +\emph default + to +\emph on +val +\emph default +. + The +\emph on +offset +\emph default + plus +\emph on +dtype +\emph default +->elsize must be less than +\emph on +self +\emph default +->descr->elsize or an error is raised. + Otherwise, the +\emph on +val +\emph default + argument is converted to an array and copied into the field pointed to. + If necessary, the elements of +\emph on +val +\emph default + are repeated to fill the destination array, But, the number of elements + in the destination must be an integer multiple of the number of elements + in +\emph on +val +\emph default +. + +\end_layout + +\begin_layout Description +PyArray_Byteswap ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +Bool +\family default + inplace) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +byteswap +\series default +( +\emph on +inplace +\emph default +). + Return an array whose data area is byteswapped. + If +\emph on +inplace +\emph default + is non-zero, then do the byteswap inplace and return a reference to self. + Otherwise, create a byteswapped copy and leave self unchanged. +\end_layout + +\begin_layout Description +PyArray_NewCopy ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + old, +\family typewriter +NPY_ORDER +\family default + order) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +copy +\series default +( +\emph on +fortran +\emph default +). + Make a copy of the +\emph on +old +\emph default + array. + The returned array is always aligned and writeable with data interpreted + the same as the old array. + If +\emph on +order +\emph default + is +\family typewriter +NPY_CORDER +\family default +, then a C-style contiguous array is returned. + If +\emph on +order +\emph default + is +\family typewriter +NPY_FORTRANORDER +\family default +, then a Fortran-style contiguous array is returned. + If +\emph on +order is +\emph default + +\family typewriter +NPY_ANYORDER +\family default +, then the array returned is Fortran-style contiguous only if the old one + is; otherwise, it is C-style contiguous. + +\end_layout + +\begin_layout Description +PyArray_ToList ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +tolist +\series default +(). + Return a nested Python list from +\emph on +self +\emph default +. + +\end_layout + +\begin_layout Description +PyArray_ToString (PyObject*) (PyArrayObject* self, NPY_ORDER order) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +tostring +\series default +( +\emph on +order +\emph default +). + Return the bytes of this array in a Python string. + +\end_layout + +\begin_layout Description +PyArray_ToFile ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +FILE* +\family default + fp, +\family typewriter +char* +\family default + sep, +\family typewriter +char* +\family default + format) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Write the contents of +\emph on +self +\emph default + to the file pointer +\emph on +fp +\emph default + in C-style contiguous fashion. + Write the data as binary bytes if +\family typewriter +\emph on +sep +\family default +\emph default + is the string +\begin_inset Quotes eld +\end_inset + + +\begin_inset Quotes erd +\end_inset + + or +\family typewriter +NULL +\family default +. + Otherwise, write the contents of +\emph on +self +\emph default + as text using the +\family typewriter +\emph on +sep +\family default +\emph default + string as the item separator. + Each item will be printed to the file. + If the +\emph on +format +\emph default + string is not +\family typewriter +NULL +\family default + or +\begin_inset Quotes eld +\end_inset + + +\begin_inset Quotes erd +\end_inset + +, then it is a Python print statement format string showing how the items + are to be written. +\end_layout + +\begin_layout Description +PyArray_Dump ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + self, +\family typewriter +PyObject* +\family default + file, +\family typewriter +int +\family default + protocol) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Pickle the object in +\emph on +self +\emph default + to the given +\emph on +file +\emph default + (either a string or a Python file object). + If +\emph on +file +\emph default + is a Python string it is considered to be the name of a file which is then + opened in binary mode. + The given +\emph on +protocol +\emph default + is used (if +\emph on +protocol +\emph default + is negative, or the highest available is used). + This is a simple wrapper around cPickle.dump( +\emph on +self +\emph default +, +\emph on +file +\emph default +, +\emph on +protocol +\emph default +). +\end_layout + +\begin_layout Description +PyArray_Dumps ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + self, +\family typewriter +int +\family default + protocol) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Pickle the object in +\emph on +self +\emph default + to a Python string and return it. + Use the Pickle +\emph on +protocol +\emph default + provided (or the highest available if +\emph on +protocol +\emph default + is negative). + +\end_layout + +\begin_layout Description +PyArray_FillWithScalar ( +\family typewriter +int +\family default +) ( +\family typewriter +PyArrayObject* +\family default + arr, +\family typewriter +PyObject* +\family default + obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Fill the array, +\emph on +arr +\emph default +, with the given scalar object, +\emph on +obj +\emph default +. + The object is first converted to the data type of +\emph on +arr +\emph default +, and then copied into every location. + A -1 is returned if an error occurs, otherwise 0 is returned. +\end_layout + +\begin_layout Description +PyArray_View ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +PyArray_Descr* +\family default + dtype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +view +\series default +( +\emph on +dtype +\emph default +). + Return a new view of the array +\emph on +self +\emph default + as possibly a different data-type, +\emph on +dtype +\emph default +. + If +\emph on +dtype +\emph default + is +\family typewriter +NULL +\family default +, then the returned array will have the same data type as +\emph on +self +\emph default +. + The new data-type must be consistent with the size of +\emph on +self +\emph default +. + Either the itemsizes must be identical, or +\emph on +self +\emph default + must be single-segment and the total number of bytes must be the same. + In the latter case the dimensions of the returned array will be altered + in the last (or first for Fortran-style contiguous arrays) dimension. + The data area of the returned array and self is exactly the same. +\end_layout + +\begin_layout Subsubsection +Shape Manipulation +\end_layout + +\begin_layout Description +PyArray_Newshape ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +PyArray_Dims* +\family default + newshape) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Result will be a new array (pointing to the same memory location as +\emph on +self +\emph default + if possible), but having a shape given by +\emph on +newshape +\emph default +. + If the new shape is not compatible with the strides of +\emph on +self +\emph default +, then a copy of the array with the new specified shape will be returned. + +\end_layout + +\begin_layout Description +PyArray_Reshape ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +PyObject* +\family default + shape) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\family typewriter +\emph on +self +\family default +\emph default +. +\series bold +reshape +\series default +( +\family typewriter +\emph on +shape +\family default +\emph default +) where +\emph on +shape +\emph default + is a sequence. + Converts +\emph on +shape +\emph default + to a +\family typewriter +PyArray_Dims +\family default + structure and calls +\family typewriter +PyArray_Newshape +\family default + internally. + +\end_layout + +\begin_layout Description +PyArray_Squeeze ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +squeeze +\series default +(). + Return a new view of +\emph on +self +\emph default + with all of the dimensions of length 1 removed from the shape. + +\end_layout + +\begin_layout Warning +matrix objects are always 2-dimensional. + Therefore, +\family typewriter +PyArray_Squeeze +\family default + has no effect on arrays of matrix sub-class. + +\end_layout + +\begin_layout Description +PyArray_SwapAxes ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + a1, +\family typewriter +int +\family default + a2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +swapaxes +\series default +( +\emph on +a1 +\emph default +, +\emph on +a2 +\emph default +). + The returned array is a new view of the data in +\emph on +self +\emph default + with the given axes, +\emph on +a1 +\emph default + and +\emph on +a2 +\emph default +, swapped. +\end_layout + +\begin_layout Description +PyArray_Resize ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +PyArray_Dims* +\family default + newshape, +\family typewriter +int +\family default + refcheck, NPY_ORDER fortran) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +resize +\series default +( +\emph on +newshape +\emph default +, refcheck +\family typewriter += +\family default +\emph on +refcheck +\emph default +, order= +\shape italic +fortran +\shape default +). + This function only works on single-segment arrays. + It changes the shape of +\emph on +self +\emph default + inplace and will reallocate the memory for +\emph on +self +\emph default + if +\emph on +newshape +\emph default + has a different total number of elements then the old shape. + If reallocation is necessary, then +\emph on +self +\emph default + must own its data, have +\emph on +self +\emph default +- +\family typewriter +>base==NULL +\family default +, have +\emph on +self +\emph default +- +\family typewriter +>weakrefs==NULL +\family default +, and (unless refcheck is 0) not be referenced by any other array. + A reference to the new array is returned. + The +\shape italic +fortran +\shape default + argument can be NPY_ANYORDER, NPY_CORDER, or NPY_FORTRANORDER. + This argument is used if the number of dimension is (or is being resized + to be) greater than 2. + It currently has no effect. + Eventually it could be used to determine how the resize operation should + view the data when constructing a differently-dimensioned array. + +\end_layout + +\begin_layout Description +PyArray_Transpose ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +PyArray_Dims* +\family default + permute) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +transpose +\series default +( +\emph on +permute +\emph default +). + Permute the axes of the ndarray object +\emph on +self +\emph default + according to the data structure +\emph on +permute +\emph default + and return the result. + If +\emph on +permute +\emph default + is +\family typewriter +NULL +\family default +, then the resulting array has its axes reversed. + For example if +\emph on +self +\emph default + has shape +\begin_inset Formula $10\times20\times30$ +\end_inset + +, and +\emph on +permute +\family typewriter +\emph default +.ptr +\family default + is (0,2,1) the shape of the result is +\begin_inset Formula $10\times30\times20.$ +\end_inset + + If +\emph on +permute +\emph default + is +\family typewriter +NULL +\family default +, the shape of the result is +\begin_inset Formula $30\times20\times10.$ +\end_inset + + +\end_layout + +\begin_layout Description +PyArray_Flatten ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +NPY_ORDER +\family default + order) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +flatten +\series default +( +\emph on +order +\emph default +). + Return a 1-d copy of the array. + If +\emph on +order +\emph default + is +\family typewriter +NPY_FORTRANORDER +\family default + the elements are scanned out in Fortran order (first-dimension varies the + fastest). + If +\emph on +order +\emph default + is +\family typewriter +NPY_CORDER +\family default +, the elements of +\family typewriter +self +\family default + are scanned in C-order (last dimension varies the fastest). + If +\emph on +order +\emph default + +\family typewriter +NPY_ANYORDER +\family default +, then the result of +\family typewriter +PyArray_ISFORTRAN +\family default +( +\emph on +self +\emph default +) is used to determine which order to flatten. +\end_layout + +\begin_layout Description +PyArray_Ravel ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +NPY_ORDER +\family default + order) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +.ravel( +\emph on +order +\emph default +). + Same basic functionality as +\family typewriter +PyArray_Flatten +\family default +( +\emph on +self +\emph default +, +\emph on +order +\emph default +) except if +\emph on +order +\emph default + is 0 and +\emph on +self +\emph default + is C-style contiguous, the shape is altered but no copy is performed. +\end_layout + +\begin_layout Subsubsection +Item selection and manipulation +\end_layout + +\begin_layout Description +PyArray_TakeFrom ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +PyObject* +\family default + indices, +\family typewriter +int +\family default + axis, +\family typewriter +PyArrayObject* +\family default + ret, +\family typewriter +NPY_CLIPMODE +\family default + clipmode) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +take +\series default +( +\emph on +indices +\emph default +, +\emph on +axis +\emph default +, +\emph on +ret +\emph default +, +\emph on +clipmode +\emph default +) except +\emph on +axis +\emph default +=None in Python is obtained by setting +\emph on +axis +\emph default += +\family typewriter +NPY_MAXDIMS +\family default + in C. + Extract the items from self indicated by the integer-valued +\emph on +indices +\emph default + along the given +\emph on +axis. + +\emph default + The clipmode argument can be +\family typewriter +NPY_RAISE +\family default +, +\family typewriter +NPY_WRAP +\family default +, or +\family typewriter +NPY_CLIP +\family default + to indicate what to do with out-of-bound indices. + The +\emph on +ret +\emph default + argument can specify an output array rather than having one created internally. + +\end_layout + +\begin_layout Description +PyArray_PutTo ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +PyObject* +\family default + values, +\family typewriter +PyObject* +\family default + indices, +\family typewriter +NPY_CLIPMODE +\family default + clipmode) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +.put( +\emph on +values +\emph default +, +\emph on +indices +\emph default +, +\emph on +clipmode +\emph default +). + Put +\emph on +values +\emph default + into +\emph on +self +\emph default + at the corresponding (flattened) +\emph on +indices +\emph default +. + If +\emph on +values +\emph default + is too small it will be repeated as necessary. + +\end_layout + +\begin_layout Description +PyArray_PutMask ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +PyObject* +\family default + values, +\family typewriter +PyObject* +\family default + mask) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Place the +\emph on +values +\emph default + in +\emph on +self +\emph default + wherever corresponding positions (using a flattened context) in +\emph on +mask +\emph default + are true. + The +\emph on +mask +\emph default + and +\emph on +self +\emph default + arrays must have the same total number of elements. + If +\emph on +values +\emph default + is too small, it will be repeated as necessary. +\end_layout + +\begin_layout Description +PyArray_Repeat ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +PyObject* +\family default + op, +\family typewriter +int +\family default + axis) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +repeat +\series default +( +\emph on +op +\emph default +, +\emph on +axis +\emph default +). + Copy the elements of +\emph on +self +\emph default +, +\emph on +op +\emph default + times along the given +\emph on +axis +\emph default +. + Either +\emph on +op +\emph default + is a scalar integer or a sequence of length +\emph on +self +\emph default +->dimensions[ +\emph on +axis +\emph default +] indicating how many times to repeat each item along the axis. +\end_layout + +\begin_layout Description +PyArray_Choose ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +PyObject* +\family default + op, +\family typewriter +PyArrayObject* +\family default + ret, +\family typewriter +NPY_CLIPMODE +\family default + clipmode) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +choose +\series default +( +\emph on +op +\emph default +, +\emph on +ret +\emph default +, +\emph on +clipmode +\emph default +). + Create a new array by selecting elements from the sequence of arrays in + +\emph on +op +\emph default + based on the integer values in +\emph on +self +\emph default +. + The arrays must all be broadcastable to the same shape and the entries + in +\emph on +self +\emph default + should be between 0 and len( +\emph on +op +\emph default +). + The output is placed in +\emph on +ret +\emph default + unless it is +\family typewriter +NULL +\family default + in which case a new output is created. + The +\emph on +clipmode +\emph default + argument determines behavior for when entries in +\emph on +self +\emph default + are not between 0 and len( +\emph on +op +\emph default +). +\end_layout + +\begin_deeper +\begin_layout Description +NPY_RAISE raise a ValueError; +\end_layout + +\begin_layout Description +NPY_WRAP wrap values <0 by adding len( +\emph on +op +\emph default +) and values >=len( +\emph on +op +\emph default +) by subtracting len( +\emph on +op +\emph default +) until they are in range; +\end_layout + +\begin_layout Description +NPY_CLIP all values are clipped to the region [0, len( +\emph on +op +\emph default +) ). +\end_layout + +\end_deeper +\begin_layout Description +PyArray_Sort ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + axis) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +sort +\series default +( +\emph on +axis +\emph default +). + Return an array with the items of +\emph on +self +\emph default + sorted along +\emph on +axis +\emph default +. +\end_layout + +\begin_layout Description +PyArray_ArgSort ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + axis) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +argsort +\series default +( +\emph on +axis +\emph default +). + Return an array of indices such that selection of these indices along the + given +\family typewriter +axis +\family default + would return a sorted version of +\emph on +self +\emph default +. + If +\emph on +self +\emph default +->descr is a data-type with fields defined, then self->descr->names is used + to determine the sort order. + A comparison where the first field is equal will use the second field and + so on. + To alter the sort order of a record array, create a new data-type with + a different order of names and construct a view of the array with that + new data-type. + +\end_layout + +\begin_layout Description +PyArray_LexSort ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + sort_keys, +\family typewriter +int +\family default + axis) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Given a sequence of arrays ( +\emph on +sort_keys +\emph default +) of the same shape, return an array of indices (similar to +\family typewriter +PyArray_ArgSort +\family default +(...)) that would sort the arrays lexicographically. + A lexicographic sort specifies that when two keys are found to be equal, + the order is based on comparison of subsequent keys. + A merge sort (which leaves equal entries unmoved) is required to be defined + for the types. + The sort is accomplished by sorting the indices first using the first +\emph on +sort_key +\emph default + and then using the second +\emph on +sort_key +\emph default + and so forth. + This is equivalent to the lexsort( +\emph on +sort_keys +\emph default +, +\emph on +axis +\emph default +) Python command. + Because of the way the merge-sort works, be sure to understand the order + the +\emph on +sort_keys +\emph default + must be in (reversed from the order you would use when comparing two elements). +\end_layout + +\begin_layout Description +\InsetSpace ~ + If these arrays are all collected in a record array, then +\family typewriter +PyArray_Sort +\family default +(...) can also be used to sort the array directly. + +\end_layout + +\begin_layout Description +PyArray_SearchSorted ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +PyObject* +\family default + values) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +searchsorted +\series default +( +\emph on +values +\emph default +). + Assuming +\emph on +self +\emph default + is a 1-d array in ascending order representing bin boundaries then the + output is an array the same shape as +\emph on +values +\emph default + of bin numbers, giving the bin into which each item in +\emph on +values +\emph default + would be placed. + No checking is done on whether or not self is in ascending order. +\end_layout + +\begin_layout Description +PyArray_Diagonal ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + offset, +\family typewriter +int +\family default + axis1, +\family typewriter +int +\family default + axis2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +diagonal +\series default +( +\emph on +offset +\emph default +, +\emph on +axis1 +\emph default +, +\emph on +axis2 +\emph default +). + Return the +\emph on +offset +\emph default + diagonals of the 2-d arrays defined by +\emph on +axis1 +\emph default + and +\emph on +axis2 +\emph default +. + +\end_layout + +\begin_layout Description +PyArray_Nonzero ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +nonzero +\series default +(). + Returns a tuple of index arrays that select elements of +\emph on +self +\emph default + that are nonzero. + If (nd= +\family typewriter +PyArray_NDIM +\family default +( +\family typewriter +self +\family default +))==1, then a single index array is returned. + The index arrays have data type +\family typewriter +NPY_INTP +\family default +. + If a tuple is returned (nd +\begin_inset Formula $\neq$ +\end_inset + +1), then its length is nd. + +\end_layout + +\begin_layout Description +PyArray_Compress ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +PyObject* +\family default + condition, +\family typewriter +int +\family default + axis, +\family typewriter +PyArrayObject* +\family default + out) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +compress +\series default +( +\emph on +condition +\emph default +, +\emph on +axis +\emph default +). + Return the elements along +\emph on +axis +\emph default + corresponding to elements of +\emph on +condition +\emph default + that are true. + +\end_layout + +\begin_layout Subsubsection +Calculation +\end_layout + +\begin_layout Tip +Pass in NPY_MAXDIMS for axis in order to achieve the same effect that is + obtained by passing in axis = None in Python (treating the array as a 1-d + array). + +\end_layout + +\begin_layout Description +PyArray_ArgMax ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + axis) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +argmax +\series default +( +\emph on +axis +\emph default +). + Return the index of the largest element of +\emph on +self +\emph default + along +\emph on +axis +\emph default +. +\end_layout + +\begin_layout Description +PyArray_ArgMin ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + axis) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +argmin +\series default +( +\emph on +axis +\emph default +). + Return the index of the smallest element of +\emph on +self +\emph default + along +\emph on +axis +\emph default +. +\end_layout + +\begin_layout Description +PyArray_Max ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + axis, +\family typewriter +PyArrayObject* +\family default + out) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +max +\series default +( +\emph on +axis +\emph default +). + Return the largest element of +\emph on +self +\emph default + along the given +\emph on +axis +\emph default +. +\end_layout + +\begin_layout Description +PyArray_Min ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + axis, +\family typewriter +PyArrayObject* +\family default + out) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +min +\series default +( +\emph on +axis +\emph default +). + Return the smallest element of +\emph on +self +\emph default + along the given +\emph on +axis +\emph default +. +\end_layout + +\begin_layout Description +PyArray_Ptp ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + axis, +\family typewriter +PyArrayObject* +\family default + out) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +ptp +\series default +( +\emph on +axis +\emph default +). + Return the difference between the largest element of +\emph on +self +\emph default + along +\emph on +axis +\emph default + and the smallest element of +\emph on +self +\emph default + along +\emph on +axis +\emph default +. +\end_layout + +\begin_layout Note +The rtype argument specifies the data-type the reduction should take place + over. + This is important if the data-type of the array is not +\begin_inset Quotes eld +\end_inset + +large +\begin_inset Quotes erd +\end_inset + + enough to handle the output. + By default, all integer data-types are made at least as large as NPY_LONG + for the +\begin_inset Quotes eld +\end_inset + +add +\begin_inset Quotes erd +\end_inset + + and +\begin_inset Quotes eld +\end_inset + +multiply +\begin_inset Quotes erd +\end_inset + + ufuncs (which form the basis for mean, sum, cumsum, prod, and cumprod functions +). +\end_layout + +\begin_layout Description +PyArray_Mean ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + axis, +\family typewriter +int +\family default + rtype, +\family typewriter +PyArrayObject* +\family default + out) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +mean +\series default +( +\emph on +axis +\emph default +, +\emph on +rtype +\emph default +). + Returns the mean of the elements along the given +\emph on +axis +\emph default +, using the enumerated type +\emph on +rtype +\emph default + as the data type to sum in. + Default sum behavior is obtained using +\family typewriter +PyArray_NOTYPE +\family default + for +\emph on +rtype +\emph default +. +\end_layout + +\begin_layout Description +PyArray_Trace ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + offset, +\family typewriter +int +\family default + axis1, +\family typewriter +int +\family default + axis2, +\family typewriter +int +\family default + rtype, +\family typewriter +PyArrayObject* +\family default + out) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +trace +\series default +( +\emph on +offset +\emph default +, +\emph on +axis1 +\emph default +, +\emph on +axis2 +\emph default +, +\emph on +rtype +\emph default +). + Return the sum (using +\emph on +rtype +\emph default + as the data type of summation) over the +\emph on +offset +\emph default + diagonal elements of the 2-d arrays defined by +\emph on +axis1 +\emph default + and +\emph on +axis2 +\emph default + variables. + A positive offset chooses diagonals above the main diagonal. + A negative offset selects diagonals below the main diagonal. + +\end_layout + +\begin_layout Description +PyArray_Clip ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +PyObject* +\family default + min, +\family typewriter +PyObject* +\family default + max) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +clip +\series default +( +\emph on +min +\emph default +, +\emph on +max +\emph default +). + Clip an array, +\emph on +self +\emph default +, so that values larger than +\emph on +max +\emph default + are fixed to +\emph on +max +\emph default + and values less than +\emph on +min +\emph default + are fixed to +\emph on +min +\emph default +. +\end_layout + +\begin_layout Description +PyArray_Conjugate ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +conjugate +\series default +() and +\emph on +self +\emph default +. +\series bold +conj +\series default +() Return the complex conjugate of +\emph on +self +\emph default +. + If +\emph on +self +\emph default + is not of complex data type, then return +\emph on +self +\emph default + with an reference. +\end_layout + +\begin_layout Description +PyArray_Round ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + decimals, +\family typewriter +PyArrayObject* +\family default + out) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +round +\series default +( +\emph on +decimals +\emph default +, +\emph on +out +\emph default +). + Returns the array with elements rounded to the nearest decimal place. + The decimal place is defined as the +\begin_inset Formula $10^{-\textrm{decimals}}$ +\end_inset + + digit so that negative +\emph on +decimals +\emph default + cause rounding to the nearest 10's, 100's, etc. + If out is +\family typewriter +NULL +\family default +, then the output array is created, otherwise the output is placed in +\family typewriter +\emph on +out +\family default +\emph default + which must be the correct size and type. + +\end_layout + +\begin_layout Description +PyArray_Std ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + axis, +\family typewriter +int +\family default + rtype, +\family typewriter +PyArrayObject* +\family default + out) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +std +\series default +( +\emph on +axis +\emph default +, +\emph on +rtype +\emph default +). + Return the standard deviation using data along +\emph on +axis +\emph default + converted to data type +\emph on +rtype +\emph default +. + +\end_layout + +\begin_layout Description +PyArray_Sum ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + axis, +\family typewriter +int +\family default + rtype, +\family typewriter +PyArrayObject* +\family default + out) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +sum +\series default +( +\family typewriter +\emph on +axis +\family default +\emph default +, +\family typewriter +\emph on +rtype +\family default +\emph default +). + Return 1-d vector sums of elements in +\emph on +self +\emph default + along +\emph on +axis +\emph default +. + Perform the sum after converting data to data type +\emph on +rtype +\emph default +. +\end_layout + +\begin_layout Description +PyArray_CumSum ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + axis, +\family typewriter +int +\family default + rtype, +\family typewriter +PyArrayObject* +\family default + out) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +cumsum +\series default +( +\family typewriter +\emph on +axis +\family default +\emph default +, +\family typewriter +\emph on +rtype +\family default +\emph default +). + Return cumulative 1-d sums of elements in +\emph on +self +\emph default + along +\emph on +axis +\emph default +. + Perform the sum after converting data to data type +\emph on +rtype +\emph default +. +\end_layout + +\begin_layout Description +PyArray_Prod ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + axis, +\family typewriter +int +\family default + rtype, +\family typewriter +PyArrayObject* +\family default + out) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +prod +\series default +( +\emph on +axis +\emph default +, +\emph on +rtype +\emph default +). + Return 1-d products of elements in +\emph on +self +\emph default + along +\emph on +axis +\emph default +. + Perform the product after converting data to data type +\emph on +rtype +\emph default +. +\end_layout + +\begin_layout Description +PyArray_CumProd ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + axis, +\family typewriter +int +\family default + rtype, +\family typewriter +PyArrayObject* +\family default + out) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +cumprod +\series default +( +\emph on +axis +\emph default +, +\emph on +rtype +\emph default +). + Return 1-d cumulative products of elements in +\family typewriter +self +\family default + along +\family typewriter +axis +\family default +. + Perform the product after converting data to data type +\family typewriter +rtype +\family default +. +\end_layout + +\begin_layout Description +PyArray_All ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + axis, +\family typewriter +PyArrayObject* +\family default + out) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +all +\series default +( +\emph on +axis +\emph default +). + Return an array with True elements for every 1-d sub-array of +\family typewriter +self +\family default + defined by +\family typewriter +axis +\family default + in which all the elements are True. + +\end_layout + +\begin_layout Description +PyArray_Any ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + self, +\family typewriter +int +\family default + axis, +\family typewriter +PyArrayObject* +\family default + out) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\emph on +self +\emph default +. +\series bold +any +\series default +( +\emph on +axis +\emph default +). + Return an array with True elements for every 1-d sub-array of +\emph on +self +\emph default + defined by +\emph on +axis +\emph default + in which any of the elements are True. + +\end_layout + +\begin_layout Subsection +Functions +\end_layout + +\begin_layout Subsubsection +Array Functions +\end_layout + +\begin_layout Description +PyArray_AsCArray ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject** +\family default + op, +\family typewriter +void* +\family default + ptr, +\family typewriter +npy_intp* +\family default + dims, +\family typewriter +int +\family default + nd, +\family typewriter +int +\family default + typenum, +\family typewriter +int +\family default + itemsize) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Sometimes it is useful to access a multidimensional array as a C-style + multi-dimensional array so that algorithms can be implemented using C's + a[i][j][k] syntax. + This routine returns a pointer, +\emph on +ptr +\emph default +, that simulates this kind of C-style array, for 1-, 2-, and 3-d ndarrays. + +\end_layout + +\begin_deeper +\begin_layout Description +op The address to any Python object. + This Python object will be replaced with an equivalent well-behaved, C-style + contiguous, ndarray of the given data type specifice by the last two arguments. + Be sure that stealing a reference in this way to the input object is justified. + +\end_layout + +\begin_layout Description +ptr The address to a (ctype* for 1-d, ctype** for 2-d or ctype*** for 3-d) + variable where ctype is the equivalent C-type for the data type. + On return, +\emph on +ptr +\emph default + will be addressable as a 1-d, 2-d, or 3-d array. + +\end_layout + +\begin_layout Description +dims An output array that contains the shape of the array object. + This array gives boundaries on any looping that will take place. + +\end_layout + +\begin_layout Description +nd The dimensionality of the array (1, 2, or 3). + +\end_layout + +\begin_layout Description +typenum The expected data type of the array. + +\end_layout + +\begin_layout Description +itemsize This argument is only needed when +\emph on +typenum +\emph default + represents a flexible array. + Otherwise it should be 0. + +\end_layout + +\end_deeper +\begin_layout Note +The simulation of a C-style array is not complete for 2-d and 3-d arrays. + For example, the simulated arrays of pointers cannot be passed to subroutines + expecting specific, statically-defined 2-d and 3-d arrays. + To pass to functions requiring those kind of inputs, you must statically + define the required array and copy data. + +\end_layout + +\begin_layout Description +PyArray_Free ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + op, +\family typewriter +void* +\family default + ptr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Must be called with the same objects and memory locations returned from + +\family typewriter +PyArray_AsCArray +\family default +(...). + This function cleans up memory that otherwise would get leaked. +\end_layout + +\begin_layout Description +PyArray_Concatenate ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +int +\family default + axis) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Join the sequence of objects in +\emph on +obj +\emph default + together along +\emph on +axis +\emph default + into a single array. + If the dimensions or types are not compatible an error is raised. +\end_layout + +\begin_layout Description +PyArray_InnerProduct ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + obj1, +\family typewriter +PyObject* +\family default + obj2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute a product-sum over the last dimensions of +\emph on +obj1 +\emph default + and +\emph on +obj2 +\emph default +. + Neither array is conjugated. + +\end_layout + +\begin_layout Description +PyArray_MatrixProduct ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + obj1, +\family typewriter +PyObject* +\family default + obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute a product-sum over the last dimension of +\emph on +obj1 +\emph default + and the second-to-last dimension of +\emph on +obj2 +\emph default +. + For 2-d arrays this is a matrix-product. + Neither array is conjugated. + +\end_layout + +\begin_layout Description +PyArray_CopyAndTranspose ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject +\family default +* op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A specialized copy and transpose function that works only for 2-d arrays. + The returned array is a transposed copy of +\emph on +op +\emph default +. +\end_layout + +\begin_layout Description +PyArray_Correlate ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + op1, +\family typewriter +PyObject* +\family default + op2, +\family typewriter +int +\family default + mode) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute the 1-d correlation of the 1-d arrays +\emph on +op1 +\emph default + and +\emph on +op2 +\emph default +. + The correlation is computed at each output point by multiplying +\emph on +op1 +\emph default + by a shifted version of +\emph on +op2 +\emph default + and summing the result. + As a result of the shift, needed values outside of the defined range of + +\emph on +op1 +\emph default + and +\emph on +op2 +\emph default + are interpreted as zero. + The mode determines how many shifts to return: 0 - return only shifts that + did not need to assume zero-values; 1 - return an object that is the same + size as +\emph on +op1 +\emph default +, 2 - return all possible shifts (any overlap at all is accepted). + +\end_layout + +\begin_layout Description +PyArray_Where ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + condition, +\family typewriter +PyObject* +\family default + x, +\family typewriter +PyObject* +\family default + y) +\end_layout + +\begin_layout Description +\InsetSpace ~ + If both +\family typewriter +x +\family default + and +\family typewriter +y +\family default + are +\family typewriter +NULL +\family default +, then return +\family typewriter +PyArray_Nonzero +\family default +( +\family typewriter +\emph on +condition +\family default +\emph default +). + Otherwise, both +\emph on +x +\emph default + and +\emph on +y +\emph default + must be given and the object returned is shaped like +\emph on +condition +\emph default + and has elements of +\emph on +x +\emph default + and +\emph on +y +\emph default + where +\emph on +condition +\emph default + is respectively True or False. + +\end_layout + +\begin_layout Subsubsection +Other functions +\end_layout + +\begin_layout Description +PyArray_CheckStrides ( +\family typewriter +Bool +\family default +) ( +\family typewriter +int +\family default + elsize, +\family typewriter +int +\family default + nd, +\family typewriter +npy_intp +\family default + numbytes, +\family typewriter +npy_intp* +\family default + dims, +\family typewriter +npy_intp* +\family default + newstrides) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Determine if +\emph on +newstrides +\emph default + is a strides array consistent with the memory of an +\emph on +nd +\emph default +-dimensional array with shape +\family typewriter +dims +\family default + and element-size, +\emph on +elsize +\emph default +. + The +\emph on +newstrides +\emph default + array is checked to see if jumping by the provided number of bytes in each + direction will ever mean jumping more than +\emph on +numbytes +\emph default + which is the assumed size of the available memory segment. + If +\emph on +numbytes +\emph default + is 0, then an equivalent +\emph on +numbytes +\emph default + is computed assuming +\emph on +nd +\emph default +, +\emph on +dims +\emph default +, and +\emph on +elsize +\emph default + refer to a single-segment array. + Return +\family typewriter +NPY_TRUE +\family default + if +\emph on +newstrides +\emph default + is acceptable, otherwise return +\family typewriter +NPY_FALSE +\family default +. +\end_layout + +\begin_layout Description +PyArray_MultiplyList ( +\family typewriter +npy_intp +\family default +) ( +\family typewriter +npy_intp* +\family default + seq, +\family typewriter +int +\family default + n) +\end_layout + +\begin_layout Description +PyArray_MultiplyIntList ( +\family typewriter +int +\family default +) ( +\family typewriter +int* +\family default + seq, +\family typewriter +int +\family default + n) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Both of these routines multiply an +\emph on +n +\emph default +-length array, +\emph on +seq +\emph default +, of integers and return the result. + No overflow checking is performed. +\end_layout + +\begin_layout Description +PyArray_CompareLists ( +\family typewriter +int +\family default +) ( +\family typewriter +npy_intp* +\family default + l1, +\family typewriter +npy_intp* +\family default + l2, +\family typewriter +int +\family default + n) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Given two +\emph on +n +\emph default +-length arrays of integers, +\emph on +l1 +\emph default +, and +\emph on +l2 +\emph default +, return 1 if the lists are identical; otherwise, return 0. + +\end_layout + +\begin_layout Subsection +Array Iterators +\end_layout + +\begin_layout Standard +An array iterator is a simple way to access the elements of an N-dimensional + array quickly and efficiently. + Section +\begin_inset LatexCommand ref +reference "sec:array_iterator" + +\end_inset + + provides more description and examples of this useful approach to looping + over an array. + +\end_layout + +\begin_layout Description +PyArray_IterNew ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an array iterator object from the array, +\emph on +arr +\emph default +. + This is equivalent to +\emph on +arr +\emph default +. +\series bold +flat +\series default +. + The array iterator object makes it easy to loop over an N-dimensional non-conti +guous array in C-style contiguous fashion. + +\end_layout + +\begin_layout Description +PyArray_IterAllButAxis ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + arr, +\family typewriter +int +\family default + *axis) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an array iterator that will iterate over all axes but the one provided + in +\emph on +*axis +\emph default +. + The returned iterator cannot be used with +\family typewriter +PyArray_ITER_GOTO1D +\family default +. + This iterator could be used to write something similar to what ufuncs do + wherein the loop over the largest axis is done by a separate sub-routine. + If +\emph on +*axis +\emph default + is negative then +\emph on +*axis +\emph default + will be set to the axis having the smallest stride and that axis will be + used. + +\end_layout + +\begin_layout Description +PyArray_BroadcastToShape ( +\family typewriter +PyObject* +\family default +)( +\family typewriter +PyObject* +\family default + arr, +\family typewriter +npy_intp +\family default + *dimensions, +\family typewriter +int +\family default + nd) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an array iterator that is broadcast to iterate as an array of the + shape provided by +\emph on +dimensions +\emph default + and +\emph on +nd +\emph default +. + +\end_layout + +\begin_layout Description +PyArrayIter_Check ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates true if +\emph on +op +\emph default + is an array iterator (or instance of a subclass of the array iterator type). + +\end_layout + +\begin_layout Description +PyArray_ITER_RESET ( +\family typewriter +void +\family default +) ( +\family typewriter +PyObject* +\family default + iterator) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Reset an +\emph on +iterator +\emph default + to the beginning of the array. +\end_layout + +\begin_layout Description +PyArray_ITER_NEXT ( +\family typewriter +void +\family default +) ( +\family typewriter +PyObject* +\family default + iterator) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Incremement the index and the dataptr members of the +\emph on +iterator +\emph default + to point to the next element of the array. + If the array is not (C-style) contiguous, also increment the N-dimensional + coordinates array. +\end_layout + +\begin_layout Description +PyArray_ITER_DATA ( +\family typewriter +void* +\family default +)( +\family typewriter +PyObject* +\family default + iterator) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A pointer to the current element of the array. + +\end_layout + +\begin_layout Description +PyArray_ITER_GOTO ( +\family typewriter +void +\family default +) ( +\family typewriter +PyObject* +\family default + iterator, +\family typewriter +npy_intp* +\family default + destination) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Set the +\emph on +iterator +\emph default + index, dataptr, and coordinates members to the location in the array indicated + by the N-dimensional c-array, +\emph on +destination +\emph default +, which must have size at least +\emph on +iterator +\emph default +->nd_m1+1. +\end_layout + +\begin_layout Description +PyArray_ITER_GOTO1D ( +\family typewriter +PyObject* +\family default + iterator, +\family typewriter +npy_intp +\family default + index) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Set the +\emph on +iterator +\emph default + index and dataptr to the location in the array indicated by the integer + +\emph on +index +\emph default + which points to an element in the C-styled flattened array. + +\end_layout + +\begin_layout Description +PyArray_ITER_NOTDONE ( +\family typewriter +int +\family default +)( +\family typewriter +PyObject* +\family default + iterator) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates TRUE as long as the iterator has not looped through all of the + elements, otherwise it evaluates FALSE. + +\end_layout + +\begin_layout Subsection +Broadcasting (multi-iterators) +\end_layout + +\begin_layout Description +PyArray_MultiIterNew ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +int +\family default + num, ...) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A simplified interface to broadcasting. + This function takes the number of arrays to broadcast and then +\emph on +num +\emph default + extra ( +\family typewriter +PyObject* +\family default +) arguments. + These arguments are converted to arrays and iterators are created. + +\family typewriter +PyArray_Broadcast +\family default + is then called on the resulting multi-iterator object. + The resulting, broadcasted mult-iterator object is then returned. + A broadcasted operation can then be performed using a single loop and using + +\family typewriter +PyArray_MultiIter_NEXT +\family default +(..) +\end_layout + +\begin_layout Description +PyArray_MultiIter_RESET ( +\family typewriter +void +\family default +) ( +\family typewriter +PyObject* +\family default + multi) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Reset all the iterators to the beginning in a multi-iterator object, +\emph on +multi +\emph default +. +\end_layout + +\begin_layout Description +PyArray_MultiIter_NEXT ( +\family typewriter +void +\family default +) ( +\family typewriter +PyObject* +\family default + multi) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Advance each iterator in a multi-iterator object, +\emph on +multi +\emph default +, to its next (broadcasted) element. +\end_layout + +\begin_layout Description +PyArray_MultiIter_DATA ( +\family typewriter +void* +\family default +)( +\family typewriter +PyObject* +\family default + multi, +\family typewriter +int +\family default + i) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the data-pointer of the +\emph on +i +\emph default + +\begin_inset Formula $^{\textrm{th}}$ +\end_inset + + iterator in a multi-iterator object. + +\end_layout + +\begin_layout Description +PyArray_MultiIter_NEXTi ( +\family typewriter +void +\family default +) ( +\family typewriter +PyObject* +\family default + multi, +\family typewriter +int +\family default + i) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Advance the pointer of only the +\emph on +i +\emph default + +\begin_inset Formula $^{\textrm{th}}$ +\end_inset + + iterator. +\end_layout + +\begin_layout Description +PyArray_MultiIter_GOTO ( +\family typewriter +void +\family default +) ( +\family typewriter +PyObject* +\family default + multi, +\family typewriter +npy_intp* +\family default + destination) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Advance each iterator in a multi-iterator object, +\emph on +multi +\emph default +, to the given +\begin_inset Formula $N$ +\end_inset + +-dimensional +\emph on +destination +\emph default + where +\begin_inset Formula $N$ +\end_inset + + is the number of dimensions in the broadcasted array. + +\end_layout + +\begin_layout Description +PyArray_MultiIter_GOTO1D ( +\family typewriter +void +\family default +) ( +\family typewriter +PyObject* +\family default + multi, +\family typewriter +npy_intp +\family default + index) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Advance each iterator in a multi-iterator object, +\emph on +multi +\emph default +, to the corresponding location of the +\emph on +index +\emph default + into the flattened broadcasted array. + +\end_layout + +\begin_layout Description +PyArray_MultiIter_NOTDONE ( +\family typewriter +int +\family default +)( +\family typewriter +PyObject* +\family default + multi) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates TRUE as long as the multi-iterator has not looped through all + of the elements (of the broadcasted result), otherwise it evaluates FALSE. + +\end_layout + +\begin_layout Description +PyArray_Broadcast ( +\family typewriter +int +\family default +) ( +\family typewriter +PyArrayMultiIterObject* +\family default + mit) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This function encapsulates the broadcasting rules. + The +\emph on +mit +\emph default + container should already contain iterators for all the arrays that need + to be broadcast. + On return, these iterators will be adjusted so that iteration over each + simultaneously will accomplish the broadcasting. + A negative number is returned if an error occurs. + +\end_layout + +\begin_layout Description +PyArray_RemoveSmallest ( +\family typewriter +int +\family default +) ( +\family typewriter +PyArrayMultiIterObject* +\family default + mit) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This function takes a multi-iterator object that has been previously +\begin_inset Quotes eld +\end_inset + +broadcasted, +\begin_inset Quotes erd +\end_inset + + finds the dimension with the smallest +\begin_inset Quotes eld +\end_inset + +sum of strides +\begin_inset Quotes erd +\end_inset + + in the broadcasted result and adapts all the iterators so as not to iterate + over that dimension (by effectively making them of length-1 in that dimension). + The corresponding dimension is returned unless +\emph on +mit +\emph default +->nd is 0, then -1 is returned. + This function is useful for constructing ufunc-like routines that broadcast + their inputs correctly and then call a strided 1-d version of the routine + as the inner-loop. + This 1-d version is usually optimized for speed and for this reason the + loop should be performed over the axis that won't require large stride + jumps. + +\end_layout + +\begin_layout Subsection +Array Scalars +\end_layout + +\begin_layout Description +PyArray_Return ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyArrayObject* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This function checks to see if +\emph on +arr +\emph default + is a 0-dimensional array and, if so, returns the appropriate array scalar. + It should be used whenever 0-dimensional arrays could be returned to Python. +\end_layout + +\begin_layout Description +PyArray_Scalar ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +void* +\family default + data, +\family typewriter +PyArray_Descr* +\family default + dtype, +\family typewriter +PyObject* +\family default + itemsize) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an array scalar object of the given enumerated +\emph on +typenum +\emph default + and +\emph on +itemsize +\emph default + by +\series bold +copying +\series default + from memory pointed to by +\emph on +data +\emph default +. + If +\emph on +swap +\emph default + is nonzero then this function will byteswap the data if appropriate to + the data-type because array scalars are always in correct machine-byte + order. +\end_layout + +\begin_layout Description +PyArray_ToScalar ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +void* +\family default + data, +\family typewriter +PyArrayObject* +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an array scalar object of the type and itemsize indicated by the + array object +\emph on +arr +\emph default + copied from the memory pointed to by +\emph on +data +\emph default + and swapping if the data in +\emph on +arr +\emph default + is not in machine byte-order. +\end_layout + +\begin_layout Description +PyArray_FromScalar ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + scalar, +\family typewriter +PyArray_Descr* +\family default + outcode) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a 0-dimensional array of type determined by +\emph on +outcode +\emph default + from +\emph on +scalar +\emph default + which should be an array-scalar object. + If +\emph on +outcode +\emph default + is NULL, then the type is determined from +\family typewriter +\emph on +scalar +\family default +\emph default +. + +\end_layout + +\begin_layout Description +PyArray_ScalarAsCtype ( +\family typewriter +void +\family default +) ( +\family typewriter +PyObject* +\family default + scalar, +\family typewriter +void* +\family default + ctypeptr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return in +\emph on +ctypeptr +\emph default + a pointer to the actual value in an array scalar. + There is no error checking so +\emph on +scalar +\emph default + must be an array-scalar object, and ctypeptr must have enough space to + hold the correct type. + For flexible-sized types, a pointer to the data is copied into the memory + of +\emph on +ctypeptr +\emph default +, for all other types, the actual data is copied into the address pointed + to by +\emph on +ctypeptr +\emph default +. + +\end_layout + +\begin_layout Description +PyArray_CastScalarToCtype ( +\family typewriter +void +\family default +) ( +\family typewriter +PyObject* +\family default + scalar, +\family typewriter +void* +\family default + ctypeptr, +\family typewriter +PyArray_Descr* +\family default + outcode) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the data (cast to the data type indicated by +\emph on +outcode +\emph default +) from the array-scalar, +\emph on +scalar +\emph default +, into the memory pointed to by +\emph on +ctypeptr +\emph default + (which must be large enough to handle the incoming memory). + +\end_layout + +\begin_layout Description +PyArray_TypeObjectFromType ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +int +\family default + type) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns a scalar type-object from a type-number, +\emph on +type +\emph default +. + Equivalent to +\family typewriter +PyArray_DescrFromType +\family default +( +\emph on +type +\emph default +)->typeobj except for reference counting and error-checking. + Returns a new reference to the typeobject on success or +\family typewriter +NULL +\family default + on failure. +\end_layout + +\begin_layout Description +PyArray_ScalarKind ( +\family typewriter +NPY_SCALARKIND +\family default +) ( +\family typewriter +int +\family default + typenum, +\family typewriter +PyArrayObject** +\family default + arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the kind of scalar represented by +\emph on +typenum +\emph default + and the array in +\emph on +*arr +\emph default + (if +\emph on +arr +\emph default + is not +\family typewriter +NULL +\family default +). + The array is assumed to be rank-0 and only used if +\emph on +typenum +\emph default + represents a signed integer. + If +\emph on +arr +\emph default + is not +\family typewriter +NULL +\family default + and the first element is negative then +\family typewriter +NPY_INTNEG_SCALAR +\family default + is returned, otherwise +\family typewriter +NPY_INTPOS_SCALAR +\family default + is returned. + The possible return values are +\family typewriter +NPY_ +\family default +<kind> +\family typewriter +_SCALAR +\family default + where <kind> can be +\series bold +INTPOS +\series default +, +\series bold +INTNEG +\series default +, +\series bold +FLOAT +\series default +, +\series bold +COMPLEX +\series default +, +\series bold +BOOL +\series default +, or +\series bold +OBJECT +\series default +. + +\family typewriter +NPY_NOSCALAR +\family default + is also an enumerated value +\family typewriter +NPY_SCALARKIND +\family default + variables can take on. + +\end_layout + +\begin_layout Description +PyArray_CanCoerceScalar ( +\family typewriter +int +\family default +) ( +\family typewriter +char +\family default + thistype, +\family typewriter +char +\family default + neededtype, +\family typewriter +NPY_SCALARKIND +\family default + scalar) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Implements the rules for scalar coercion. + Scalars are only silently coerced from thistype to neededtype if this function + returns nonzero. + If scalar is +\family typewriter +NPY_NOSCALAR +\family default +, then this function is equivalent to +\family typewriter +PyArray_CanCastSafely +\family default +. + The rule is that scalars of the same KIND can be coerced into arrays of + the same KIND. + This rule means that high-precision scalars will never cause low-precision + arrays of the same KIND to be upcast. + +\end_layout + +\begin_layout Subsection +Data-type descriptors +\end_layout + +\begin_layout Warning +Data-type objects must be reference counted so be aware of the action on + the data-type reference of different C-API calls. + The standard rule is that when a data-type object is returned it is a new + reference. + Functions that take +\family typewriter +PyArray_Descr* +\family default + objects and return arrays steal references to the data-type their inputs + unless otherwise noted. + Therefore, you must own a reference to any data-type object used as input + to such a function. + +\end_layout + +\begin_layout Description +PyArrayDescr_Check ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates as true if +\emph on +obj +\emph default + is a data-type object ( +\family typewriter +PyArray_Descr* +\family default +). +\end_layout + +\begin_layout Description +PyArray_DescrNew ( +\family typewriter +PyArray_Descr* +\family default +) ( +\family typewriter +PyArray_Descr* +\family default + obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a new data-type object copied from +\emph on +obj +\emph default + (the fields reference is just updated so that the new object points to + the same fields dictionary if any). + +\end_layout + +\begin_layout Description +PyArray_DescrNewFromType ( +\family typewriter +PyArray_Descr* +\family default +) ( +\family typewriter +int +\family default + typenum) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Create a new data-type object from the built-in (or user-registered) data-type + indicated by +\emph on +typenum +\emph default +. + All builtin types should not have any of their fields changed. + This creates a new copy of the +\family typewriter +PyArray_Descr +\family default + structure so that you can fill it in as appropriate. + This function is especially needed for flexible data-types which need to + have a new elsize member in order to be meaningful in array construction. + +\end_layout + +\begin_layout Description +PyArray_DescrNewByteorder ( +\family typewriter +PyArray_Descr* +\family default +) ( +\family typewriter +PyArray_Descr* +\family default + obj, +\family typewriter +char +\family default + newendian) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Create a new data-type object with the byteorder set according to +\emph on +newendian +\emph default +. + All referenced data-type objects (in subdescr and fields members of the + data-type object) are also changed (recursively). + If a byteorder of +\family typewriter +NPY_IGNORE +\family default + is encountered it is left alone. + If newendian is +\family typewriter +NPY_SWAP +\family default +, then all byte-orders are swapped. + Other valid newendian values are +\family typewriter +NPY_NATIVE +\family default +, +\family typewriter +NPY_LITTLE +\family default +, and +\family typewriter +NPY_BIG +\family default + which all cause the returned data-typed descriptor (and all it's referenced + data-type descriptors) to have the corresponding byte-order. +\end_layout + +\begin_layout Description +PyArray_DescrFromObject ( +\family typewriter +PyArray_Descr* +\family default +) ( +\family typewriter +PyObject* +\family default + op, +\family typewriter +PyArray_Descr* +\family default + mintype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Determine an appropriate data-type object from the object +\emph on +op +\emph default + (which should be a +\begin_inset Quotes eld +\end_inset + +nested +\begin_inset Quotes erd +\end_inset + + sequence object) and the minimum data-type descriptor mintype (which can + be +\family typewriter +NULL +\family default +). + Similar in behavior to array( +\emph on +op +\emph default +).dtype. + Don't confuse this function with +\family typewriter +PyArray_DescrConverter +\family default +. + This function essentially looks at all the objects in the (nested) sequence + and determines the data-type from the elements it finds. + +\end_layout + +\begin_layout Description +PyArray_DescrFromScalar ( +\family typewriter +PyArray_Descr* +\family default +) ( +\family typewriter +PyObject* +\family default + scalar) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a data-type object from an array-scalar object. + No checking is done to be sure that +\emph on +scalar +\emph default + is an array scalar. + If no suitable data-type can be determined, then a data-type of NPY_OBJECT + is returned by default. + +\end_layout + +\begin_layout Description +PyArray_DescrFromType ( +\family typewriter +PyArray_Descr* +\family default +) ( +\family typewriter +int +\family default + typenum) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns a data-type object corresponding to +\emph on +typenum +\emph default +. + The +\emph on +typenum +\emph default + can be one of the enumerated types, a character code for one of the enumerated + types, or a user-defined type. + +\end_layout + +\begin_layout Description +PyArray_DescrConverter ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +PyArray_Descr** +\family default + dtype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert any compatible Python object, +\emph on +obj +\emph default +, to a data-type object in +\emph on +dtype +\emph default +. + A large number of Python objects can be converted to data-type objects. + See Chapter +\begin_inset LatexCommand ref +reference "cha:Data-descriptor-objects" + +\end_inset + + for a complete description. + This version of the converter converts None objects to a +\family typewriter +NPY_DEFAULT_TYPE +\family default + data-type object. + This function can be used with the +\begin_inset Quotes eld +\end_inset + +O& +\begin_inset Quotes erd +\end_inset + + character code in PyArg_ParseTuple processing. + +\end_layout + +\begin_layout Description +PyArray_DescrConverter2 ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +PyArray_Descr** +\family default + dtype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert any compatible Python object, +\emph on +obj +\emph default +, to a data-type object in +\emph on +dtype +\emph default +. + This version of the converter converts None objects so that the returned + data-type is +\family typewriter +NULL +\family default +. + This function can also be used with the +\begin_inset Quotes eld +\end_inset + +O& +\begin_inset Quotes erd +\end_inset + + character in PyArg_ParseTuple processing. +\end_layout + +\begin_layout Description +Pyarray_DescrAlignConverter ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +PyArray_Descr** +\family default + dtype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Like +\family typewriter +PyArray_DescrConverter +\family default + except it aligns C-struct-like objects on word-boundaries as the compiler + would. +\end_layout + +\begin_layout Description +Pyarray_DescrAlignConverter2 ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +PyArray_Descr** +\family default + dtype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Like +\family typewriter +PyArray_DescrConverter2 +\family default + except it aligns C-struct-like objects on word-boundaries as the compiler + would. +\end_layout + +\begin_layout Description +PyArray_FieldNames ( +\family typewriter +PyObject* +\family default +)( +\family typewriter +PyObject* +\family default + dict) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Take the fields dictionary, +\family typewriter +\emph on +dict +\family default +\emph default +, such as the one attached to a data-type object and construct an ordered-list + of field names such as is stored in the names field of the +\family typewriter +PyArray_Descr +\family default + object. + +\end_layout + +\begin_layout Subsection +Conversion Utilities +\end_layout + +\begin_layout Subsubsection +For use with +\family typewriter +PyArg_ParseTuple +\end_layout + +\begin_layout Standard +All of these functions can be used in +\family typewriter +PyArg_ParseTuple +\family default +(...) with the +\begin_inset Quotes eld +\end_inset + +O& +\begin_inset Quotes erd +\end_inset + + format specifier to automatically convert any Python object to the required + C-object. + All of these functions return +\family typewriter +NPY_SUCCEED +\family default + if successful and +\family typewriter +NPY_FAIL +\family default + if not. + The first argument to all of these function is a Python object. + The second argument is the +\series bold +address +\series default + of the C-type to convert the Python object to. + +\end_layout + +\begin_layout Warning +Be sure to understand what steps you should take to manage the memory when + using these conversion functions. + These functions can require freeing memory, and/or altering the reference + counts of specific objects based on your use. +\end_layout + +\begin_layout Description +PyArray_Converter ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +PyObject** +\family default + address) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert any Python object to a +\family typewriter +PyArrayObject +\family default +. + If +\family typewriter +PyArray_Check +\family default +( +\family typewriter +\emph on +obj +\family default +\emph default +) is TRUE then its reference count is incremented and a reference placed + in +\emph on +address +\emph default +. + If +\emph on +obj +\emph default + is not an array, then convert it to an array using +\family typewriter +PyArray_FromAny +\family default +. + No matter what is returned, you must DECREF the object returned by this + routine in +\emph on +address +\emph default + when you are done with it. + +\end_layout + +\begin_layout Description +PyArray_OutputConverter ( +\family typewriter +int +\family default +)( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +PyArrayObject** +\family default + address) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This is a default converter for output arrays given to functions. + If +\emph on +obj +\emph default + is +\family typewriter +Py_None +\family default + or +\family typewriter +NULL +\family default +, then +\emph on +*address +\emph default + will be +\family typewriter +NULL +\family default + but the call will succeed. + If +\family typewriter +PyArray_Check +\family default +( +\emph on +obj +\emph default +) is TRUE then it is returned in +\emph on +*address +\emph default + without incrementing its reference count. + +\end_layout + +\begin_layout Description +PyArray_IntpConverter ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +PyArray_Dims* +\family default + seq) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert any Python sequence, +\emph on +obj +\emph default +, smaller than +\family typewriter +NPY_MAXDIMS +\family default + to a C-array of +\family typewriter +npy_intp +\family default +. + The Python object could also be a single number. + The +\emph on +seq +\emph default + variable is a pointer to a structure with members ptr and len. + On successful return, +\emph on +seq +\emph default +->ptr contains a pointer to memory that must be freed to avoid a memory + leak. + The restriction on memory size allows this converter to be conveniently + used for sequences intended to be interpreted as array shapes. + +\end_layout + +\begin_layout Description +PyArray_BufferConverter ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +PyArray_Chunk* +\family default + buf) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert any Python object, +\emph on +obj +\emph default +, with a (single-segment) buffer interface to a variable with members that + detail the object's use of its chunk of memory. + The +\emph on +buf +\emph default + variable is a pointer to a structure with base, ptr, len, and flags members. + The +\family typewriter +PyArray_Chunk +\family default + structure is binary compatibile with the Python's buffer object (through + its len member on 32-bit platforms and its ptr member on 64-bit platforms + or in Python 2.5). + On return, the base member is set to +\emph on +obj +\emph default + (or its base if +\emph on +obj +\emph default + is already a buffer object pointing to another object). + If you need to hold on to the memory be sure to INCREF the base member. + The chunk of memory is pointed to by +\emph on +buf +\emph default +->ptr member and has length +\emph on +buf +\emph default +->len. + The flags member of +\emph on +buf +\emph default + is +\family typewriter +NPY_BEHAVED_RO +\family default + with the +\family typewriter +NPY_WRITEABLE +\family default + flag set if +\emph on +obj +\emph default + has a writeable buffer interface. + +\end_layout + +\begin_layout Description +PyArray_AxisConverter ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject +\family default +* obj, +\family typewriter +int* +\family default + axis) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert a Python object, +\emph on +obj +\emph default +, representing an axis argument to the proper value for passing to the functions + that take an integer axis. + Specifically, if +\emph on +obj +\emph default + is None, +\emph on +axis +\emph default + is set to +\family typewriter +NPY_MAXDIMS +\family default + which is interpreted correctly by the C-API functions that take axis arguments. +\end_layout + +\begin_layout Description +PyArray_BoolConverter ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +Bool* +\family default + value) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert any Python object, +\emph on +obj +\emph default +, to +\family typewriter +NPY_TRUE +\family default + or +\family typewriter +NPY_FALSE +\family default +, and place the result in +\emph on +value +\emph default +. +\end_layout + +\begin_layout Description +PyArray_ByteorderConverter ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +char* +\family default + endian) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert Python strings into the corresponding byte-order character: '>', + '<', 's', '=', or '|'. + +\end_layout + +\begin_layout Description +PyArray_SortkindConverter ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +NPY_SORTKIND* +\family default + sort) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert Python strings into one of +\family typewriter +NPY_QUICKSORT +\family default + (starts with 'q' or 'Q') , +\family typewriter +NPY_HEAPSORT +\family default + (starts with 'h' or 'H'), or +\family typewriter +NPY_MERGESORT +\family default + (starts with 'm' or 'M'). + +\end_layout + +\begin_layout Description +PyArray_SearchsideConverter ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +NPY_SEARCHSIDE* +\family default + side) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert Python strings into one of +\family typewriter +NPY_SEARCHLEFT +\family default + (starts with 'l' or 'L'), or +\family typewriter +NPY_SEARCHRIGHT +\family default + (starts with 'r' or 'R'). + +\end_layout + +\begin_layout Subsubsection +Other conversions +\end_layout + +\begin_layout Description +PyArray_PyIntAsInt ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert all kinds of Python objects (including arrays and array scalars) + to a standard integer. + On error, -1 is returned and an exception set. + You may find useful the macro: +\end_layout + +\begin_layout LyX-Code +#define error_converting(x) (((x) == -1) && PyErr_Occurred() +\end_layout + +\begin_layout Description +PyArray_PyIntAsIntp ( +\family typewriter +npy_intp +\family default +) ( +\family typewriter +PyObject* +\family default + op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert all kinds of Python objects (including arrays and array scalars) + to a (platform-pointer-sized) integer. + On error, -1 is returned and an exception set. + +\end_layout + +\begin_layout Description +PyArray_IntpFromSequence ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + seq, +\family typewriter +npy_intp* +\family default + vals, +\family typewriter +int +\family default + maxvals) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert any Python sequence (or single Python number) passed in as +\emph on +seq +\emph default + to (up to) +\emph on +maxvals +\emph default + pointer-sized integers and place them in the +\emph on +vals +\emph default + array. + The sequence can be smaller then +\emph on +maxvals +\emph default + as the number of converted objects is returned. + +\end_layout + +\begin_layout Description +PyArray_TypestrConvert ( +\family typewriter +int +\family default +) ( +\family typewriter +int +\family default + itemsize, +\family typewriter +int +\family default + gentype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert typestring characters (with +\emph on +itemsize +\emph default +) to basic enumerated data types. + The typestring character corresponding to signed and unsigned integers, + floating point numbers, and complex-floating point numbers are recognized + and converted. + Other values of gentype are returned. + This function can be used to convert, for example, the string 'f4' to +\family typewriter +NPY_FLOAT32 +\family default +. + +\end_layout + +\begin_layout Subsection +Miscellaneous +\end_layout + +\begin_layout Subsubsection +Importing the API +\end_layout + +\begin_layout Standard +In order to make use of the C-API from another extension module, the +\family typewriter +import_array +\family default +() command must be used. + If the extension module is self-contained in a single .c file, then that + is all that needs to be done. + If, however, the extension module involves multiple files where the C-API + is needed then some additional steps must be taken. +\end_layout + +\begin_layout Description +import_array (void) (void) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This function must be called in the initialization section of a module + that will make use of the C-API. + It imports the module where the function-pointer table is stored and points + the correct variable to it. + +\end_layout + +\begin_layout Description +PY_ARRAY_UNIQUE_SYMBOL +\end_layout + +\begin_layout Description +NO_IMPORT_ARRAY +\end_layout + +\begin_layout Description +\InsetSpace ~ + Using these #defines you can use the C-API in multiple files for a single + extension module. + In each file you must define +\family typewriter +PY_ARRAY_UNIQUE_SYMBOL +\family default + to some name that will hold the C-API ( +\emph on +e.g. + +\emph default + myextension_ARRAY_API). + This must be done +\series bold +before +\series default + including the numpy/arrayobject.h file. + In the module intialization routine you call +\family typewriter +import_array +\family default +(). + In addition, in the files that do not have the module initialization sub_routin +e define +\family typewriter +NO_IMPORT_ARRAY +\family default + prior to including numpy/arrayobject.h. +\end_layout + +\begin_layout Description +\InsetSpace ~ + Suppose I have two files coolmodule.c and coolhelper.c which need to be compiled + and linked into a single extension module. + Suppose coolmodule.c contains the required initcool module initialization + function (with the import_array() function called). + Then, coolmodule.c would have at the top: +\end_layout + +\begin_layout LyX-Code +#define PY_ARRAY_UNIQUE_SYMBOL cool_ARRAY_API +\end_layout + +\begin_layout LyX-Code +#include numpy/arrayobject.h +\end_layout + +\begin_layout Description +\InsetSpace ~ + On the other hand, coolhelper.c would contain at the top: +\end_layout + +\begin_layout LyX-Code +#define PY_ARRAY_UNIQUE_SYMBOL cool_ARRAY_API +\end_layout + +\begin_layout LyX-Code +#define NO_IMPORT_ARRAY +\end_layout + +\begin_layout LyX-Code +#include numpy/arrayobject.h +\end_layout + +\begin_layout Description +PyArray_GetNDArrayCVersion ( +\family typewriter +unsigned +\family default + +\family typewriter +int +\family default +) ( +\family typewriter +void +\family default +) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This just returns the value +\family typewriter +NPY_VERSION +\family default +. + Because it is in the C-API, however, comparing the output of this function + from the value defined in the current header gives a way to test if the + C-API has changed thus requiring a re-compilation of extension modules + that use the C-API. + +\end_layout + +\begin_layout Subsubsection +Internal Flexibility +\end_layout + +\begin_layout Description +PyArray_SetNumericOps ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + dict) +\end_layout + +\begin_layout Description +\InsetSpace ~ + NumPy stores an internal table of Python callable objects that are used + to implement arithmetic operations for arrays as well as certain array + calculation methods. + This function allows the user to replace any or all of these Python objects + with their own versions. + The keys of the dictionary, +\emph on +dict +\emph default +, are the named functions to replace and the paired value is the Python + callable object to use. + Care should be taken that the function used to replace an internal array + operation does not itself call back to that internal array operation (unless + you have designed the function to handle that), or an unchecked infinite + recursion can result (possibly causing program crash). + The key names that represent operations that can be replaced are: +\end_layout + +\begin_layout Quote + +\series bold +add +\series default +, +\series bold +subtract +\series default +, +\series bold +multiply +\series default +, +\series bold +divide +\series default +, +\series bold +remainder +\series default +, +\series bold +power +\series default +, +\series bold +square, reciprocal, ones_like, sqrt +\series default +, +\series bold +negative +\series default +, +\series bold +absolute +\series default +, +\series bold +invert +\series default +, +\series bold +left_shift +\series default +, +\series bold +right_shift +\series default +, +\series bold +bitwise_and +\series default +, +\series bold +bitwise_xor +\series default +, +\series bold +bitwise_or +\series default +, +\series bold +less +\series default +, +\series bold +less_equal +\series default +, +\series bold +equal +\series default +, +\series bold +not_equal +\series default +, +\series bold +greater +\series default +, +\series bold +greater_equal +\series default +, +\series bold +floor_divide +\series default +, +\series bold +true_divide +\series default +, +\series bold +logical_or +\series default +, +\series bold +logical_and +\series default +, +\series bold +floor +\series default +, +\series bold +ceil +\series default +, +\series bold +maximum +\series default +, +\series bold +minimum +\series default +, +\series bold +rint +\series default +. +\end_layout + +\begin_layout Description +\InsetSpace ~ + These functions are included here because they are used at least once in + the array object's methods. + The function returns -1 (without setting a Python Error) if one of the + objects being assigned is not callable. +\end_layout + +\begin_layout Description +PyArray_GetNumericOps ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +void +\family default +) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a Python dictionary containing the callable Python objects stored + in the the internal arithmetic operation table. + The keys of this dictionary are given in the explanation for +\family typewriter +PyArray_SetNumericOps +\family default +. +\end_layout + +\begin_layout Description +PyArray_SetStringFunction ( +\family typewriter +void +\family default +) ( +\family typewriter +PyObject* +\family default + op, +\family typewriter +int +\family default + repr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This function allows you to alter the tp_str and tp_repr methods of the + array object to any Python function. + Thus you can alter what happens for all arrays when str(arr) or repr(arr) + is called from Python. + The function to be called is passed in as +\emph on +op +\emph default +. + If +\emph on +repr +\emph default + is non-zero, then this function will be called in response to repr(arr), + otherwise the function will be called in response to str(arr). + No check on whether or not +\emph on +op +\emph default + is callable is performed. + The callable passed in to +\emph on +op +\emph default + should expect an array argument and should return a string to be printed. +\end_layout + +\begin_layout Subsubsection +Memory management +\end_layout + +\begin_layout Description +PyDataMem_NEW ( +\family typewriter +char* +\family default +) ( +\family typewriter +size_t +\family default + nbytes) +\end_layout + +\begin_layout Description +PyDataMem_FREE ( +\family typewriter +char* +\family default + ptr) +\end_layout + +\begin_layout Description +PyDataMem_RENEW ( +\family typewriter +char* +\family default +) ( +\family typewriter +void * +\family default + ptr, +\family typewriter +size_t +\family default + newbytes) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Macros to allocate, free, and reallocate memory. + These macros are used internally to create arrays. +\end_layout + +\begin_layout Description +PyDimMem_NEW ( +\family typewriter +npy_intp* +\family default +) (nd) +\end_layout + +\begin_layout Description +PyDimMem_FREE ( +\family typewriter +npy_intp* +\family default + ptr) +\end_layout + +\begin_layout Description +PyDimMem_RENEW ( +\family typewriter +npy_intp* +\family default +) ( +\family typewriter +npy_intp* +\family default + ptr, +\family typewriter +npy_intp +\family default + newnd) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Macros to allocate, free, and reallocate dimension and strides memory. +\end_layout + +\begin_layout Description +PyArray_malloc (nbytes) +\end_layout + +\begin_layout Description +PyArray_free (ptr) +\end_layout + +\begin_layout Description +PyArray_realloc (ptr, nbytes) +\end_layout + +\begin_layout Description +\InsetSpace ~ + These macros use different memory allocators, depending on the constant + +\family typewriter +NPY_USE_PYMEM +\family default +. + The system malloc is used when NPY_USE_PYMEM is 0, if NPY_USE_PYMEM is + 1, then the Python memory allocator is used. + +\end_layout + +\begin_layout Subsubsection +Threading support +\end_layout + +\begin_layout Standard +These macros are only meaningful if +\family typewriter +NPY_ALLOW_THREADS +\family default + evaluates True during compilation of the extension module. + Otherwise, these macros are equivalent to whitespace. + Python uses a single Global Interpreter Lock (GIL) for each Python process + so that only a single thread may excecute at a time (even on multi-cpu + machines). + When calling out to a compiled function that may take time to compute (and + does not have side-effects for other threads like updated global variables), + the GIL should be released so that other Python threads can run while the + time-consuming calculations are performed. + This can be accomplished using two groups of macros. + Typically, if one macro in a group is used in a code block, all of them + must be used in the same code block. + Currently, +\family typewriter +NPY_ALLOW_THREADS +\family default + is defined to the python-defined +\family typewriter +WITH_THREADS +\family default + constant unless the environment variable +\family typewriter +NPY_NOSMP +\family default + is set in which case +\family typewriter +NPY_ALLOW_THREADS +\family default + is defined to be 0. + +\end_layout + +\begin_layout Description +Group\InsetSpace ~ +1 This group is used to call code that may take some time but does + not use any Python C-API calls. + Thus, the GIL should be released during its calculation. +\end_layout + +\begin_deeper +\begin_layout Description +NPY_BEGIN_ALLOW_THREADS Equivalent to +\family typewriter +Py_BEGIN_ALLOW_THREADS +\family default + except it uses +\family typewriter +NPY_ALLOW_THREADS +\family default + to determine if the macro if replaced with white-space or not. + +\end_layout + +\begin_layout Description +NPY_END_ALLOW_THREADS Equivalent to +\family typewriter +Py_END_ALLOW_THREADS +\family default + except it uses +\family typewriter +NPY_ALLOW_THREADS +\family default + to determine if the macro if replaced with white-space or not. + +\end_layout + +\begin_layout Description +NPY_BEGIN_THREADS_DEF Place in the variable declaration area. + This macro sets up the variable needed for storing the Python state. +\end_layout + +\begin_layout Description +NPY_BEGIN_THREADS Place right before code that does not need the Python + interpreter (no Python C-API calls). + This macro saves the Python state and releases the GIL. +\end_layout + +\begin_layout Description +NPY_END_THREADS Place right after code that does not need the Python interpreter. + This macro acquires the GIL and restores the Python state from the saved + variable. +\end_layout + +\begin_layout Description +NPY_BEGIN_THREADS_DESCR ( +\family typewriter +PyArray_Descr* +\family default + dtype) Useful to release the GIL only if +\emph on +dtype +\emph default + does not contain arbitrary Python objects which may need the Python interpreter + during execution of the loop. + Equivalent to +\end_layout + +\begin_layout Description +NPY_END_THREADS_DESCR ( +\family typewriter +PyArray_Descr* +\family default + dtype) Useful to regain the GIL in situations where it was released using + the BEGIN form of this macro. + +\end_layout + +\end_deeper +\begin_layout Description +Group\InsetSpace ~ +2 This group is used to re-acquire the Python GIL after it has been + released. + For example, suppose the GIL has been released (using the previous calls), + and then some path in the code (perhaps in a different subroutine) requires + use of the Python C-API, then these macros are useful to acquire the GIL. + These macros accomplish essentially a reverse of the previous three (acquire + the LOCK saving what state it had) and then re-release it with the saved + state. +\end_layout + +\begin_deeper +\begin_layout Description +NPY_ALLOW_C_API_DEF Place in the variable declaration area to set up the + necessary variable. + +\end_layout + +\begin_layout Description +NPY_ALLOW_C_API Place before code that needs to call the Python C-API (when + it is known that the GIL has already been released). + +\end_layout + +\begin_layout Description +NPY_DISABLE_C_API Place after code that needs to call the Python C-API (to + re-release the GIL). + +\end_layout + +\end_deeper +\begin_layout Tip +Never use semicolons after the threading support macros. +\end_layout + +\begin_layout Subsubsection +Priority +\end_layout + +\begin_layout Description +NPY_PRIOIRTY Default priority for arrays. +\end_layout + +\begin_layout Description +NPY_SUBTYPE_PRIORITY Default subtype priority. +\end_layout + +\begin_layout Description +NPY_SCALAR_PRIORITY Default scalar priority (very small) +\end_layout + +\begin_layout Description +PyArray_GetPriority ( +\family typewriter +double +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +double +\family default + def) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the +\series bold +__array_priority__ +\series default + attribute (converted to a double) of +\emph on +obj +\emph default + or +\emph on +def +\emph default + if no attribute of that name exists. + Fast returns that avoid the attribute lookup are provided for objects of + type +\family typewriter +PyArray_Type +\family default +. + +\end_layout + +\begin_layout Subsubsection +Default buffers +\end_layout + +\begin_layout Description +NPY_BUFSIZE Default size of the user-settable internal buffers. +\end_layout + +\begin_layout Description +NPY_MIN_BUFSIZE Smallest size of user-settable internal buffers. +\end_layout + +\begin_layout Description +NPY_MAX_BUFSIZE Largest size allowed for the user-settable buffers. +\end_layout + +\begin_layout Subsubsection +Other constants +\end_layout + +\begin_layout Description +NPY_NUM_FLOATTYPE The number of floating-point types +\end_layout + +\begin_layout Description +NPY_MAXDIMS The maximum number of dimensions allowed in arrays. +\end_layout + +\begin_layout Description +NPY_VERSION The current version of the ndarray object (check to see if this + variable is defined to guarantee the numpy/arrayobject.h header is being + used). + +\end_layout + +\begin_layout Description +NPY_FALSE Defined as 0 for use with Bool. +\end_layout + +\begin_layout Description +NPY_TRUE Defined as 1 for use with Bool. +\end_layout + +\begin_layout Description +NPY_FAIL The return value of failed converter functions which are called + using the +\begin_inset Quotes eld +\end_inset + +O& +\begin_inset Quotes erd +\end_inset + + syntax in PyArg_ParseTuple-like functions. +\end_layout + +\begin_layout Description +NPY_SUCCEED The return value of successful converter functions which are + called using the +\begin_inset Quotes eld +\end_inset + +O& +\begin_inset Quotes erd +\end_inset + + syntax in PyArg_ParseTuple-like functions. +\end_layout + +\begin_layout Subsubsection +Miscellaneous Macros +\end_layout + +\begin_layout Description +PyArray_SAMESHAPE (a1, a2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluates as True if arrays +\emph on +a1 +\emph default + and +\emph on +a2 +\emph default + have the same shape. + +\end_layout + +\begin_layout Description +PyArray_MAX (a,b) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns the maximum of +\emph on +a +\emph default + and +\emph on +b +\emph default +. + If ( +\emph on +a +\emph default +) or ( +\emph on +b +\emph default +) are expressions they are evaluated twice. +\end_layout + +\begin_layout Description +PyArray_MIN (a,b) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns the minimum of +\emph on +a +\emph default + and +\emph on +b +\emph default +. + If ( +\emph on +a +\emph default +) or ( +\emph on +b +\emph default +) are expressions they are evaluated twice. +\end_layout + +\begin_layout Description +PyArray_CLT (a,b) +\end_layout + +\begin_layout Description +PyArray_CGT (a,b) +\end_layout + +\begin_layout Description +PyArray_CLE (a,b) +\end_layout + +\begin_layout Description +PyArray_CGE (a,b) +\end_layout + +\begin_layout Description +PyArray_CEQ (a,b) +\end_layout + +\begin_layout Description +PyArray_CNE (a,b) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Implements the complex comparisons between two complex numbers (structures + with a real and imag member) using NumPy's definition of the ordering which + is lexicographic: comparing the real parts first and then the complex parts + if the real parts are equal. + +\end_layout + +\begin_layout Description +PyArray_REFCOUNT ( +\family typewriter +PyObject* +\family default + op) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns the reference count of any Python object. + +\end_layout + +\begin_layout Description +PyArray_XDECREF_ERR (PyObject *obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + DECREF's an array object which may have the +\family typewriter +NPY_UPDATEIFCOPY +\family default + flag set without causing the contents to be copied back into the original + array. + Resets the +\family typewriter +NPY_WRITEABLE +\family default + flag on the base object. + This is useful for recovering from an error condition when +\family typewriter +NPY_UPDATEIFCOPY +\family default + is used. + +\end_layout + +\begin_layout Subsubsection +Enumerated Types +\end_layout + +\begin_layout Description +NPY_SORTKIND A special variable-type which can take on the values +\series bold +NPY_ +\series default +<KIND> where <KIND> is +\end_layout + +\begin_layout Quote + +\series bold +QUICKSORT +\series default +, +\series bold +HEAPSORT +\series default +, +\series bold +MERGESORT +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\series bold +NPY_NSORTS +\series default + is defined to be the number of sorts. +\end_layout + +\begin_layout Description +NPY_SCALARKIND A special variable type indicating the number of +\begin_inset Quotes eld +\end_inset + +kinds +\begin_inset Quotes erd +\end_inset + + of scalars distinguished in determining scalar-coercion rules. + This variable can take on the values NPY_<KIND> where <KIND> can be +\end_layout + +\begin_layout Quote + +\series bold +NOSCALAR +\series default +, +\series bold +BOOL_SCALAR +\series default +, +\series bold +INTPOS_SCALAR +\series default +, +\series bold +INTNEG_SCALAR +\series default +, +\series bold +FLOAT_SCALAR +\series default +, +\series bold +COMPLEX_SCALAR +\series default +, +\series bold +OBJECT_SCALAR +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\series bold +NPY_NSCALARKINDS +\series default + is defined to be the number of scalar kinds (not including +\family typewriter +NPY_NOSCALAR +\family default +). + +\end_layout + +\begin_layout Description +NPY_ORDER A variable type indicating the order that an array should be interpret +ed in. + The value of a variable of this type can be +\series bold +NPY_ +\series default +<ORDER> where <ORDER> is +\end_layout + +\begin_layout Quote + +\series bold +ANYORDER +\series default +, +\series bold +CORDER +\series default +, +\series bold +FORTRANORDER +\end_layout + +\begin_layout Description +NPY_CLIPMODE A variable type indicating the kind of clipping that should + be applied in certain functions. + The value of a variable of this type can be +\series bold +NPY_ +\series default +<MODE> where <MODE> is +\end_layout + +\begin_layout Quote + +\series bold +CLIP +\series default +, +\series bold +WRAP +\series default +, +\series bold +RAISE +\begin_inset LatexCommand index +name "ndarray!C-API|)" + +\end_inset + + +\begin_inset LatexCommand index +name "C-API!array|)" + +\end_inset + + +\end_layout + +\begin_layout Section +UFunc API +\begin_inset LatexCommand index +name "ufunc!C-API|(" + +\end_inset + + +\begin_inset LatexCommand index +name "C-API!ufunc|(" + +\end_inset + + +\end_layout + +\begin_layout Subsection +Constants +\end_layout + +\begin_layout Description +UFUNC_ERR_<HANDLER> +\end_layout + +\begin_layout Description +\InsetSpace ~ + <HANDLER> can be +\series bold +IGNORE +\series default +, +\series bold +WARN +\series default +, +\series bold +RAISE +\series default +, or +\series bold +CALL +\end_layout + +\begin_layout Description +UFUNC_<THING>_<ERR> +\end_layout + +\begin_layout Description +\InsetSpace ~ + <THING> can be +\series bold +MASK +\series default +, +\series bold +SHIFT +\series default +, or +\series bold +FPE +\series default +, and <ERR> can be +\series bold +DIVIDEBYZERO +\series default +, +\series bold +OVERFLOW +\series default +, +\series bold +UNDERFLOW +\series default +, and +\series bold +INVALID +\series default +. +\end_layout + +\begin_layout Description +PyUFunc_<VALUE> <VALUE> can be +\series bold +One +\series default + (1), +\series bold +Zero +\series default + (0), or +\series bold +None +\series default + (-1) +\end_layout + +\begin_layout Subsection +Macros +\end_layout + +\begin_layout Description +NPY_LOOP_BEGIN_THREADS +\end_layout + +\begin_layout Description +\InsetSpace ~ + Used in universal function code to only release the Python GIL if loop->obj + is not true ( +\emph on +i.e. + +\emph default + this is not an OBJECT array loop). + Requires use of +\family typewriter +NPY_BEGIN_THREADS_DEF +\family default + in variable declaration area. +\end_layout + +\begin_layout Description +NPY_LOOP_END_THREADS +\end_layout + +\begin_layout Description +\InsetSpace ~ + Used in universal function code to re-acquire the Python GIL if it was + released (because loop->obj was not true). + +\end_layout + +\begin_layout Description +UFUNC_CHECK_ERROR (loop) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A macro used internally to check for errors and goto fail if found. + This macro requires a fail label in the current code block. + The +\emph on +loop +\emph default + variable must have at least members (obj, errormask, and errorobj). + If +\emph on +loop +\emph default +->obj is nonzero, then +\family typewriter +PyErr_Occurred +\family default +() is called (meaning the GIL must be held). + If +\emph on +loop +\emph default +->obj is zero, then if +\emph on +loop +\emph default +->errormask is nonzero, +\family typewriter +PyUFunc_checkfperr +\family default + is called with arguments +\emph on +loop +\emph default +->errormask and +\emph on +loop +\emph default +->errobj. + If the result of this check of the IEEE floating point registers is true + then the code redirects to the fail label which must be defined. +\end_layout + +\begin_layout Description +UFUNC_CHECK_STATUS ( +\emph on +ret +\emph default +) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A macro that expands to platform-dependent code. + The +\emph on +ret +\emph default + variable can can be any integer. + The +\family typewriter +UFUNC_FPE_ +\family default +<ERR> bits are set in +\emph on +ret +\emph default + according to the status of the corresponding error flags of the floating + point processor. + +\end_layout + +\begin_layout Subsection +Functions +\end_layout + +\begin_layout Description +PyUFunc_FromFuncAndData ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyUFuncGenericFunction* +\family default + func, +\family typewriter +void** +\family default + data, +\family typewriter +char* +\family default + types, +\family typewriter +int +\family default + ntypes, +\family typewriter +int +\family default + nin, +\family typewriter +int +\family default + nout, +\family typewriter +int +\family default + identity, +\family typewriter +char* +\family default + name, +\family typewriter +char* +\family default + doc, +\family typewriter +int +\family default + check_return) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Create a new broadcasting universal function from required variables. + Each ufunc builds around the notion of an element-by-element operation. + Each ufunc object contains pointers to 1-d loops implementing the basic + functionality for each supported type. + +\end_layout + +\begin_layout Description +nin The number of inputs to this operation. +\end_layout + +\begin_layout Description +nout The number of outputs +\end_layout + +\begin_layout Description +ntypes How many different data-type +\begin_inset Quotes eld +\end_inset + +signatures +\begin_inset Quotes erd +\end_inset + + the ufunc has implemented. + +\end_layout + +\begin_layout Description +func Must to an array of length +\emph on +ntypes +\emph default + containing +\family typewriter +PyUFuncGenericFunction +\family default + items. + These items are pointers to functions that acutally implement the underlying + (element-by-element) function +\begin_inset Formula $N$ +\end_inset + + times. + T +\end_layout + +\begin_layout Description +types Must be of length ( +\emph on +nin +\emph default ++ +\emph on +nout +\emph default +) +\emph on +*ntypes +\emph default +, and it contains the data-types (built-in only) that the corresponding + function in the +\emph on +func +\emph default + array can deal with. + +\end_layout + +\begin_layout Description +data Should be +\family typewriter +NULL +\family default + or a pointer to an array of size +\emph on +ntypes +\emph default +. + This array may contain arbitrary extra-data to be passed to the corresponding + 1-d loop function in the func array. + +\end_layout + +\begin_layout Description +name The name for the ufunc. + +\end_layout + +\begin_layout Description +doc Allows passing in a documentation string to be stored with the ufunc. + The documentation string should not contain the name of the function or + the calling signature as that will be dynamically determined from the object + and available when accessing the +\series bold +__doc__ +\series default + attribute of the ufunc. + +\end_layout + +\begin_layout Description +check_return Unused and present for backwards compatibility of the C-API. + A corresponding +\emph on +check_return +\emph default + integer does exist in the ufunc structure and it does get set with this + value when the ufunc object is created. + +\end_layout + +\begin_layout Description +PyUFunc_RegisterLoopForType ( +\family typewriter +int +\family default +) ( +\family typewriter +PyUFuncObject* +\family default + ufunc, +\family typewriter +int +\family default + usertype, +\family typewriter +PyUFuncGenericFunction +\family default + function, +\family typewriter +int* +\family default + arg_types, +\family typewriter +void* +\family default + data) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This function allows the user to register a 1-d loop with an already-created + ufunc to be used whenever the ufunc is called with any of its input arguments + as the user-defined data-type. + This is needed in order to make ufuncs work with built-in data-types. + The data-type must have been previously registered with the numpy system. + The loop is passed in as +\emph on +function +\emph default +. + This loop can take arbitrary data which should be passed in as +\emph on +data +\emph default +. + The data-types the loop requires are passed in as +\emph on +arg_types +\emph default + which must be a pointer to memory at least as large as ufunc->nargs. +\end_layout + +\begin_layout Description +PyUFunc_ReplaceLoopBySignature ( +\family typewriter +int +\family default +) ( +\family typewriter +PyUFuncObject* +\family default + ufunc, +\family typewriter +PyUFuncGenericFunction +\family default + newfunc, +\family typewriter +int* +\family default + signature, +\family typewriter +PyUFuncGenericFunction* +\family default + oldfunc) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Replace a 1-d loop matching the given +\emph on +signature +\emph default + in the already-created +\emph on +ufunc +\emph default + with the new 1-d loop newfunc. + Return the old 1-d loop function in +\emph on +oldfunc +\emph default +. + Return 0 on success and -1 on failure. + This function works only with built-in types (use +\family typewriter +PyUFunc_RegisterLoopForType +\family default + for user-defined types). + A signature is an array of data-type numbers indicating the inputs followed + by the outputs assumed by the 1-d loop. + +\end_layout + +\begin_layout Description +PyUFunc_GenericFunction ( +\family typewriter +int +\family default +) ( +\family typewriter +PyUFuncObject* +\family default + self, +\family typewriter +PyObject* +\family default + args, +\family typewriter +PyArrayObject** +\family default + mps) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A generic ufunc call. + The ufunc is passed in as +\emph on +self +\emph default +, the arguments to the ufunc as +\emph on +args +\emph default +. + The +\emph on +mps +\emph default + argument is an array of +\family typewriter +PyArrayObject +\family default + pointers containing the converted input arguments as well as the ufunc + outputs on return. + The user is responsible for managing this array and receives a new reference + for each array in +\emph on +mps +\emph default +. + The total number of arrays in +\emph on +mps +\emph default + is given by +\emph on +self +\emph default +->nin + +\emph on +self +\emph default +->nout. +\end_layout + +\begin_layout Description +PyUFunc_checkfperr ( +\family typewriter +int +\family default +) ( +\family typewriter +int +\family default + errmask, +\family typewriter +PyObject* +\family default + errobj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A simple interface to the IEEE error-flag checking support. + The +\emph on +errmask +\emph default + argument is a mask of +\family typewriter +UFUNC_MASK_<ERR> +\family default + bitmasks indicating which errors to check for (and how to check for them). + The +\emph on +errobj +\emph default + must be a Python tuple with two elements: a string containing the name + which will be used in any communication of error and either a callable + Python object (call-back function) or +\family typewriter +Py_None +\family default +. + The callable object will only be used if +\family typewriter +UFUNC_ERR_CALL +\family default + is set as the desired error checking method. + This routine manages the GIL and is safe to call even after releasing the + GIL. + If an error in the IEEE-compatibile hardware is determined a -1 is returned, + otherwise a 0 is returned. + +\end_layout + +\begin_layout Description +PyUFunc_clearfperr ( +\family typewriter +void +\family default +) () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Clear the IEEE error flags. + +\end_layout + +\begin_layout Description +PyUFunc_GetPyValues ( +\family typewriter +void +\family default +) ( +\family typewriter +char* +\family default + name, +\family typewriter +int* +\family default + bufsize, +\family typewriter +int* +\family default + errmask, +\family typewriter +PyObject** +\family default + errobj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Get the Python values used for ufunc processing from the thread-local storage + area unless the defaults have been set in which case the name lookup is + bypassed. + The name is placed as a string in the first element of +\emph on +*errobj +\emph default +. + The second element is the looked-up function to call on error callback. + The value of the looked-up buffer-size to use is passed into +\emph on +bufsize +\emph default +, and the value of the error mask is placed into +\emph on +errmask +\emph default +. + +\end_layout + +\begin_layout Subsection +Generic functions +\end_layout + +\begin_layout Standard +At the core of every ufunc is a collection of type-specific functions that + defines the basic functionality for each of the supported types. + These functions must evaluate the underlying function +\begin_inset Formula $N\geq1$ +\end_inset + + times. + Extra-data may be passed in that may be used during the calculation. + This feature allows some general functions to be used as these basic looping + functions. + The general function has all the code needed to point variables to the + right place and set up a function call. + The general function assumes that the actual function to call is passed + in as the extra data and calls it with the correct values. + All of these functions are suitable for placing directly in the array of + functions stored in the functions member of the PyUFuncObject structure. + +\end_layout + +\begin_layout Description +PyUFunc_f_f_As_d_d ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +PyUFunc_d_d ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +PyUFunc_f_f ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +PyUFunc_g_g ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +PyUFunc_F_F_As_D_D ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +PyUFunc_F_F ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +PyUFunc_D_D ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +PyUFunc_G_G ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Type specific, core 1-d functions for ufuncs where each calculation is + obtained by calling a function taking one input argument and returning + one output. + This function is passed in +\family typewriter +func +\family default +. + The letters correspond to dtypechar's of the supported data types ( +\family typewriter +f +\family default + - float, +\family typewriter +d +\family default + - double, +\family typewriter +g +\family default + - long double, +\family typewriter +F +\family default + - cfloat, +\family typewriter +D +\family default + - cdouble, +\family typewriter +G +\family default + - clongdouble). + The argument +\emph on +func +\emph default + must support the same signature. + The _As_X_X variants assume ndarray's of one data type but cast the values + to use an underlying function that takes a different data type. + Thus, +\family typewriter +PyUFunc_f_f_As_d_d +\family default + uses ndarrays of data type +\family typewriter +NPY_FLOAT +\family default + but calls out to a C-function that takes double and returns double. + +\end_layout + +\begin_layout Description +PyUFunc_ff_f_As_dd_d ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +PyUFunc_ff_f ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +PyUFunc_dd_d ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +PyUFunc_gg_g ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +PyUFunc_FF_F_As_DD_D ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +PyUFunc_DD_D ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +PyUFunc_FF_F ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +PyUFunc_GG_G ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Type specific, core 1-d functions for ufuncs where each calculation is + obtained by calling a function taking two input arguments and returning + one output. + The underlying function to call is passed in as +\emph on +func +\emph default +. + The letters correspond to dtypechar's of the specific data type supported + by the general-purpose function. + The argument +\family typewriter +func +\family default + must support the corresponding signature. + The +\family typewriter +_As_XX_X +\family default + variants assume ndarrays of one data type but cast the values at each iteration + of the loop to use the underlying function that takes a different data + type. + +\end_layout + +\begin_layout Description +PyUFunc_O_O ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +PyUFunc_OO_O ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +\InsetSpace ~ + One-input, one-output, and two-input, one-output core 1-d functions for + the +\family typewriter +NPY_OBJECT +\family default + data type. + These functions handle reference count issues and return early on error. + The actual function to call is +\emph on +func +\emph default + and it must accept calls with the signature ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default +) for +\family typewriter +PyUFunc_O_O +\family default + or ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject +\family default + *, +\family typewriter +PyObject +\family default + *) for +\family typewriter +PyUFunc_OO_O +\family default +. +\end_layout + +\begin_layout Description +PyUFunc_O_O_method ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This general purpose 1-d core function assumes that +\emph on +func +\emph default + is a string representing a method of the input object. + For each iteration of the loop, the Python obejct is extracted from the + array and its +\emph on +func +\emph default + method is called returning the result to the output array. + +\end_layout + +\begin_layout Description +PyUFunc_OO_O_method ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This general purpose 1-d core function assumes that +\emph on +func +\emph default + is a string representing a method of the input object that takes one argument. + The first argument in +\emph on +args +\emph default + is the method whose function is called, the second argument in +\emph on +args +\emph default + is the argument passed to the function. + The output of the function is stored in the third entry of +\emph on +args +\emph default +. + +\end_layout + +\begin_layout Description +PyUFunc_On_Om ( +\family typewriter +void +\family default +) ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + func) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This is the 1-d core function used by the dynamic ufuncs created by umath.frompy +func(function, nin, nout). + In this case +\emph on +func +\emph default + is a pointer to a +\family typewriter +PyUFunc_PyFuncData +\family default + structure which has definition { +\family typewriter +int +\family default + nin; +\family typewriter +int +\family default + nout; +\family typewriter +PyObject* +\family default + callable}. + At each iteration of the loop, the +\emph on +nin +\emph default + input objects are exctracted from their object arrays and placed into an + argument tuple, the Python +\emph on +callable +\emph default + is called with the input arguments, and the nout outputs are placed into + their object arrays. + +\end_layout + +\begin_layout Section +Importing the API +\end_layout + +\begin_layout Description +PY_UFUNC_UNIQUE_SYMBOL +\end_layout + +\begin_layout Description +NO_IMPORT_UFUNC +\end_layout + +\begin_layout Description +import_ufunc ( +\family typewriter +void +\family default +) ( +\family typewriter +void +\family default +) +\end_layout + +\begin_layout Description +\InsetSpace ~ + These are the constants and functions for accessing the ufunc C-API from + extension modules in precisely the same way as the array C-API can be accessed. + The +\family typewriter +import_ufunc +\family default +() function must always be called (in the initialization subroutine of the + extension module). + If your extension module is in one file then that is all that is required. + The other two constants are useful if your extension module makes use of + multiple files. + In that case, define +\family typewriter +PY_UFUNC_UNIQUE_SYMBOL +\family default + to something unique to your code and then in source files that do not contain + the module initialization function but still need access to the UFUNC API, + define +\family typewriter +PY_UFUNC_UNIQUE_SYMBOL +\family default + to the same name used previously and also define +\family typewriter +NO_IMPORT_UFUNC +\family default +. + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The C-API is actually an array of function pointers. + This array is created (and pointed to by a global variable) by import_ufunc. + The global variable is either statically defined or allowed to be seen + by other files depending on the state of +\family typewriter +Py_UFUNC_UNIQUE_SYMBOL +\family default + and +\family typewriter +NO_IMPORT_UFUNC +\family default +. + +\begin_inset LatexCommand index +name "ufunc!C-API|)" + +\end_inset + + +\begin_inset LatexCommand index +name "C-API!ufunc|)" + +\end_inset + + +\end_layout + +\begin_layout Chapter +How to extend NumPy +\end_layout + +\begin_layout Quotation +That which is static and repetitive is boring. + That which is dynamic and random is confusing. + In between lies art. +\end_layout + +\begin_layout Right Address +--- +\emph on +John A. + Locke +\end_layout + +\begin_layout Quotation +Science is a differential equation. + Religion is a boundary condition. +\end_layout + +\begin_layout Right Address +--- +\emph on +Alan Turing +\end_layout + +\begin_layout Section +Writing an extension module +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand label +name "sec:Writing-an-extension" + +\end_inset + + +\begin_inset LatexCommand index +name "extension module|(" + +\end_inset + +While the ndarray object is designed to allow rapid computation in Python, + it is also designed to be general-purpose and satisfy a wide-variety of + computational needs. + As a result, if absolute speed is essential, there is no replacement for + a well-crafted, compiled loop specific to your application and hardware. + This is one of the reasons that numpy includes f2py so that an easy-to-use + mechanisms for linking (simple) C/C++ and (arbitrary) Fortran code directly + into Python are available. + You are encouraged to use and improve this mechanism. + The purpose of this section is not to document this tool but to document + the more basic steps to writing an extension module that this tool depends + on. + +\end_layout + +\begin_layout Standard +When an extension module is written, compiled, and installed to somewhere + in the Python path (sys.path), the code can then be imported into Python + as if it were a standard python file. + It will contain objects and methods that have been defined and compiled + in C code. + The basic steps for doing this in Python are well-documented and you can + find more information in the documentation for Python itself available + online at +\begin_inset LatexCommand url +name "www.python.org" +target "http://www.python.org" + +\end_inset + +. + +\end_layout + +\begin_layout Standard +In addition to the Python C-API, there is a full and rich C-API for NumPy + allowing sophisticated manipulations on a C-level. + However, for most applications, only a few API calls will typically be + used. + If all you need to do is extract a pointer to memory along with some shape + information to pass to another calculation routine, then you will use very + different calls, then if you are trying to create a new array-like type + or add a new data type for ndarrays. + This chapter documents the API calls and macros that are most commonly + used. +\end_layout + +\begin_layout Section +Required subroutine +\end_layout + +\begin_layout Standard +There is exactly one function that must be defined in your C-code in order + for Python to use it as an extension module. + The function must be called init<name> where <name> is the name of the + module from Python. + This function must be declared so that it is visible to code outside of + the routine. + Besides adding the methods and constants you desire, this subroutine must + also contain calls to import_array() and/or import_ufunc() depending on + which C-API is needed. + Forgetting to place these commands will show itself as an ugly segmentation + fault (crash) as soon as any C-API subroutine is actually called. + It is actually possible to have multiple init<name> functions in a single + file in which case multiple modules will be defined by that file. + However, there are some tricks to get that to work correctly and it is + not covered here. +\end_layout + +\begin_layout Standard +A minimal init<name> method looks like +\end_layout + +\begin_layout LyX-Code +PyMODINIT_FUNC +\newline +init<name>(void) +\newline +{ +\newline + (void)Py_InitModule( +\begin_inset Quotes erd +\end_inset + +<name> +\begin_inset Quotes erd +\end_inset + +, mymethods); +\newline + import_array(); +\newline +} +\end_layout + +\begin_layout Standard +The mymethods must be an array (usually statically declared) of PyMethodDef + structures which contain method names, actual C-functions, a variable indicatin +g whether the method uses keyword arguments or not, and docstrings. + These are explained in the next section. + If you want to add constants to the module, then you store the returned + value from Py_InitModule which is a module object. + The most general way to add itmes to the module is to get the module dictionary + using PyModule_GetDict(module). + With the module dictionary, you can add whatever you like to the module + manually. + An easier way to add objects to the module is to use one of three additional + Python C-API calls that do not require a separate extraction of the module + dictionary. + These are documented in the Python documentation, but repeated here for + convenience: +\end_layout + +\begin_layout Description +PyModule_AddObject ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + module, +\family typewriter +char* +\family default + name, +\family typewriter +PyObject* +\family default + value) +\end_layout + +\begin_layout Description +PyModule_AddIntConstant ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + module, +\family typewriter +char* +\family default + name, +\family typewriter +long +\family default + value) +\end_layout + +\begin_layout Description +PyModule_AddStringConstant ( +\family typewriter +int +\family default +) ( +\family typewriter +PyObject* +\family default + module, +\family typewriter +char* +\family default + name, +\family typewriter +char* +\family default + value) +\end_layout + +\begin_layout Description +\InsetSpace ~ + All three of these functions require the +\family typewriter +module +\family default + object (the return value of Py_InitModule). + The +\family typewriter +name +\family default + is a string that labels the value in the module. + Depending on which function is called, the +\family typewriter +value +\family default + argument is either a general object (PyModule_AddObject steals a reference + to it), an integer constant, or a string constant. +\end_layout + +\begin_layout Section +Defining functions +\end_layout + +\begin_layout Standard +The second argument passed in to the Py_InitModule function is a structure + that makes it easy to to define functions in the module. + In the example given above, the mymethods structure would have been defined + earlier in the file (usually right before the init<name> subroutine) to + +\end_layout + +\begin_layout LyX-Code +static PyMethodDef mymethods[] = { +\newline +{ +\begin_inset Quotes erd +\end_inset + +nokeywordfunc +\begin_inset Quotes erd +\end_inset + +,nokeyword_cfunc, +\newline +METH_VARARGS, +\newline + +\begin_inset Quotes erd +\end_inset + +Doc string +\begin_inset Quotes erd +\end_inset + +}, +\newline +{ +\begin_inset Quotes erd +\end_inset + +keywordfunc +\begin_inset Quotes erd +\end_inset + +, keyword_cfunc, +\end_layout + +\begin_layout LyX-Code +METH_VARARGS|METH_KEYWORDS, +\newline + +\begin_inset Quotes erd +\end_inset + +Doc string +\begin_inset Quotes erd +\end_inset + +}, +\newline +{NULL, NULL, 0, NULL} /* Sentinel */ +\newline +} +\end_layout + +\begin_layout Standard +Each entry in the mymethods array is a PyMethodDef structure containing + 1) the Python name, 2) the C-function that implements the function, 3) + flags indicating whether or not keywords are accepted for this function, + and 4) The docstring for the function. + Any number of functions may be defined for a single module by adding more + entries to this table. + The last entry must be all NULL as shown to act as a sentinel. + Python looks for this entry to know that all of the functions for the module + have been defined. + +\end_layout + +\begin_layout Standard +The last thing that must be done to finish the extension module is to actually + write the code that performs the desired functions. + There are two kinds of functions: those that don't accept keyword arguments, + and those that do. +\end_layout + +\begin_layout Subsection +Functions without keyword arguments +\end_layout + +\begin_layout Standard +Functions that don't accept keyword arguments should be written as +\end_layout + +\begin_layout LyX-Code +static PyObject* +\newline +nokeyword_cfunc (PyObject *dummy, PyObject *args) +\newline +{ +\newline + /* + convert Python arguments */ +\newline + /* do function */ +\end_layout + +\begin_layout LyX-Code + /* return something */ +\end_layout + +\begin_layout LyX-Code +} +\end_layout + +\begin_layout Standard +The dummy argument is not used in this context and can be safely ignored. + The +\emph on +args +\emph default + argument contains all of the arguments passed in to the function as a tuple. + You can do anything you want at this point, but usually the easiest way + to manage the input arguments is to call +\family typewriter +PyArg_ParseTuple +\family default + (args, format_string, addresses_to_C_variables...) or +\family typewriter +PyArg_UnpackTuple +\family default + (tuple, +\begin_inset Quotes eld +\end_inset + +name +\begin_inset Quotes erd +\end_inset + +, min, max, ...). + A good description of how to use the first function is contained in the + Python C-API reference manual under section 5.5 (Parsing arguments and building + values). + You should pay particular attention to the +\begin_inset Quotes eld +\end_inset + +O& +\begin_inset Quotes erd +\end_inset + + format which uses converter functions to go between the Python object and + the C object. + All of the other format functions can be (mostly) thought of as special + cases of this general rule. + There are several converter functions defined in the NumPy C-API that may + be of use. + In particular, the +\family typewriter +PyArray_DescrConverter +\family default + function is very useful to support arbitrary data-type specification. + This function transforms any valid data-type Python object into a +\family typewriter +PyArray_Descr* +\family default + object. + Remember to pass in the address of the C-variables that should be filled + in. +\end_layout + +\begin_layout Standard +There are lots of examples of how to use +\family typewriter +PyArg_ParseTuple +\family default + throughout the NumPy source code. + The standard usage is like this: +\end_layout + +\begin_layout LyX-Code +PyObject *input; +\end_layout + +\begin_layout LyX-Code +PyArray_Descr *dtype; +\end_layout + +\begin_layout LyX-Code +if (!PyArg_ParseTuple(args, "OO&", &input, +\newline + PyArray_DescrCon +verter, +\newline + &dtype)) return NULL; +\end_layout + +\begin_layout Standard +It is important to keep in mind that you get a +\emph on +borrowed +\emph default + reference to the object when using the +\begin_inset Quotes eld +\end_inset + +O +\begin_inset Quotes erd +\end_inset + + format string. + However, the converter functions usually require some form of memory handling. + In this example, if the conversion is successful, +\emph on +dtype +\emph default + will hold a new reference to a +\family typewriter +PyArray_Descr* +\family default + object, while +\emph on +input +\emph default + will hold a borrowed reference. + Therefore, if this conversion were mixed with another conversion (say to + an integer) and the data-type conversion was successful but the integer + conversion failed, then you would need to release the reference count to + the data-type object before returning. + A typical way to do this is to set +\emph on +dtype +\emph default + to +\family typewriter +NULL +\family default + before calling PyArg_ParseTuple and then use +\family typewriter +Py_XDECREF +\family default + on +\emph on +dtype +\emph default + before returning. + +\end_layout + +\begin_layout Standard +After the input arguments are processed, the code that actually does the + work is written (likely calling other functions as needed). + The final step of the C-function is to return something. + If an error is encountered then +\family typewriter +NULL +\family default + should be returned (making sure an error has actually been set). + If nothing should be returned then increment +\family typewriter +Py_None +\family default + and return it. + If a single object should be returned then it is returned (ensuring that + you own a reference to it first). + If multiple objects should be returned then you need to return a tuple. + The +\family typewriter +Py_BuildValue +\family default + (format_string, c_variables...) function makes it easy to build tuples of + Python objects from C variables. + Pay special attention to the difference between 'N' and 'O' in the format + string or you can easily create memory leaks. + The 'O' format string increments the reference count of the +\family typewriter +PyObject* +\family default + C-variable it corresponds to, while the 'N' format string steals a reference + to the corresponding +\family typewriter +PyObject* +\family default + C-variable. + You should use 'N' if you ave already created a reference for the object + and just want to give that reference to the tuple. + You should use 'O' if you only have a borrowed reference to an object and + need to create one to provide for the tuple. + +\end_layout + +\begin_layout Subsection +Functions with keyword arguments +\end_layout + +\begin_layout Standard +These functions are very similar to functions without keyword arguments. + The only difference is that the function signature is +\end_layout + +\begin_layout LyX-Code +static PyObject* +\newline +keyword_cfunc (PyObject *dummy, PyObject *args, PyObject + *kwds) +\newline +{ +\newline +... +\newline +} +\end_layout + +\begin_layout Standard +The kwds argument holds a Python dictionary whose keys are the names of + the keyword arguments and whose values are the corresponding keyword-argument + values. + This dictionary can be processed however you see fit. + The easiest way to handle it, however, is to replace the +\family typewriter +PyArg_ParseTuple +\family default + (args, format_string, addresses...) function with a call to +\family typewriter +PyArg_ParseTupleAndKeywords +\family default + (args, kwds, format_string, char *kwlist[], addresses...). + The kwlist parameter to this function is a +\family typewriter +NULL +\family default +-terminated array of strings providing the expected keyword arguments. + There should be one string for each entry in the format_string. + Using this function will raise a TypeError if invalid keyword arguments + are passed in. + +\end_layout + +\begin_layout Standard +For more help on this function please see section 1.8 (Keyword Paramters + for Extension Functions) of the Extending and Embedding tutorial in the + Python documentation. +\end_layout + +\begin_layout Subsection +Reference counting +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "reference counting|(" + +\end_inset + +The biggest difficulty when writing extension modules is reference counting. + It is an important reason for the popularity of f2py, weave, pyrex, ctypes, + etc.... + If you mis-handle reference counts you can get problems from memory-leaks + to segmentation faults. + The only strategy I know of to handle reference counts correctly is blood, + sweat, and tears. + First, you force it into your head that every Python variable has a reference + count. + Then, you understand exactly what each function does to the reference count + of your objects, so that you can properly use DECREF and INCREF when you + need them. + Reference counting can really test the amount of patience and diligence + you have towards your programming craft. + Despite the grim depiction, most cases of reference counting are quite + straightforward with the most common difficulty being not using DECREF + on objects before exiting early from a routine due to some error. + In second place, is the common error of not owning the reference on an + object that is passed to a function or macro that is going to steal the + reference ( +\emph on +e.g. + +\emph default + +\family typewriter +PyTuple_SET_ITEM +\family default +, and most functions that take +\family typewriter +PyArray_Descr +\family default + objects). + +\end_layout + +\begin_layout Standard +Typically you get a new reference to a variable when it is created or is + the return value of some function (there are some prominent exceptions, + however --- such as getting an item out of a tuple or a dictionary). + When you own the reference, you are responsible to make sure that +\family typewriter +Py_DECREF +\family default +(var) is called when the variable is no longer necessary (and no other function + has +\begin_inset Quotes eld +\end_inset + +stolen +\begin_inset Quotes erd +\end_inset + + its reference). + Also, if you are passing a Python object to a function that will +\begin_inset Quotes eld +\end_inset + +steal +\begin_inset Quotes erd +\end_inset + + the reference, then you need to make sure you own it (or use +\family typewriter +Py_INCREF +\family default + to get your own reference). + You will also encounter the notion of borrowing a reference. + A function that borrows a reference does not alter the reference count + of the object and does not expect to +\begin_inset Quotes eld +\end_inset + +hold on +\begin_inset Quotes erd +\end_inset + + to the reference. + It's just going to use the object temporarily. + When you use +\family typewriter +PyArg_ParseTuple +\family default + or +\family typewriter +PyArg_UnpackTuple +\family default + you receive a borrowed reference to the objects in the tuple and should + not alter their reference count inside your function. + With practice, you can learn to get reference counting right, but it can + be frustrating at first. + +\end_layout + +\begin_layout Standard +One common source of reference-count errors is the +\family typewriter +Py_BuildValue +\family default + function. + Pay careful attention to the difference between the 'N' format character + and the 'O' format character. + If you create a new object in your subroutine (such as an output array), + and you are passing it back in a tuple of return values, then you should + most-likely use the 'N' format character in +\family typewriter +Py_BuildValue +\family default +. + The 'O' character will increase the reference count by one. + This will leave the caller with two reference counts for a brand-new array. + When the variable is deleted and the reference count decremented by one, + there will still be that extra reference count, and the array will never + be deallocated. + You will have a reference-counting induced memory leak. + Using the 'N' character will avoid this situation as it will return to + the caller an object (inside the tuple) with a single reference count. + +\begin_inset LatexCommand index +name "reference counting|)" + +\end_inset + + +\end_layout + +\begin_layout Section +Dealing with array objects +\end_layout + +\begin_layout Standard +Most extension modules for NumPy will need to access the memory for an ndarray + object (or one of it's sub-classes). + The easiest way to do this doesn't require you to know much about the internals + of NumPy. + The method is to +\end_layout + +\begin_layout Enumerate +Ensure you are dealing with a well-behaved array (aligned, in machine byte-order + and single-segment) of the correct type and number of dimensions. + +\end_layout + +\begin_deeper +\begin_layout Enumerate +By converting it from some Python object using +\family typewriter +PyArray_FromAny +\family default + or a macro built on it. + +\end_layout + +\begin_layout Enumerate +By constructing a new ndarray of your desired shape and type using +\family typewriter +PyArray_NewFromDescr +\family default + or a simpler macro or function based on it. + +\end_layout + +\end_deeper +\begin_layout Enumerate +Get the shape of the array and a pointer to its actual data. + +\end_layout + +\begin_layout Enumerate +Pass the data and shape information on to a subroutine or other section + of code that actually performs the computation. + +\end_layout + +\begin_layout Enumerate +If you are writing the algorithm, then I recommend that you use the stride + information contained in the array to access the elements of the array + (the +\family typewriter +PyArray_GETPTR +\family default + macros make this painless). + Then, you can relax your requirements so as not to force a single-segment + array and the data-copying that might result. + +\end_layout + +\begin_layout Standard +Each of these sub-topics is covered in the following sub-sections. +\end_layout + +\begin_layout Subsection +Converting an arbitrary sequence object +\end_layout + +\begin_layout Standard +The main routine for obtaining an array from any Python object that can + be converted to an array is +\family typewriter +PyArray_FromAny +\family default +. + This function is very flexible with many input arguments. + Several macros make it easier to use the basic function. + +\family typewriter +PyArray_FROM_OTF +\family default + is arguably the most useful of these macros for the most common uses. + It allows you to convert an arbitrary Python object to an array of a specific + builtin data-type ( +\emph on +e.g. + +\emph default + float), while specifying a particular set of requirements ( +\emph on +e.g. + +\emph default + contiguous, aligned, and writeable). + The syntax is +\end_layout + +\begin_layout Description +PyArray_FROM_OTF ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyObject* +\family default + obj, +\family typewriter +int +\family default + typenum, +\family typewriter +int +\family default + requirements) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an ndarray from any Python object, +\emph on +obj +\emph default +, that can be converted to an array. + The number of dimensions in the returned array is determined by the object. + The desired data-type of the returned array is provided in +\emph on +typenum +\emph default + which should be one of the enumerated types. + The +\emph on +requirements +\emph default + for the returned array can be any combination of standard array flags. + Each of these arguments is explained in more detail below. + You receive a new reference to the array on success. + On failure, +\family typewriter +NULL +\family default + is returned and an exception is set. + +\end_layout + +\begin_deeper +\begin_layout Description +obj The object can be any Python object convertable to an ndarray. + If the object is already (a subclass of) the ndarray that satisfies the + requirements then a new reference is returned. + Otherwise, a new array is constructed. + The contents of +\emph on +obj +\emph default + are copied to the new array unless the array interface is used so that + data does not have to be copied. + Objects that can be converted to an array include: 1) any nested sequence + object, 2) any object exposing the array interface, 3) any object with + an +\series bold +__array__ +\series default + method (which should return an ndarray), and 4) any scalar object (becomes + a zero-dimensional array). + Sub-classes of the ndarray that otherwise fit the requirements will be + passed through. + If you want to ensure a base-class ndarray, then use +\family typewriter +NPY_ENSUREARRAY +\family default + in the requirements flag. + A copy is made only if necessary. + If you want to guarantee a copy, then pass in +\family typewriter +NPY_ENSURECOPY +\family default + to the requirements flag. + +\end_layout + +\begin_layout Description +typenum One of the enumerated types or +\family typewriter +NPY_NOTYPE +\family default + if the data-type should be determined from the object itself. + The C-based names can be used: +\end_layout + +\begin_deeper +\begin_layout Quote + +\family typewriter +NPY_BOOL +\family default +, +\family typewriter +NPY_BYTE +\family default +, +\family typewriter +NPY_UBYTE +\family default +, +\family typewriter +NPY_SHORT +\family default +, +\family typewriter +NPY_USHORT +\family default +, +\family typewriter +NPY_INT +\family default +, +\family typewriter +NPY_UINT +\family default +, +\family typewriter +NPY_LONG +\family default +, +\family typewriter +NPY_ULONG +\family default +, +\family typewriter +NPY_LONGLONG +\family default +, +\family typewriter +NPY_ULONGLONG +\family default +, +\family typewriter +NPY_DOUBLE +\family default +, +\family typewriter +NPY_LONGDOUBLE +\family default +, +\family typewriter +NPY_CFLOAT +\family default +, +\family typewriter +NPY_CDOUBLE +\family default +, +\family typewriter +NPY_CLONGDOUBLE +\family default +, +\family typewriter +NPY_OBJECT +\family default +. + +\end_layout + +\end_deeper +\begin_layout Description +\InsetSpace ~ + Alternatively, the bit-width names can be used as supported on the platform. + For example: +\end_layout + +\begin_deeper +\begin_layout Quote + +\family typewriter +NPY_INT8 +\family default +, +\family typewriter +NPY_INT16 +\family default +, +\family typewriter +NPY_INT32 +\family default +, +\family typewriter +NPY_INT64 +\family default +, +\family typewriter +NPY_UINT8 +\family default +, +\family typewriter +NPY_UINT16 +\family default +, +\family typewriter +NPY_UINT32 +\family default +, +\family typewriter +NPY_UINT64 +\family default +, +\family typewriter +NPY_FLOAT32 +\family default +, +\family typewriter +NPY_FLOAT64 +\family default +, +\family typewriter +NPY_COMPLEX64 +\family default +, +\family typewriter +NPY_COMPLEX128 +\family default +. + +\end_layout + +\end_deeper +\begin_layout Description +\InsetSpace ~ + The object will be converted to the desired type only if it can be done + without losing precision. + Otherwise +\family typewriter +NULL +\family default + will be returned and an error raised. + Use +\family typewriter +NPY_FORCECAST +\family default + in the requirements flag to override this behavior. + +\end_layout + +\begin_layout Description +requirements The memory model for an ndarray admits arbitrary strides in + each dimension to advance to the next element of the array. + Often, however, you need to interface with code that expects a C-contiguous + or a Fortran-contiguous memory layout. + In addition, an ndarray can be misaligned (the address of an element is + not at an integral multiple of the size of the element) which can cause + your program to crash (or at least work more slowly) if you try and dereference + a pointer into the array data. + Both of these problems can be solved by converting the Python object into + an array that is more +\begin_inset Quotes eld +\end_inset + +well-behaved +\begin_inset Quotes erd +\end_inset + + for your specific usage. + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The requirements flag allows specification of what kind of array is acceptable. + If the object passed in does not satisfy this requirements then a copy + is made so that thre returned object will satisfy the requirements. + these ndarray can use a very generic pointer to memory. + This flag allows specification of the desired properties of the returned + array object. + All of the flags are explained in the detailed API chapter. + The flags most commonly needed are NPY_IN_ARRAY, NPY_OUT_ARRAY, and NPY_INOUT_A +RRAY: +\end_layout + +\begin_deeper +\begin_layout Description +NPY_IN_ARRAY Equivalent to NPY_CONTIGUOUS | NPY_ALIGNED. + This combination of flags is useful for arrays that must be in C-contiguous + order and aligned. + These kinds of arrays are usually input arrays for some algorithm. +\end_layout + +\begin_layout Description +NPY_OUT_ARRAY Equivalent to NPY_CONTIGUOUS | NPY_ALIGNED | NPY_WRITEABLE. + This combination of flags is useful to specify an array that is in C-contiguous + order, is aligned, and can be written to as well. + Such an array is usually returned as output (although normally such output + arrays are created from scratch). + +\end_layout + +\begin_layout Description +NPY_INOUT_ARRAY Equivalent to NPY_CONTIGUOUS | NPY_ALIGNED | NPY_WRITEABLE + | NPY_UPDATEIFCOPY. + This combination of flags is useful to specify an array that will be used + for both input and output. + If a copy is needed, then when the temporary is deleted (by your use of + Py_DECREF at the end of the interface routine), the temporary array will + be copied back into the original array passed in. + Use of the UPDATEIFCOPY flag requires that the input object is already + an array (because other objects cannot be automatically updated in this + fashion). + If an error occurs use +\series bold +PyArray_DECREF_ERR +\series default +(obj) on an array with the NPY_UPDATEIFCOPY flag set. + This will delete the array without causing the contents to be copied back + into the original array. + +\end_layout + +\end_deeper +\begin_layout Description +\InsetSpace ~ + Other useful flags that can be OR'd as additional requirements are: +\end_layout + +\begin_deeper +\begin_layout Description +NPY_FORCECAST Cast to the desired type, even if it can't be done without + losing information. +\end_layout + +\begin_layout Description +NPY_ENSURECOPY Make sure the resulting array is a copy of the original. +\end_layout + +\begin_layout Description +NPY_ENSUREARRAY Make sure the resulting object is an actual ndarray and + not a sub-class. +\end_layout + +\end_deeper +\end_deeper +\begin_layout Note +Whether or not an array is byte-swapped is determined by the data-type of + the array. + Native byte-order arrays are always requested by PyArray_FROM_OTF and so + there is no need for a NPY_NOTSWAPPED flag in the requirements argument. + There is also no way to get a byte-swapped array from this routine. +\end_layout + +\begin_layout Subsection +Creating a brand-new ndarray +\end_layout + +\begin_layout Standard +Quite often new arrays must be created from within extension-module code. + Perhaps an output array is needed and you don't want the caller to have + to supply it. + Perhaps only a temporary array is needed to hold an intermediate calculation. + Whatever the need there are simple ways to get an ndarray object of whatever + data-type is needed. + The most general function for doing this is PyArray_NewFromDescr. + All array creation functions go through this heavily re-used code. + Because of its flexibility, it can be somewhat confusing to use. + As a result, simpler forms exist that are easier to use. + +\end_layout + +\begin_layout Description +PyArray_SimpleNew ( +\family typewriter +PyObject* +\family default +)( +\family typewriter +int +\family default + nd, +\family typewriter +npy_intp* +\family default + dims, +\family typewriter +int +\family default + typenum) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This function allocates new memory and places it in an ndarray with +\family typewriter +nd +\family default + dimensions whose shape is determined by the array of at least +\family typewriter +nd +\family default + items pointed to by +\family typewriter +dims +\family default +. + The memory for the array is uninitialized (unless typenum is +\series bold +PyArray_OBJECT +\series default + in which case each element in the array is set to NULL). + The +\family typewriter +typenum +\family default + argument allows specification of any of the builtin data-types such as + +\series bold +PyArray_FLOAT +\series default + or +\series bold +PyArray_LONG +\series default +. + The memory for the array can be set to zero if desired using +\series bold +PyArray_FILLWBYTE +\series default +(return_object, 0). + +\end_layout + +\begin_layout Description +PyArray_SimpleNewFromData ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +int +\family default + nd, +\family typewriter +npy_intp* +\family default + dims, +\family typewriter +int +\family default + typenum, +\family typewriter +void* +\family default + data) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Sometimes, you want to wrap memory allocated elsewhere into an ndarray + object for downstream use. + This routine makes it straightforward to do that. + The first three arguments are the same as in +\series bold +PyArray_SimpleNew +\series default +, the final argument is a pointer to a block of contiguous memory that the + ndarray should use as it's data-buffer which will be interpreted in C-style + contiguous fashion. + A new reference to an ndarray is returned, but the ndarray will not own + its data. + When this ndarray is deallocated, the pointer will not be freed. + +\end_layout + +\begin_layout Description +\InsetSpace ~ + You should ensure that the provided memory is not freed while the returned + array is in existence. + The easiest way to handle this is if data comes from another reference-counted + Python object. + The reference count on this object should be increased after the pointer + is passed in, and the base member of the returned ndarray should point + to the Python object that owns the data. + Then, when the ndarray is deallocated, the base-member will be DECREF'd + appropriately. + If you want the memory to be freed as soon as the ndarray is deallocated + then simply set the OWNDATA flag on the returned ndarray. + +\end_layout + +\begin_layout Subsection +Getting at ndarray memory and accessing elements of the ndarray +\end_layout + +\begin_layout Standard +If obj is an ndarray (PyArrayObject *), then the data-area of the ndarray + is pointed to by the void* pointer +\series bold +PyArray_DATA +\series default +(obj) or the char* pointer +\series bold +PyArray_BYTES +\series default +(obj). + Remember that (in general) this data-area may not be aligned according + to the data-type, it may represent byte-swapped data, and/or it may not + be writeable. + If the data area is aligned and in native byte-order, then how to get at + a specific element of the array is determined only by the array of npy_intp + variables, +\series bold +PyArray_STRIDES +\series default +(obj). + In particular, this c-array of integers shows how many +\series bold +bytes +\series default + must be added to the current element pointer to get to the next element + in each dimension. + For arrays less than 4-dimensions there are +\series bold +PyArray_GETPTR<k> +\series default +(obj, ...) macros where <k> is the integer 1, 2, 3, or 4 that make using the + array strides easier. + The arguments .... + represent <k> non-negative integer indices into the array. + For example, suppose +\family typewriter +E +\family default + is a 3-dimensional ndarray. + A (void*) pointer to the element +\family typewriter +E[i,j,k] +\family default + is obtained as PyArray_GETPTR3(E, i, j, k). + +\end_layout + +\begin_layout Standard +As explained previously, C-style contiguous arrays and Fortran-style contiguous + arrays have particular striding patterns. + Two array flags (NPY_C_CONTIGUOUS and NPY_F_CONTIGUOUS) indicate whether + or not the striding pattern of a particular array matches the C-style contiguou +s or Fortran-style contiguous or neither. + Whether or not the striding pattern matches a standard C or Fortran one + can be tested Using +\family typewriter +PyArray_ISCONTIGUOUS +\family default +(obj) and +\family typewriter +PyArray_ISFORTRAN +\family default +(obj) respectively. + Most third-party libraries expect contiguous arrays. + But, often it is not difficult to support general-purpose striding. + I encourage you to use the striding information in your own code whenever + possible, and reserve single-segment requirements for wrapping third-party + code. + Using the striding information provided with the ndarray rather than requiring + a contiguous striding reduces copying that otherwise must be made. + +\end_layout + +\begin_layout Section +Example +\end_layout + +\begin_layout Standard +The following example shows how you might write a wrapper that accepts two + input arguments (that will be converted to an array) and an output argument + (that must be an array). + The function returns None and updates the output array. + +\begin_inset LatexCommand index +name "extension module|)" + +\end_inset + + +\end_layout + +\begin_layout LyX-Code +static PyObject * +\end_layout + +\begin_layout LyX-Code +example_wrapper(PyObject *dummy, PyObject *args) +\end_layout + +\begin_layout LyX-Code +{ +\end_layout + +\begin_layout LyX-Code + PyObject *arg1=NULL, *arg2=NULL, *out=NULL; +\end_layout + +\begin_layout LyX-Code + PyObject *arr1=NULL, *arr2=NULL, *oarr=NULL; +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code + if (!PyArg_ParseTuple(args, +\begin_inset Quotes eld +\end_inset + +OOO& +\begin_inset Quotes erd +\end_inset + +, &arg1, *arg2, +\end_layout + +\begin_layout LyX-Code + &PyArrayType, *out)) return NULL; +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code + arr1 = PyArray_FROM_OTF(arg1, NPY_DOUBLE, NPY_IN_ARRAY); +\end_layout + +\begin_layout LyX-Code + if (arr1 == NULL) return NULL; +\end_layout + +\begin_layout LyX-Code + arr2 = PyArray_FROM_OTF(arg2, NPY_DOUBLE, NPY_IN_ARRAY); +\end_layout + +\begin_layout LyX-Code + if (arr2 == NULL) goto fail; +\end_layout + +\begin_layout LyX-Code + oarr = PyArray_FROM_OTF(out, NPY_DOUBLE, NPY_INOUT_ARRAY); +\end_layout + +\begin_layout LyX-Code + if (oarr == NULL) goto fail; +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code + /* code that makes use of arguments */ +\end_layout + +\begin_layout LyX-Code + /* You will probably need at least +\end_layout + +\begin_layout LyX-Code + nd = PyArray_NDIM(<..>) -- number of dimensions +\end_layout + +\begin_layout LyX-Code + dims = PyArray_DIMS(<..>) -- npy_intp array of length nd +\end_layout + +\begin_layout LyX-Code + showing length in each dim. +\end_layout + +\begin_layout LyX-Code + dptr = (double *)PyArray_DATA(<..>) -- pointer to data. +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code + If an error occurs goto fail. +\end_layout + +\begin_layout LyX-Code + */ +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code + Py_DECREF(arr1); +\end_layout + +\begin_layout LyX-Code + Py_DECREF(arr2); +\end_layout + +\begin_layout LyX-Code + Py_DECREF(oarr); +\end_layout + +\begin_layout LyX-Code + Py_INCREF(Py_None); +\end_layout + +\begin_layout LyX-Code + return Py_None; +\end_layout + +\begin_layout LyX-Code + +\end_layout + +\begin_layout LyX-Code + fail: +\end_layout + +\begin_layout LyX-Code + Py_XDECREF(arr1); +\end_layout + +\begin_layout LyX-Code + Py_XDECREF(arr2); +\end_layout + +\begin_layout LyX-Code + PyArray_XDECREF_ERR(oarr); +\end_layout + +\begin_layout LyX-Code + return NULL; +\end_layout + +\begin_layout LyX-Code +} +\end_layout + +\begin_layout Chapter +Beyond the Basics +\end_layout + +\begin_layout Quotation +The voyage of discovery is not in seeking new landscapes but in having new + eyes. +\end_layout + +\begin_layout Right Address +--- +\emph on +Marcel Proust +\end_layout + +\begin_layout Quotation +Discovery is seeing what everyone else has seen and thinking what no one + else has thought. +\end_layout + +\begin_layout Right Address +--- +\emph on +Albert Szent-Gyorgi +\end_layout + +\begin_layout Section +Iterating over elements in the array +\end_layout + +\begin_layout Subsection +Basic Iteration +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand label +name "sec:array_iterator" + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "array iterator|(" + +\end_inset + +One common algorithmic requirement is to be able to walk over all elements + in a multidimensional array. + The array iterator object makes this easy to do in a generic way that works + for arrays of any dimension. + Naturally, if you know the number of dimensions you will be using, then + you can always write nested for loops to accomplish the iteration. + If, however, you want to write code that works with any number of dimensions, + then you can make use of the array iterator. + An array iterator object is returned when accessing the .flat attribute + of an array. + +\end_layout + +\begin_layout Standard +Basic usage is to call +\series bold +PyArray_IterNew +\series default + ( +\family typewriter +array +\family default +) where array is an ndarray object (or one of its sub-classes). + The returned object is an array-iterator object (the same object returned + by the .flat attribute of the ndarray). + This object is usually cast to PyArrayIterObject* so that its members can + be accessed. + The only members that are needed are +\family typewriter +iter->size +\family default + which contains the total size of the array, +\family typewriter +iter->index +\family default +, which contains the current 1-d index into the array, and +\family typewriter +iter->dataptr +\family default + which is a pointer to the data for the current element of the array. + Sometimes it is also useful to access +\family typewriter +iter->ao +\family default + which is a pointer to the underlying ndarray object. + +\end_layout + +\begin_layout Standard +After processing data at the current element of the array, the next element + of the array can be obtained using the macro +\series bold +PyArray_ITER_NEXT +\series default +( +\family typewriter +iter +\family default +). + The iteration always proceeds in a C-style contiguous fashion (last index + varying the fastest). + The +\series bold +PyArray_ITER_GOTO +\series default +( +\family typewriter +iter +\family default +, +\family typewriter +destination +\family default +) can be used to jump to a particular point in the array, where +\family typewriter +destination +\family default + is an array of npy_intp data-type with space to handle at least the number + of dimensions in the underlying array. + Occasionally it is useful to use +\series bold +PyArray_ITER_GOTO1D +\series default +( +\family typewriter +iter +\family default +, +\family typewriter +index +\family default +) which will jump to the 1-d index given by the value of +\family typewriter +index +\family default +. + The most common usage, however, is given in the following example. + +\end_layout + +\begin_layout LyX-Code +PyObject *obj; /* assumed to be some ndarray object */ +\end_layout + +\begin_layout LyX-Code +PyArrayIterObject *iter; +\end_layout + +\begin_layout LyX-Code +... +\end_layout + +\begin_layout LyX-Code +iter = (PyArrayIterObject *)PyArray_IterNew(obj); +\end_layout + +\begin_layout LyX-Code +if (iter == NULL) goto fail; /* Assume fail has clean-up code */ +\end_layout + +\begin_layout LyX-Code +while (iter->index < iter->size) { +\end_layout + +\begin_layout LyX-Code + /* do something with the data at it->dataptr */ +\end_layout + +\begin_layout LyX-Code + PyArray_ITER_NEXT(it); +\end_layout + +\begin_layout LyX-Code +} +\end_layout + +\begin_layout LyX-Code +... +\end_layout + +\begin_layout Standard +You can also use +\series bold +PyArrayIter_Check +\series default +( +\family typewriter +obj +\family default +) to ensure you have an iterator object and +\series bold +PyArray_ITER_RESET +\series default +( +\family typewriter +iter +\family default +) to reset an iterator object back to the beginning of the array. + +\end_layout + +\begin_layout Standard +It should be emphasized at this point that you may not need the array iterator + if your array is already contiguous (using an array iterator will work + but will be slower than the fastest code you could write). + The major purpose of array iterators is to encapsulate iteration over N-dimensi +onal arrays with arbitrary strides. + They are used in many, many places in the NumPy source code itself. + If you already know your array is contiguous (Fortran or C), then simply + adding the element-size to a running pointer variable will step you through + the array very efficiently. + In other words, code like this will probably be faster for you in the contiguou +s case (assuming doubles). + +\end_layout + +\begin_layout LyX-Code +npy_intp size; +\end_layout + +\begin_layout LyX-Code +double *dptr; /* could make this any variable type */ +\end_layout + +\begin_layout LyX-Code +size = PyArray_SIZE(obj); +\end_layout + +\begin_layout LyX-Code +dptr = PyArray_DATA(obj); +\end_layout + +\begin_layout LyX-Code +while(size--) { +\end_layout + +\begin_layout LyX-Code + /* do something with the data at dptr */ +\end_layout + +\begin_layout LyX-Code + dptr++; +\end_layout + +\begin_layout LyX-Code +} +\end_layout + +\begin_layout Subsection +Iterating over all but one axis +\end_layout + +\begin_layout Standard +A common algorithm is to loop over all elements of an array and perform + some function with each element by issuing a function call. + As function calls can be time consuming, one way to speed up this kind + of algorithm is to write the function so it takes a vector of data and + then write the iteration so the function call is performed for an entire + dimension of data at a time. + This increases the amount of work done per function call, thereby reducing + the function-call over-head to a small(er) fraction of the total time. + Even if the interior of the loop is performed without a function call it + can be advantageous to perform the inner loop over the dimension with the + highest number of elements to take advantage of speed enhancements available + on micro-processors that use pipelining to enhance fundmental operations. + +\end_layout + +\begin_layout Standard +The +\series bold +PyArray_IterAllButAxis +\series default +( +\family typewriter +array +\family default +, +\family typewriter +&dim +\family default +) constructs an iterator object that is modified so that it will not iterate + over the dimension indicated by dim. + The only restriction on this iterator object, is that the +\series bold +PyArray_Iter_GOTO1D +\series default +( +\family typewriter +it +\family default +, +\family typewriter +ind +\family default +) macro cannot be used (thus flat indexing won't work either if you pass + this object back to Python --- so you shouldn't do this). + Note that the returned object from this routine is still usually cast to + PyArrayIterObject *. + All that's been done is to modify the strides and dimensions of the returned + iterator to simulate iterating over array[...,0,...] where 0 is placed on the + +\begin_inset Formula $\textrm{dim}^{\textrm{th}}$ +\end_inset + + dimension. + If dim is negative, then the dimension with the largest axis is found and + used. + +\end_layout + +\begin_layout Subsection +Iterating over multiple arrays +\end_layout + +\begin_layout Standard +Very often, it is desireable to iterate over several arrays at the same + time. + The universal functions are an example of this kind of behavior. + If all you want to do is iterate over arrays with the same shape, then + simply creating several iterator objects is the standard procedure. + For example, the following code iterates over two arrays assumed to be + the same shape and size (actually obj1 just has to have at least as many + total elements as does obj2): +\end_layout + +\begin_layout LyX-Code +/* It is already assumed that obj1 and obj2 +\end_layout + +\begin_layout LyX-Code + are ndarrays of the same shape and size. +\end_layout + +\begin_layout LyX-Code +*/ +\end_layout + +\begin_layout LyX-Code +iter1 = (PyArrayIterObject *)PyArray_IterNew(obj1); +\end_layout + +\begin_layout LyX-Code +if (iter1 == NULL) goto fail; +\end_layout + +\begin_layout LyX-Code +iter2 = (PyArrayIterObject *)PyArray_IterNew(obj2); +\end_layout + +\begin_layout LyX-Code +if (iter2 == NULL) goto fail; /* assume iter1 is DECREF'd at fail */ +\end_layout + +\begin_layout LyX-Code +while (iter2->index < iter2->size) { +\end_layout + +\begin_layout LyX-Code + /* process with iter1->dataptr and iter2->dataptr */ +\end_layout + +\begin_layout LyX-Code + PyArray_ITER_NEXT(iter1); +\end_layout + +\begin_layout LyX-Code + PyArray_ITER_NEXT(iter2); +\end_layout + +\begin_layout LyX-Code +} +\end_layout + +\begin_layout Subsection +Broadcasting over multiple arrays +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "broadcasting" + +\end_inset + +When multiple arrays are involved in an operation, you may want to use the + same broadcasting rules that the math operations ( +\emph on +i.e. + +\emph default + the ufuncs) use. + This can be done easily using the PyArrayMultiIterObject. + This is the object returned from the Python command numpy.broadcast and + it is almost as easy to use from C. + The function +\series bold +PyArray_MultiIterNew +\series default + ( +\family typewriter +n +\family default +, +\family typewriter +... +\family default +) is used (with +\family typewriter +n +\family default + input objects in place of +\family typewriter +... +\family default +). + The input objects can be arrays or anything that can be converted into + an array. + A pointer to a PyArrayMultiIterObject is returned. + Broadcasting has already been accomplished which adjusts the iterators + so that all that needs to be done to advance to the next element in each + array is for PyArray_ITER_NEXT to be called for each of the inputs. + This incrementing is automatically performed by +\series bold +PyArray_MultiIter_NEXT +\series default +( +\family typewriter +obj +\family default +) macro (which can handle a multiterator +\family typewriter +obj +\family default + as either a PyArrayMultiObject* or a PyObject*). + The data from input number +\family typewriter +i +\family default + is available using +\series bold +PyArray_MultiIter_DATA +\series default +( +\family typewriter +obj +\family default +, +\family typewriter +i +\family default +) and the total (broadcasted) size as +\series bold +PyArray_MultiIter_SIZE +\series default +( +\family typewriter +obj +\family default +). + An example of using this feature follows. +\end_layout + +\begin_layout LyX-Code +mobj = PyArray_MultiIterNew(2, obj1, obj2); +\end_layout + +\begin_layout LyX-Code +size = PyArray_MultiIter_SIZE(obj); +\end_layout + +\begin_layout LyX-Code +while(size--) { +\end_layout + +\begin_layout LyX-Code + ptr1 = PyArray_MultiIter_DATA(mobj, 0); +\end_layout + +\begin_layout LyX-Code + ptr2 = PyArray_MultiIter_DATA(mobj, 1); +\end_layout + +\begin_layout LyX-Code + /* code using contents of ptr1 and ptr2 */ +\end_layout + +\begin_layout LyX-Code + PyArray_MultiIter_NEXT(mobj); +\end_layout + +\begin_layout LyX-Code +} +\end_layout + +\begin_layout Standard +The function +\series bold +PyArray_RemoveLargest +\series default +( +\family typewriter +multi +\family default +) can be used to take a multi-iterator object and adjust all the iterators + so that iteration does not take place over the largest dimension (it makes + that dimension of size 1). + The code being looped over that makes use of the pointers will very-likely + also need the strides data for each of the iterators. + This information is stored in multi->iters[i]->strides. +\end_layout + +\begin_layout Standard +There are several examples of using the multi-iterator in the NumPy source + code as it makes N-dimensional broadcasting-code very simple to write. + Browse the source for more examples. + +\begin_inset LatexCommand index +name "array iterator|)" + +\end_inset + + +\end_layout + +\begin_layout Section +Creating a new universal function +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand label +name "sec:Creating-a-new" + +\end_inset + + +\begin_inset LatexCommand index +name "ufunc!adding new|(" + +\end_inset + +The umath module is a computer-generated C-module that creates many ufuncs. + It provides a great many examples of how to create a universal function. + Creating your own ufunc that will make use of the ufunc machinery is not + difficult either. + Suppose you have a function that you want to operate element-by-element + over its inputs. + By creating a new ufunc you will obtain a function that handles +\end_layout + +\begin_layout Itemize +broadcasting +\end_layout + +\begin_layout Itemize +N-dimensional looping +\end_layout + +\begin_layout Itemize +automatic type-conversions with minimal memory usage +\end_layout + +\begin_layout Itemize +optional output arrays +\end_layout + +\begin_layout Standard +It is not difficult to create your own ufunc. + All that is required is a 1-d loop for each data-type you want to support. + Each 1-d loop must have a specific signature, and only ufuncs for fixed-size + data-types can be used. + The function call used to create a new ufunc to work on built-in data-types + is given below. + A different mechanism is used to register ufuncs for user-defined data-types. +\end_layout + +\begin_layout Description +PyUFunc_FromFuncAndData ( +\family typewriter +PyObject* +\family default +) ( +\family typewriter +PyUFuncGenericFunction* +\family default + func, +\family typewriter +void** +\family default + data, +\family typewriter +char* +\family default + types, +\family typewriter +int +\family default + ntypes, +\family typewriter +int +\family default + nin, +\family typewriter +int +\family default + nout, +\family typewriter +int +\family default + identity, +\family typewriter +char* +\family default + name, +\family typewriter +char* +\family default + doc, +\family typewriter +int +\family default + check_return) +\end_layout + +\begin_deeper +\begin_layout Description +func A pointer to an array of 1-d functions to use. + This array must be at least ntypes long. + Each entry in the array must be a +\family typewriter +PyUFuncGenericFunction +\family default + function. + This function has the following signature. + An example of a valid 1d loop function is also given. + +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\family typewriter +void +\family default + loop1d ( +\family typewriter +char** +\family default + args, +\family typewriter +npy_intp* +\family default + dimensions, +\family typewriter +npy_intp* +\family default + steps, +\family typewriter +void* +\family default + data) +\end_layout + +\begin_deeper +\begin_layout Description +args An array of pointers to the actual data for the input and output arrays. + The input arguments are given first followed by the output arguments. +\end_layout + +\begin_layout Description +dimensions A pointer to the size of the dimension over which this function + is looping. + +\end_layout + +\begin_layout Description +steps A pointer to the number of bytes to jump to get to the next element + in this dimension for each of the input and output arguments. + +\end_layout + +\begin_layout Description +data Arbitrary data (extra arguments, function names, +\emph on +etc. +\emph default +) that can be stored with the ufunc and will be passed in when it is called. + +\end_layout + +\end_deeper +\begin_layout LyX-Code +static void +\newline +double_add(char *args, npy_intp *dimensions, npy_intp *steps, + void *extra) +\newline +{ +\newline + npy_intp i; +\newline + npy_intp is1=steps[0], is2=steps[1]; +\newline + + npy_intp os=steps[2], n=dimensions[0]; +\newline + char *i1=args[0], *i2=args[1], + *op=args[2]; +\newline + for (i=0; i<n; i++) { +\newline + *((double *)op) = *((double + *)i1) + +\backslash + +\newline + *((double *)i2); +\newline + i1 += is1; i2 += is2; + op += os; +\newline + } +\newline +} +\end_layout + +\begin_layout Description +data An array of data. + There should be ntypes entries (or NULL) --- one for every loop function + defined for this ufunc. + This data will be passed in to the 1-d loop. + One common use of this data variable is to pass in an actual function to + call to compute the result when a generic 1-d loop (e.g. + PyUFunc_d_d) is being used. + +\end_layout + +\begin_layout Description +types An array of type-number signatures (type +\family typewriter +char +\family default +). + This array should be of size (nin+nout)*ntypes and contain the data-types + for the corresponding 1-d loop. + The inputs should be first followed by the outputs. + For example, suppose I have a ufunc that supports 1 integer and 1 double + 1-d loop (length-2 func and data arrays) that takes 2 inputs and returns + 1 output that is always a complex double, then the types array would be +\end_layout + +\begin_layout LyX-Code +char my_sigs[] = +\backslash + +\newline +{NPY_INT, NPY_INT, NPY_CDOUBLE, +\newline +NPY_DOUBLE, NPY_DOUBLE, NPY_CDOUBLE}; +\end_layout + +\begin_layout Description +\InsetSpace ~ + The bit-width names can also be used (e.g. + +\family typewriter +NPY_INT32 +\family default +, +\family typewriter +NPY_COMPLEX128 +\family default +) if desired. + +\end_layout + +\begin_layout Description +ntypes The number of data-types supported. + This is equal to the number of 1-d loops provided. + +\end_layout + +\begin_layout Description +nin The number of input arguments. +\end_layout + +\begin_layout Description +nout The number of output arguments. +\end_layout + +\begin_layout Description +identity Either +\series bold +PyUFunc_One +\series default +, +\series bold +PyUFunc_Zero +\series default +, +\series bold +PyUFunc_None +\series default +. + This specifies what should be returned when an empty array is passed to + the reduce method of the ufunc. + +\end_layout + +\begin_layout Description +name A +\family typewriter +NULL +\family default +-terminated string providing the name of this ufunc (should be the Python + name it will be called). + +\end_layout + +\begin_layout Description +doc A documentation string for this ufunc (will be used in generating the + response to <ufunc_name>.__doc__). + Do not include the function signature or the name as this is generated + automatically. + +\end_layout + +\begin_layout Description +check_return Not presently used, but this integer value does get set in + the structure-member of similar name. + +\end_layout + +\end_deeper +\begin_layout Standard +The returned ufunc object is a callable Python object. + It should be placed in a (module) dictionary under the same name as was + used in the name argument to the ufunc-creation routine. + The following example is adapted from the umath module: +\begin_inset LatexCommand index +name "ufunc!adding new|)" + +\end_inset + + +\end_layout + +\begin_layout LyX-Code +static PyUFuncGenericFunction atan2_functions[]= +\backslash + +\newline + {PyUFunc_ff_f, PyUFunc_dd_d, +\newline + PyUFunc_gg_g, PyUFunc_OO_O_method}; +\newline +static + void* atan2_data[]= +\backslash + +\newline + {(void *)atan2f,(void *) atan2, +\newline + (void *)atan2l,(void *)"arctan2"}; +\newline +stati +c char atan2_signatures[]= +\backslash + +\newline + {NPY_FLOAT, NPY_FLOAT, NPY_FLOAT, +\newline + NPY_DOUBLE, NPY_DOUBLE, +\newline + NPY_DOUBLE +, NPY_LONGDOUBLE, +\newline + NPY_LONGDOUBLE, NPY_LONGDOUBLE +\newline + NPY_OBJECT, NPY_OBJECT, + +\newline + NPY_OBJECT}; +\newline +... +\newline +/* in the module initialization code */ +\newline +PyObject *f, *dict, + *module; +\newline +... +\newline +dict = PyModule_GetDict(module); +\newline +... +\newline +f = PyUFunc_FromFuncAndData(atan2_funct +ions, +\newline + atan2_data, atan2_signatures, 4, 2, 1, +\newline + PyUFunc_None, "arctan2", + +\newline + "a safe and correct arctan(x1/x2)", 0); +\newline +PyDict_SetItemString(dict, "arctan2" +, f); +\newline +Py_DECREF(f); +\newline +... +\end_layout + +\begin_layout Section +User-defined data-types +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "dtype!adding new|(" + +\end_inset + +NumPy comes with 21 builtin data-types. + While this covers a large majority of possible use cases, it is conceivable + that a user may have a need for an additional data-type. + There is some support for adding an additional data-type into the NumPy + system. + This additional data-type will behave much like a regular data-type except + ufuncs must have 1-d loops registered to handle it separately. + Also checking for whether or not other data-types can be cast +\begin_inset Quotes eld +\end_inset + +safely +\begin_inset Quotes erd +\end_inset + + to and from this new type or not will always return +\begin_inset Quotes eld +\end_inset + +can cast +\begin_inset Quotes erd +\end_inset + + unless you also register which types your new data-type can be cast to + and from. + Adding data-types is one of the less well-tested areas for NumPy 1.0, so + there may be bugs remaining in the approach. + Only add a new data-type if you can't do what you want to do using the + OBJECT or VOID data-types that are already available. + As an example of what I consider a useful application of the ability to + add data-types is the possibility of adding a data-type of arbitrary precision + floats to NumPy. + +\end_layout + +\begin_layout Subsection +Adding the new data-type +\end_layout + +\begin_layout Standard +To begin to make use of the new data-type, you need to first define a new + Python type to hold the scalars of your new data-type. + It should be acceptable to inherit from one of the array scalars if your + new type has a binary compatible layout. + This will allow your new data type to have the methods and attributes of + array scalars. + New data-types must have a fixed memory size (if you want to define a data-type + that needs a flexible representation, like a variable-precision number, + then use a pointer to the object as the data-type). + The memory layout of the object structure for the new Python type must + be PyObject_HEAD followed by the fixed-size memory needed for the data-type. + For example, a suitable structure for the new Python type is: +\end_layout + +\begin_layout LyX-Code +typedef struct { +\end_layout + +\begin_layout LyX-Code + PyObject_HEAD; +\end_layout + +\begin_layout LyX-Code + some_data_type obval; +\end_layout + +\begin_layout LyX-Code + /* the name can be whatever you want */ +\end_layout + +\begin_layout LyX-Code +} PySomeDataTypeObject; +\end_layout + +\begin_layout Standard +After you have defined a new Python type object, you must then define a + new PyArray_Descr structure whose typeobject member will contain a pointer + to the data-type you've just defined. + In addition, the required functions in the +\begin_inset Quotes eld +\end_inset + +.f +\begin_inset Quotes erd +\end_inset + + member must be defined: nonzero, copyswap, copyswapn, setitem, getitem, + and cast. + The more functions in the +\begin_inset Quotes eld +\end_inset + +.f +\begin_inset Quotes erd +\end_inset + + member you define, however, the more useful the new data-type will be. + It is very important to intialize unused functions to NULL. + This can be achieved using +\series bold +PyArray_InitArrFuncs +\series default +(f). +\end_layout + +\begin_layout Standard +Once a new PyArray_Descr structure is created and filled with the needed + information and useful functions you call +\series bold +PyArray_RegisterDataType +\series default +(new_descr). + The return value from this call is an integer providing you with a unique + type_number that specifies your data-type. + This type number should be stored and made available by your module so + that other modules can use it to recognize your data-type (the other mechanism + for finding a user-defined data-type number is to search based on the name + of the type-object associated with the data-type using +\series bold +PyArray_TypeNumFromName +\series default +). + +\end_layout + +\begin_layout Subsection +Registering a casting function +\end_layout + +\begin_layout Standard +You may want to allow builtin (and other user-defined) data-types to be + cast automatically to your data-type. + In order to make this possible, you must register a casting function with + the data-type you want to be able to cast from. + This requires writing low-level casting functions for each conversion you + want to support and then registering these functions with the data-type + descriptor. + A low-level casting function has the signature. + +\end_layout + +\begin_layout Description +castfunc ( +\family typewriter +void +\family default +) ( +\family typewriter +void* +\family default + from, +\family typewriter +void* +\family default + to, +\family typewriter +npy_intp +\family default + n, +\family typewriter +void* +\family default + fromarr, +\family typewriter +void* +\family default + toarr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Cast +\family typewriter +n +\family default + elements +\family typewriter +from +\family default + one type +\family typewriter +to +\family default + another. + The data to cast from is in a contiguous, correctly-swapped and aligned + chunk of memory pointed to by from. + The buffer to cast to is also contiguous, correctly-swapped and aligned. + The fromarr and toarr arguments should only be used for flexible-element-sized + arrays (string, unicode, void). + +\end_layout + +\begin_layout Standard +An example castfunc is +\end_layout + +\begin_layout LyX-Code +static void +\end_layout + +\begin_layout LyX-Code +double_to_float(double *from, float* to, npy_intp n, +\newline + void* ig1, void* + ig2); +\newline +while (n--) { +\newline + (*to++) = (double) *(from++); +\newline +} +\end_layout + +\begin_layout Standard +This could then be registered to convert doubles to floats using the code +\end_layout + +\begin_layout LyX-Code +doub = PyArray_DescrFromType(NPY_DOUBLE); +\newline +PyArray_RegisterCastFunc(doub, + NPY_FLOAT, +\newline + (PyArray_VectorUnaryFunc *)double_to_float); +\newline +Py_DECREF(doub); +\end_layout + +\begin_layout Subsection +Registering coercion rules +\end_layout + +\begin_layout Standard +By default, all user-defined data-types are not presumed to be safely castable + to any builtin data-types. + In addition builtin data-types are not presumed to be safely castable to + user-defined data-types. + This situation limits the ability of user-defined data-types to participate + in the coercion system used by ufuncs and other times when automatic coercion + takes place in NumPy. + This can be changed by registering data-types as safely castable from a + particlar data-type object. + The function +\series bold +PyArray_RegisterCanCast +\series default + (from_descr, totype_number, scalarkind) should be used to specify that + the data-type object from_descr can be cast to the data-type with type + number totype_number. + If you are not trying to alter scalar coercion rules, then use +\series bold +PyArray_NOSCALAR +\series default + for the scalarkind argument. +\end_layout + +\begin_layout Standard +If you want to allow your new data-type to also be able to share in the + scalar coercion rules, then you need to specify the scalarkind function + in the data-type object's +\begin_inset Quotes eld +\end_inset + +.f +\begin_inset Quotes erd +\end_inset + + member to return the kind of scalar the new data-type should be seen as + (the value of the scalar is available to that function). + Then, you can register data-types that can be cast to separately for each + scalar kind that may be returned from your user-defined data-type. + If you don't register scalar coercion handling, then all of your user-defined + data-types will be seen as +\series bold +PyArray_NOSCALAR +\series default +. + +\end_layout + +\begin_layout Subsection +Registering a ufunc loop +\end_layout + +\begin_layout Standard +You may also want to register low-level ufunc loops for your data-type so + that an ndarray of your data-type can have math applied to it seamlessly. + Registering a new loop with exactly the same arg_types signature, silently + replaces any previously registered loops for that data-type. + +\end_layout + +\begin_layout Standard +Before you can register a 1-d loop for a ufunc, the ufunc must be previously + created. + Then you call +\series bold +PyUFunc_RegisterLoopForType +\series default +(...) with the information needed for the loop. + The return value of this function is +\family typewriter +0 +\family default + if the process was successful and +\family typewriter +-1 +\family default + with an error condition set if it was not successful. + +\end_layout + +\begin_layout Description +PyUFunc_RegisterLoopForType ( +\family typewriter +int +\family default +) ( +\family typewriter +PyUFuncObject* +\family default + ufunc, +\family typewriter +int +\family default + usertype, +\family typewriter +PyUFuncGenericFunction +\family default + function, +\family typewriter +int* +\family default + arg_types, +\family typewriter +void* +\family default + data) +\end_layout + +\begin_layout Description +ufunc The ufunc to attach this loop to. +\end_layout + +\begin_layout Description +usertype The user-defined type this loop should be indexed under. + This number must be a user-defined type or an error occurs. + +\end_layout + +\begin_layout Description +function The ufunc inner 1-d loop. + This function must have the signature as explained in Section +\begin_inset LatexCommand ref +reference "sec:Creating-a-new" + +\end_inset + +. +\end_layout + +\begin_layout Description +arg_types (optional) If given, this should contain an array of integers + of at least size ufunc.nargs containing the data-types expected by the loop + function. + The data will be copied into a NumPy-managed structure so the memory for + this argument should be deleted after calling this function. + If this is NULL, then it will be assumed that all data-types are of type + usertype. +\end_layout + +\begin_layout Description +data (optional) Specify any optional data needed by the function which will + be passed when the function is called. + +\begin_inset LatexCommand index +name "dtype!adding new|)" + +\end_inset + + +\end_layout + +\begin_layout Section +Subtyping the ndarray in C +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "ndarray!subtyping|(" + +\end_inset + +One of the lesser-used features that has been lurking in Python since 2.2 + is the ability to sub-class types in C. + This facility is one of the important reasons for basing NumPy off of the + Numeric code-base which was already in C. + A sub-type in C allows much more flexibility with regards to memory management. + Sub-typing in C is not difficult even if you have only a rudimentary understand +ing of how to create new types for Python. + While it is easiest to sub-type from a single parent type, sub-typing from + multiple parent types is also possible. + Multiple inheritence in C is generally less useful than it is in Python + because a restriction on Python sub-types is that they have a binary compatible + memory layout. + Perhaps for this reason, it is somewhat easier to sub-type from a single + parent type. + +\end_layout + +\begin_layout Standard +All C-structures corresponding to Python objects must begin with PyObject_HEAD + (or PyObject_VAR_HEAD). + In the same way, any sub-type must have a C-structure that begins with + exactly the same memory layout as the parent type (or all of the parent + types in the case of multiple-inheritance). + The reason for this is that Python may attempt to access a member of the + sub-type structure as if it had the parent structure ( +\emph on +i.e. + +\emph default + it will cast a given pointer to a pointer to the parent structure and then + dereference one of it's members). + If the memory layouts are not compatible, then this attempt will cause + unpredictable behavior (eventually leading to a memory violation and program + crash). + +\end_layout + +\begin_layout Standard +One of the elements in PyObject_HEAD is a pointer to a type-object structure. + A new Python type is created by creating a new type-object structure and + populating it with functions and pointers to describe the desired behavior + of the type. + Typically, a new C-structure is also created to contain the instance-specific + information needed for each object of the type as well. + For example, &PyArray_Type is a pointer to the type-object table for the + ndarray while a PyArrayObject* variable is a pointer to a particular instance + of an ndarray (one of the members of the ndarray structure is, in turn, + a pointer to the type-object table &PyArray_Type). + Finally +\series bold +PyType_Ready +\series default +(<pointer_to_type_object>) must be called for every new Python type. + +\end_layout + +\begin_layout Subsection +Creating sub-types +\end_layout + +\begin_layout Standard +To create a sub-type, a similar proceedure must be followed except only + behaviors that are different require new entries in the type-object structure. + All other entires can be NULL and will be filled in by +\series bold +PyType_Ready +\series default + with appropriate functions from the parent type(s). + In particular, to create a sub-type in C follow these steps: +\end_layout + +\begin_layout Enumerate +If needed create a new C-structure to handle each instance of your type. + A typical C-structure would be +\end_layout + +\begin_deeper +\begin_layout LyX-Code +typedef _new_struct { +\newline + PyArrayObject base; +\newline + /* new things here */ +\newline +} NewArrayO +bject; +\end_layout + +\begin_layout Standard +Notice that the full PyArrayObject is used as the first entry in order to + ensure that the binary layout of instances of the new type is identical + to the PyArrayObject. + +\end_layout + +\end_deeper +\begin_layout Enumerate +Fill in a new Python type-object structure with pointers to new functions + that will over-ride the default behavior while leaving any function that + should remain the same unfilled (or NULL). + The tp_name element should be different. +\end_layout + +\begin_layout Enumerate +Fill in the tp_base member of the new type-object structure with a pointer + to the (main) parent type object. + For multiple-inheritance, also fill in the tp_bases member with a tuple + containing all of the parent objects in the order they should be used to + define inheritance. + Remember, all parent-types must have the same C-structure for multiple + inheritance to work properly. + +\end_layout + +\begin_layout Enumerate +Call +\series bold +PyType_Ready +\series default +(<pointer_to_new_type>). + If this function returns a negative number, a failure occurred and the + type is not initialized. + Otherwise, the type is ready to be used. + It is generally important to place a reference to the new type into the + module dictionary so it can be accessed from Python. + +\end_layout + +\begin_layout Standard +More information on creating sub-types in C can be learned by reading PEP + 253 (available at http://www.python.org/dev/peps/pep-0253). +\end_layout + +\begin_layout Subsection +Specific features of ndarray sub-typing +\end_layout + +\begin_layout Standard +Some special methods and attributes are used by arrays in order to facilitate + the interoperation of sub-types with the base ndarray type. + +\end_layout + +\begin_layout Subsubsection +The __array_finalize__ method +\end_layout + +\begin_layout Standard +Several array-creation functions of the ndarray allow specification of a + particular sub-type to be created. + This allows sub-types to be handled seamlessly in many routines. + When a sub-type is created in such a fashion, however, neither the __new__ + method nor the __init__ method gets called. + Instead, the sub-type is allocated and the appropriate instance-structure + members are filled in. + Finally, the +\series bold +__array_finalize__ +\series default + attribute is looked-up in the object dictionary. + If it is present and not None, then it can be either a CObject containing + a pointer to a +\series bold +PyArray_FinalizeFunc +\series default + or it can be a method taking a single argument (which could be None). + +\end_layout + +\begin_layout Standard +If the +\series bold +__array_finalize__ +\series default + attribute is a CObject, then the pointer must be a pointer to a function + with the signature: +\end_layout + +\begin_layout Description +\InsetSpace ~ + (int) (PyArrayObject *, PyObject *) +\end_layout + +\begin_layout Standard +The first argument is the newly created sub-type. + The second argument (if not NULL) is the +\begin_inset Quotes eld +\end_inset + +parent +\begin_inset Quotes erd +\end_inset + + array (if the array was created using slicing or some other operation where + a clearly-distinguishable parent is present). + This routine can do anything it wants to. + It should return a -1 on error and 0 otherwise. + +\end_layout + +\begin_layout Standard +If the +\series bold +__array_finalize__ +\series default + attribute is not None nor a CObject, then it must be a Python method that + takes the parent array as an argument (which could be None if there is + no parent), and returns nothing. + Errors in this method will be caught and handled. + +\end_layout + +\begin_layout Subsubsection +The __array_priority__ attribute +\end_layout + +\begin_layout Standard +This attribute allows simple but flexible determination of which sub-type + should be considered +\begin_inset Quotes eld +\end_inset + +primary +\begin_inset Quotes erd +\end_inset + + when an operation involving two or more sub-types arises. + In operations where different sub-types are being used, the sub-type with + the largest +\series bold +__array_priority__ +\series default + attribute will determine the sub-type of the output(s). + If two sub-types have the same +\series bold +__array_prioirty__ +\series default + then the sub-type of the first argument determines the output. + The default +\series bold +__array_priority__ +\series default + attribute returns a value of 0.0 for the base ndarray type and 1.0 for a + sub-type. + This attribute can also be defined by objects that are not sub-types of + the ndarray and can be used to determine which +\series bold +__array_wrap__ +\series default + method should be called for the return output. + +\end_layout + +\begin_layout Subsubsection +The __array_wrap__ method +\end_layout + +\begin_layout Standard +Any class or type can define this method which should take an ndarray argument + and return an instance of the type. + It can be seen as the opposite of the +\series bold +__array__ +\series default + method. + This method is used by the ufuncs (and other NumPy functions) to allow + other objects to pass through. + For Python >2.4, it can also be used to write a decorator that converts + a function that works only with ndarrays to one that works with any type + with +\series bold +__array__ +\series default + and +\series bold +__array_wrap__ +\series default + methods. + +\begin_inset LatexCommand index +name "ndarray!subtyping|)" + +\end_inset + + +\end_layout + +\begin_layout Chapter +Using Python as glue +\end_layout + +\begin_layout Quotation +There is no conversation more boring than the one where everybody agrees. +\end_layout + +\begin_layout Right Address +--- +\emph on +Michel de Montaigne +\end_layout + +\begin_layout Quotation +Duct tape is like the force. + It has a light side, and a dark side, and it holds the universe together. +\end_layout + +\begin_layout Right Address +--- +\emph on +Carl Zwanzig +\end_layout + +\begin_layout Standard +Many people like to say that Python is a fantastic glue language. + Hopefully, this Chapter will convince you that this is true. + The first adopters of Python for science were typically people who used + it to glue together large applicaton codes running on super-computers. + Not only was it much nicer to code in Python than in a shell script or + Perl, in addition, the ability to easily extend Python made it relatively + easy to create new classes and types specifically adapted to the problems + being solved. + From the interactions of these early contributors, Numeric emerged as an + array-like object that could be used to pass data between these applications. +\end_layout + +\begin_layout Standard +As Numeric has matured and developed into NumPy, people have been able to + write more code directly in NumPy. + Often this code is fast-enough for production use, but there are still + times that there is a need to access compiled code. + Either to get that last bit of efficiency out of the algorithm or to make + it easier to access widely-available codes written in C/C++ or Fortran. + +\end_layout + +\begin_layout Standard +This chapter will review many of the tools that are available for the purpose + of accessing code written in other compiled languages. + There are many resources available for learning to call other compiled + libraries from Python and the purpose of this Chapter is not to make you + an expert. + The main goal is to make you aware of some of the possibilities so that + you will know what to +\begin_inset Quotes eld +\end_inset + +Google +\begin_inset Quotes erd +\end_inset + + in order to learn more. + +\end_layout + +\begin_layout Standard +The http://www.scipy.org website also contains a great deal of useful information + about many of these tools. + For example, there is a nice description of using several of the tools + explained in this chapter at http://www.scipy.org/PerformancePython. + This link provides several ways to solve the same problem showing how to + use and connect with compiled code to get the best performance. + In the process you can get a taste for several of the approaches that will + be discussed in this chapter. + +\end_layout + +\begin_layout Section +Calling other compiled libraries from Python +\end_layout + +\begin_layout Standard +While Python is a great language and a pleasure to code in, its dynamic + nature results in overhead that can cause some code ( +\emph on +i.e. + +\emph default + raw computations inside of for loops) to be up 10-100 times slower than + equivalent code written in a static compiled language. + In addition, it can cause memory usage to be larger than necessary as temporary + arrays are created and destroyed during computation. + For many types of computing needs the extra slow-down and memory consumption + can often not be spared (at least for time- or memory-critical portions + of your code). + Therefore one of the most common needs is to call out from Python code + to a fast, machine-code routine (e.g. + compiled using C/C++ or Fortran). + The fact that this is relatively easy to do is a big reason why Python + is such an excellent high-level language for scientific and engineering + programming. + +\end_layout + +\begin_layout Standard +Their are two basic approaches to calling compiled code: writing an extension + module that is then imported to Python using the import command, or calling + a shared-library subroutine directly from Python using the ctypes module + (included in the standard distribution with Python 2.5). + The first method is the most common (but with the inclusion of ctypes into + Python 2.5 this status may change). +\end_layout + +\begin_layout Warning +Calling C-code from Python can result in Python crashes if you are not careful. + None of the approaches in this chapter are immune. + You have to know something about the way data is handled by both NumPy + and by the third-party library being used. + +\end_layout + +\begin_layout Section +Hand-generated wrappers +\end_layout + +\begin_layout Standard +Extension modules were discussed in Chapter +\begin_inset LatexCommand ref +reference "sec:Writing-an-extension" + +\end_inset + +. + The most basic way to interface with compiled code is to write an extension + module and construct a module method that calls the compiled code. + For improved readability, your method should take advantage of the PyArg_ParseT +uple call to convert between Python objects and C data-types. + For standard C data-types there is probably already a built-in converter. + For others you may need to write your own converter and use the +\begin_inset Quotes eld +\end_inset + +O& +\begin_inset Quotes erd +\end_inset + + format string which allows you to specify a function that will be used + to perform the conversion from the Python object to whatever C-structures + are needed. + +\end_layout + +\begin_layout Standard +Once the conversions to the appropriate C-structures and C data-types have + been performed, the next step in the wrapper is to call the underlying + function. + This is straightforward if the underlying function is in C or C++. + However, in order to call Fortran code you must be familiar with how Fortran + subroutines are called from C/C++ using your compiler and platform. + This can vary somewhat platforms and compilers (which is another reason + f2py makes life much simpler for interfacing Fortran code) but generally + involves underscore mangling of the name and the fact that all variables + are passed by reference (i.e. + all arguments are pointers). + +\end_layout + +\begin_layout Standard +The advantage of the hand-generated wrapper is that you have complete control + over how the C-library gets used and called which can lead to a lean and + tight interface with minimal over-head. + The disadvantage is that you have to write, debug, and maintain C-code, + although most of it can be adapted using the time-honored technique of + +\begin_inset Quotes eld +\end_inset + +cutting-pasting-and-modifying +\begin_inset Quotes erd +\end_inset + + from other extension modules. + Because, the procedure of calling out to additional C-code is fairly regimented +, code-generation procedures have been developed to make this process easier. + One of these code-generation techniques is distributed with NumPy and allows + easy integration with Fortran and (simple) C code. + This package, f2py, will be covered briefly in the next session. + +\end_layout + +\begin_layout Section +f2py +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "f2py|(" + +\end_inset + +F2py allows you to automatically construct an extension module that interfaces + to routines in Fortran 77/90/95 code. + It has the ability to parse Fortran 77/90/95 code and automatically generate + Python signatures for the subroutines it encounters, or you can guide how + the subroutine interfaces with Python by constructing an interface-defintion-fi +le (or modifying the f2py-produced one). + +\end_layout + +\begin_layout Subsection +Creating source for a basic extension module +\end_layout + +\begin_layout Standard +Probably the easiest way to introduce f2py is to offer a simple example. + Here is one of the subroutines contained in a file named add.f +\end_layout + +\begin_layout LyX-Code +C +\newline + SUBROUTINE ZADD(A,B,C,N) +\newline +C +\newline + DOUBLE COMPLEX A(*) +\newline + DOUBLE COMPLEX + B(*) +\newline + DOUBLE COMPLEX C(*) +\newline + INTEGER N +\newline + DO 20 J = 1, N +\newline + + C(J) = A(J)+B(J) +\newline + 20 CONTINUE +\newline + END +\end_layout + +\begin_layout Standard +This routine simply adds the elements in two contiguous arrays and places + the result in a third. + The memory for all three arrays must be provided by the calling routine. + A very basic interface to this routine can be automatically generated by + f2py: +\end_layout + +\begin_layout LyX-Code +f2py -m add add.f +\end_layout + +\begin_layout Standard +You should be able to run this command assuming your search-path is set-up + properly. + This command will produce an extension module named addmodule.c in the current + directory. + This extension module can now be compiled and used from Python just like + any other extension module. + +\end_layout + +\begin_layout Subsection +Creating a compiled extension module +\end_layout + +\begin_layout Standard +You can also get f2py to compile add.f and also compile its produced extension + module leaving only a shared-library extension file that can be imported + from Python: +\end_layout + +\begin_layout LyX-Code +f2py -c -m add add.f +\end_layout + +\begin_layout Standard +This command leaves a file named add.<ext> in the current directory (where + <ext> is the appropriate extension for a python extension module on your + platform --- so, pyd, +\emph on +etc. +\emph default +). + This module may then be imported from Python. + It will contain a method for each subroutin in add (zadd, cadd, dadd, sadd). + The docstring of each method contains information about how the module + method may be called: +\end_layout + +\begin_layout LyX-Code +>>> import add +\newline +>>> print add.zadd.__doc__ +\newline +zadd - Function signature: +\newline + zadd(a,b,c,n) +\newline + +Required arguments: +\newline + a : input rank-1 array('D') with bounds (*) +\newline + b : input + rank-1 array('D') with bounds (*) +\newline + c : input rank-1 array('D') with bounds + (*) +\newline + n : input int +\end_layout + +\begin_layout Subsection +Improving the basic interface +\end_layout + +\begin_layout Standard +The default interface is a very literal translation of the fortran code + into Python. + The Fortran array arguments must now be NumPy arrays and the integer argument + should be an integer. + The interface will attempt to convert all arguments to their required types + (and shapes) and issue an error if unsuccessful. + However, because it knows nothing about the semantics of the arguments + (such that C is an output and n should really match the array sizes), it + is possible to abuse this function in ways that can cause Python to crash. + For example +\end_layout + +\begin_layout LyX-Code +>>> add.zadd([1,2,3],[1,2],[3,4],1000) +\end_layout + +\begin_layout Standard +will cause a program crash on most systems. + Under the covers, the lists are being converted to proper arrays but then + the underlying add loop is told to cycle way beyond the borders of the + allocated memory. + +\end_layout + +\begin_layout Standard +In order to improve the interface, directives should be provided. + This is accomplished by constructing an interface definition file. + It is usually best to start from the interface file that f2py can produce + (where it gets its default behavior from). + To get f2py to generate the interface file use the -h option: +\end_layout + +\begin_layout LyX-Code +f2py -h add.pyf -m add add.f +\end_layout + +\begin_layout Standard +This command leaves the file add.pyf in the current directory. + The section of this file corresponding to zadd is: +\end_layout + +\begin_layout LyX-Code +subroutine zadd(a,b,c,n) ! in :add:add.f +\newline + double complex dimension(*) :: + a +\newline + double complex dimension(*) :: b +\newline + double complex dimension(*) :: + c +\newline + integer :: n +\newline +end subroutine zadd +\end_layout + +\begin_layout Standard +By placing intent directives and checking code, the interface can be cleaned + up quite a bit until the Python module method is both easier to use and + more robust. + +\end_layout + +\begin_layout LyX-Code +subroutine zadd(a,b,c,n) ! in :add:add.f +\newline + double complex dimension(n) :: + a +\newline + double complex dimension(n) :: b +\newline + double complex intent(out),dimension(n +) :: c +\newline + integer intent(hide),depend(a) :: n=len(a) +\newline +end subroutine zadd +\end_layout + +\begin_layout Standard +The intent directive, intent(out) is used to tell f2py that +\family typewriter +c +\family default + is an output variable and should be created by the interface before being + passed to the underlying code. + The intent(hide) directive tells f2py to not allow the user to specify + the variable, +\family typewriter +n +\family default +, but instead to get it from the size of +\family typewriter +a +\family default +. + The depend( +\family typewriter +a +\family default +) directive is necessary to tell f2py that the value of n depends on the + input a (so that it won't try to create the variable n until the variable + a is created). + +\end_layout + +\begin_layout Standard +The new interface has docstring: +\end_layout + +\begin_layout LyX-Code +>>> print add.zadd.__doc__ +\newline +zadd - Function signature: +\newline + c = zadd(a,b) +\newline +Required + arguments: +\newline + a : input rank-1 array('D') with bounds (n) +\newline + b : input rank-1 + array('D') with bounds (n) +\newline +Return objects: +\newline + c : rank-1 array('D') with + bounds (n) +\end_layout + +\begin_layout Standard +Now, the function can be called in a much more robust way: +\end_layout + +\begin_layout LyX-Code +>>> add.zadd([1,2,3],[4,5,6]) +\newline +array([ 5.+0.j, 7.+0.j, 9.+0.j]) +\end_layout + +\begin_layout Standard +Notice the automatic conversion to the correct format that occurred. + +\end_layout + +\begin_layout Subsection +Inserting directives in Fortran source +\end_layout + +\begin_layout Standard +The nice interface can also be generated automatically by placing the variable + directives as special comments in the original fortran code. + Thus, if I modify the source code to contain: +\end_layout + +\begin_layout LyX-Code +C +\newline + SUBROUTINE ZADD(A,B,C,N) +\newline +C +\newline +CF2PY INTENT(OUT) :: C +\newline +CF2PY INTENT(HIDE) + :: N +\newline +CF2PY DOUBLE COMPLEX :: A(N) +\newline +CF2PY DOUBLE COMPLEX :: B(N) +\newline +CF2PY DOUBLE + COMPLEX :: C(N) +\newline + DOUBLE COMPLEX A(*) +\newline + DOUBLE COMPLEX B(*) +\newline + + DOUBLE COMPLEX C(*) +\newline + INTEGER N +\newline + DO 20 J = 1, N +\newline + C(J) = A(J) + + B(J) +\newline + 20 CONTINUE +\newline + END +\end_layout + +\begin_layout Standard +Then, I can compile the extension module using +\end_layout + +\begin_layout LyX-Code +f2py -c -m add add.f +\end_layout + +\begin_layout Standard +The resulting signature for the function add.zadd is exactly the same one + that was created previously. + If the original source code had contained A(N) instead of A(*) and so forth + with B and C, then I could obtain (nearly) the same interface simply by + placing the INTENT(OUT) :: C comment line in the source code. + The only difference is that N would be an optional input that would default + to the length of A. + +\end_layout + +\begin_layout Subsection +A filtering example +\end_layout + +\begin_layout Standard +For comparison with the other methods to be discussed. + Here is another example of a function that filters a two-dimensional array + of double precision floating-point numbers using a fixed averaging filter. + The advantage of using Fortran to index into multi-dimensional arrays should + be clear from this example. + +\end_layout + +\begin_layout LyX-Code + SUBROUTINE DFILTER2D(A,B,M,N) +\newline +C +\newline + DOUBLE PRECISION A(M,N) +\newline + DOUBLE + PRECISION B(M,N) +\newline + INTEGER N, M +\newline +CF2PY INTENT(OUT) :: B +\newline +CF2PY INTENT(HIDE) + :: N +\newline +CF2PY INTENT(HIDE) :: M +\newline + DO 20 I = 2,M-1 +\newline + DO 40 J=2,N-1 +\newline + + B(I,J) = A(I,J) + +\newline + $ (A(I-1,J)+A(I+1,J) + +\newline + + $ A(I,J-1)+A(I,J+1) )*0.5D0 + +\newline + $ (A(I-1,J-1) + A(I-1,J+1 +) + +\newline + $ A(I+1,J-1) + A(I+1,J+1))*0.25D0 +\newline + 40 CONTINUE +\newline + 20 + CONTINUE +\newline + END +\end_layout + +\begin_layout Standard +This code can be compiled and linked into an extension module named filter + using +\end_layout + +\begin_layout LyX-Code +f2py -c -m filter filter.f +\end_layout + +\begin_layout Standard +This will produce an extension module named filter.so in the current directory + with a method named dfilter2d that returns a filtered version of the input. + +\end_layout + +\begin_layout Subsection +Calling f2py from Python +\end_layout + +\begin_layout Standard +The f2py program is written in Python and can be run from inside your module. + This provides a facility that is somewhat similar to the use of weave.ext_tools + described below. + An example of the final interface executed using Python code is +\end_layout + +\begin_layout LyX-Code +import numpy.f2py as f2py +\end_layout + +\begin_layout LyX-Code +fid = open('add.f') +\end_layout + +\begin_layout LyX-Code +source = fid.read() +\end_layout + +\begin_layout LyX-Code +fid.close() +\end_layout + +\begin_layout LyX-Code +f2py.compile(source, modulename='add') +\end_layout + +\begin_layout LyX-Code +import add +\end_layout + +\begin_layout Standard +The source string can be any valid Fortran code. + If you want to save the extension-module source code then a suitable file-name + can be provided by the source_fn keyword to the compile function. + +\end_layout + +\begin_layout Subsection +Automatic extension module generation +\end_layout + +\begin_layout Standard +If you want to distribute your f2py extension module, then you only need + to include the .pyf file and the Fortran code. + The distutils extensions in NumPy allow you to define an extension module + entirely in terms of this interface file. + A valid setup.py file allowing distribution of the add.f module (as part + of the package f2py_examples so that it would be loaded as f2py_examples.add) + is +\end_layout + +\begin_layout LyX-Code +def configuration(parent_package='', top_path=None) +\newline + from numpy.distutils.misc_u +til import Configuration +\newline + config = Configuration('f2py_examples',parent_packag +e, top_path) +\newline + config.add_extension('add', sources=['add.pyf','add.f']) +\newline + + return config +\newline + +\newline +if __name__ == '__main__': +\newline + from numpy.distutils.core import + setup +\newline + setup(**configuration(top_path='').todict()) +\end_layout + +\begin_layout Standard +Installation of the new package is easy using +\end_layout + +\begin_layout LyX-Code +python setup.py install +\end_layout + +\begin_layout Standard +assuming you have the proper permissions to write to the main site-packages + directory for the version of Python you are using. + For the resulting package to work, you need to create a file named __init__.py + (in the same directory as add.pyf). + Notice the extension module is defined entirely in terms of the +\begin_inset Quotes eld +\end_inset + +add.pyf +\begin_inset Quotes erd +\end_inset + + and +\begin_inset Quotes eld +\end_inset + +add.f +\begin_inset Quotes erd +\end_inset + + files. + The conversion of the .pyf file to a .c file is handled by numpy.disutils. + +\end_layout + +\begin_layout Subsection +Conclusion +\end_layout + +\begin_layout Standard +The interface definition file (.pyf) is how you can fine-tune the interface + between Python and Fortran. + There is decent documentation for f2py found in the numpy/f2py/docs directory + where-ever NumPy is installed on your system (usually under site-packages). + There is also more information on using f2py (including how to use it to + wrap C codes) at http://www.scipy.org/Cookbook under the +\begin_inset Quotes eld +\end_inset + +Using NumPy with Other Languages +\begin_inset Quotes erd +\end_inset + + heading. + +\end_layout + +\begin_layout Standard +The f2py method of linking compiled code is currently the most sophisticated + and integrated approach. + It allows clean separation of Python with compiled code while still allowing + for separate distribution of the extension module. + The only draw-back is that it requires the existence of a Fortran compiler + in order for a user to install the code. + However, with the existence of the free-compilers g77, gfortran, and g95, + as well as high-quality commerical compilers, this restriction is not particula +rly onerous. + In my opinion, Fortran is still the easiest way to write fast and clear + code for scientific computing. + It handles complex numbers, and multi-dimensional indexing in the most + straightforward way. + Be aware, however, that some Fortran compilers will not be able to optimize + code as well as good hand-written C-code. + +\begin_inset LatexCommand index +name "f2py|)" + +\end_inset + + +\end_layout + +\begin_layout Section +weave +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "weave|(" + +\end_inset + +Weave is a scipy package that can be used to automate the process of extending + Python with C/C++ code. + It can be used to speed up evaluation of an array expression that would + otherwise create temporary variables, to directly +\begin_inset Quotes eld +\end_inset + +inline +\begin_inset Quotes erd +\end_inset + + C/C++ code into Python, or to create a fully-named extension module. + You must either install scipy or get the weave package separately and install + it using the standard python setup.py install. + You must also have a C/C++-compiler installed and useable by Python distutils + in order to use weave. +\end_layout + +\begin_layout Standard +Somewhat dated, but still useful documentation for weave can be found at + the link http://www.scipy/Weave. + There are also many examples found in the examples directory which is installed + under the weave directory in the place where weave is installed on your + system. +\end_layout + +\begin_layout Subsection +Speed up code involving arrays (also see scipy.numexpr) +\end_layout + +\begin_layout Standard +This is the easiest way to use weave and requires minimal changes to your + Python code. + It involves placing quotes around the expression of interest and calling + weave.blitz. + Weave will parse the code and generate C++ code using Blitz C++ arrays. + It will then compile the code and catalog the shared library so that the + next time this exact string is asked for (and the array types are the same), + the already-compiled shared library will be loaded and used. + Because Blitz makes extensive use of C++ templating, it can take a long + time to compile the first time. + After that, however, the code should evaluate more quickly than the equivalent + NumPy expression. + This is especially true if your array sizes are large and the expression + would require NumPy to create several temporaries. + Only expressions involving basic arithmetic operations and basic array + slicing can be converted to Blitz C++ code. + +\end_layout + +\begin_layout Standard +For example, consider the expression +\end_layout + +\begin_layout LyX-Code +d = 4*a + 5*a*b + 6*b*c +\end_layout + +\begin_layout Standard +where a, b, and c are all arrays of the same type and shape. + When the data-type is double-precision and the size is 1000x1000, this + expression takes about 0.5 seconds to compute on an 1.1Ghz AMD Athlon machine. + When this expression is executed instead using blitz: +\end_layout + +\begin_layout LyX-Code +d = empty(a.shape, 'd'); weave.blitz(expr) +\end_layout + +\begin_layout Standard +execution time is only about 0.20 seconds (about 0.14 seconds spent in weave + and the rest in allocating space for d). + Thus, we've sped up the code by a factor of 2 using only a simnple command + (weave.blitz). + Your mileage may vary, but factors of 2-8 speed-ups are possible with this + very simple technique. + +\end_layout + +\begin_layout Standard +If you are interested in using weave in this way, then you should also look + at scipy.numexpr which is another similar way to speed up expressions by + eliminating the need for temporary variables. + Using numexpr does not require a C/C++ compiler. + +\end_layout + +\begin_layout Subsection +Inline C-code +\end_layout + +\begin_layout Standard +Probably the most widely-used method of employing weave is to +\begin_inset Quotes eld +\end_inset + +in-line +\begin_inset Quotes erd +\end_inset + + C/C++ code into Python in order to speed up a time-critical section of + Python code. + In this method of using weave, you define a string containing useful C-code + and then pass it to the function +\series bold +weave.inline +\series default +( +\family typewriter +code_string +\family default +, +\family typewriter +variables +\family default +), where code_string is a string of valid C/C++ code and variables is a + list of variables that should be passed in from Python. + The C/C++ code should refer to the variables with the same names as they + are defined with in Python. + If weave.line should return anything the the special value return_val should + be set to whatever object should be returned. + The following example shows how to use weave on basic Python objects +\end_layout + +\begin_layout LyX-Code +code = r""" +\newline +int i; +\newline +py::tuple results(2); +\newline +for (i=0; i<a.length(); i++) { +\newline + + a[i] = i; +\newline +} +\newline +results[0] = 3.0; +\newline +results[1] = 4.0; +\newline +return_val = results; +\newline +""" + +\newline +a = [None]*10 +\newline +res = weave.inline(code,['a']) +\end_layout + +\begin_layout Standard +The C++ code shown in the code string uses the name 'a' to refer to the + Python list that is passed in. + Because the Python List is a mutable type, the elements of the list itself + are modified by the C++ code. + A set of C++ classes are used to access Python objects using simple syntax. + +\end_layout + +\begin_layout Standard +The main advantage of using C-code, however, is to speed up processing on + an array of data. + Accessing a NumPy array in C++ code using weave, depends on what kind of + type converter is chosen in going from NumPy arrays to C++ code. + The default converter creates 5 variables for the C-code for every NumPy + array passed in to weave.inline. + The following table shows these variables which can all be used in the + C++ code. + The table assumes that +\family typewriter +myvar +\family default + is the name of the array in Python with data-type <dtype> (i.e. + float64, float32, int8, etc.) +\end_layout + +\begin_layout Standard +\align center +\begin_inset Tabular +<lyxtabular version="3" rows="6" columns="3"> +<features> +<column alignment="center" valignment="top" leftline="true" width="0"> +<column alignment="center" valignment="top" leftline="true" width="0"> +<column alignment="center" valignment="top" leftline="true" rightline="true" width="0"> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Variable +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Type +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Contents +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +myvar +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +<dtype>* +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Pointer to the first element of the array +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Nmyvar +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +npy_intp* +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +A pointer to the dimensions array +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Smyvar +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +npy_intp* +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +A pointer to the strides array +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Dmyvar +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +int +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +The number of dimensions +\end_layout + +\end_inset +</cell> +</row> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +myvar_array +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +PyArrayObject* +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +The entire structure for the array +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\end_inset + + +\end_layout + +\begin_layout Standard +The in-lined code can contain references to any of these variables as well + as to the standard macros MYVAR1(i), MYVAR2(i,j), MYVAR3(i,j,k), and MYVAR4(i,j +,k,l). + These name-based macros (they are the Python name capitalized followed + by the number of dimensions needed) will de-reference the memory for the + array at the given location with no error checking (be-sure to use the + correct macro and ensure the array is aligned and in correct byte-swap + order in order to get useful results). + The following code shows how you might use these variables and macros to + code a loop in C that computes a simple 2-d weighted averaging filter. +\end_layout + +\begin_layout LyX-Code +int i,j; +\newline +for(i=1;i<Na[0]-1;i++) { +\newline + for(j=1;j<Na[1]-1;j++) { +\newline + B2(i,j) + = A2(i,j) + (A2(i-1,j) + +\newline + A2(i+1,j)+A2(i,j-1) +\newline + + + A2(i,j+1))*0.5 +\newline + + (A2(i-1,j-1) +\newline + + + A2(i-1,j+1) +\newline + + A2(i+1,j-1) +\newline + + A2(i+1,j+1))*0.25 +\newline + + } +\end_layout + +\begin_layout LyX-Code +} +\end_layout + +\begin_layout Standard +The above code doesn't have any error checking and so could fail with a + Python crash if, +\family typewriter +a +\family default + had the wrong number of dimensions, or +\family typewriter +b +\family default + did not have the same shape as +\family typewriter +a +\family default +. + However, it could be placed inside a standard Python function with the + necessary error checking to produce a robust but fast subroutine. +\end_layout + +\begin_layout Standard +One final note about weave.inline: if you have additional code you want to + include in the final extension module such as supporting function calls, + include statments, etc. + you can pass this code in as a string using the keyword support_code: +\family typewriter +weave.inline(code, variables, support_code=support) +\family default +. + If you need the extension module to link against an additional library + then you can also pass in distutils-style keyword arguments such as library_dir +s, libraries, and/or runtime_library_dirs which point to the appropriate + libraries and directories. + +\end_layout + +\begin_layout Subsection +Simplify creation of an extension module +\end_layout + +\begin_layout Standard +The inline function creates one extension module for each function to-be + inlined. + It also generates a lot of intermediate code that is duplicated for each + extension module. + If you have several related codes to execute in C, it would be better to + make them all separate functions in a single extension module with multiple + functions. + You can also use the tools weave provides to produce this larger extension + module. + In fact, the weave.inline function just uses these more general tools to + do its work. + +\end_layout + +\begin_layout Standard +The approach is to: +\end_layout + +\begin_layout Enumerate +construct a extension module object using ext_tools.ext_module( +\family typewriter +module_name +\family default +); +\end_layout + +\begin_layout Enumerate +create function objects using ext_tools.ext_function( +\family typewriter +func_name +\family default +, +\family typewriter +code +\family default +, +\family typewriter +variables +\family default +); +\end_layout + +\begin_layout Enumerate +(optional) add support code to the function using the .customize.add_support_code( +\family typewriter +support_code +\family default +) method of the function object; +\end_layout + +\begin_layout Enumerate +add the functions to the extension module object using the .add_function( +\family typewriter +func +\family default +) method; +\end_layout + +\begin_layout Enumerate +when all the functions are added, compile the extension with its .compile() + method. +\end_layout + +\begin_layout Standard +Several examples are available in the examples directory where weave is + installed on your system. + Look particularly at ramp2.py, increment_example.py and fibonacii.py +\end_layout + +\begin_layout Subsection +Conclusion +\end_layout + +\begin_layout Standard +Weave is a useful tool for quickly routines in C/C++ and linking them into + Python. + It's caching-mechanism allows for on-the-fly compilation which makes it + particularly attractive for in-house code. + Because of the requirement that the user have a C++-compiler, it can be + difficult (but not impossible) to distribute a package that uses weave + to other users who don't have a compiler installed. + Of course, weave could be used to construct an extension module which is + then distributed in the normal way +\emph on +( +\emph default +using a setup.py file). + While you can use weave to build larger extension modules with many methods, + creating methods with a variable-number of arguments is not possible. + Thus, for a more sophisticated module, you will still probably want a Python-la +yer that calls the weave-produced extension. + +\begin_inset LatexCommand index +name "weave|)" + +\end_inset + + +\end_layout + +\begin_layout Section +Pyrex +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "pyrex|(" + +\end_inset + +Pyrex is a way to write C-extension modules using Python-like syntax. + It is an interesting way to generate extension modules that is growing + in popularity, particularly among people who have rusty or non-existent + C-skills. + It does require the user to write the +\begin_inset Quotes eld +\end_inset + +interface +\begin_inset Quotes erd +\end_inset + + code and so is more time-consuming than SWIG or f2py if you are trying + to interface to a large library of code. + However, if you are writing an extension module that will include quite + a bit of your own algorithmic code, as well, then Pyrex is a good match. + A big weakness perhaps is the inability to easily and quickly access the + elements of a multidimensional array. + +\end_layout + +\begin_layout Standard +Notice that Pyrex is an extension-module generator only. + Unlike weave or f2py, it includes no automatic facility for compiling and + linking the extension module (which must be done in the usual fashion). + It does provide a modified distutils class called build_ext which lets + you build an extension module from a .pyx source. + Thus, you could write in a setup.py file +\end_layout + +\begin_layout LyX-Code +from Pyrex.Distutils import build_ext +\newline +from distutils.extension import Extension +\newline +from + distutils.core import setup +\newline + +\newline +import numpy +\newline +py_ext = Extension('mine', ['mine.pyx'], +\newline + + include_dirs=[numpy.get_include()]) +\newline + +\newline +setup(name='mine', description='Nothi +ng', +\newline + ext_modules=[pyx_ext], +\newline + cmdclass = {'build_ext':build_ext}) +\end_layout + +\begin_layout Standard +Adding the NumPy include directory is, of course, only necessary if you + are using NumPy arrays in the extension module (which is what I assume + you are using Pyrex for). + The distutils extensions in NumPy also include support for automatically + producing the extension-module and linking it from a +\family typewriter +.pyx +\family default + file. + It works so that if the user does not have Pyrex installed, then it looks + for a file with the same file-name but a +\family typewriter +.c +\family default + extension which it then uses instead of trying to produce the +\family typewriter +.c +\family default + file again. + +\end_layout + +\begin_layout Standard +Pyrex does not natively understand NumPy arrays. + However, it is not difficult to include information that lets Pyrex deal + with them usefully. + In fact, the numpy.random.mtrand module was written using Pyrex so an example + of Pyrex usage is already included in the NumPy source distribution. + That experience led to the creation of a standard c_numpy.pxd file that + you can use to simplify interacting with NumPy array objects in a Pyrex-written + extension. + The file may not be complete (it wasn't at the time of this writing). + If you have additions you'd like to contribute, please send them. + The file is located in the .../site-packages/numpy/doc/pyrex directory where + you have Python installed. + There is also an example in that directory of using Pyrex to construct + a simple extension module. + It shows that Pyrex looks a lot like Python but also contains some new + syntax that is necessary in order to get C-like speed. + +\end_layout + +\begin_layout Standard +If you just use Pyrex to compile a standard Python module, then you will + get a C-extension module that runs either as fast or, possibly, more slowly + than the equivalent Python module. + Speed increases are possible only when you use cdef to statically define + C variables and use a special construct to create for loops: +\end_layout + +\begin_layout LyX-Code +cdef int i +\newline +for i from start <= i < stop +\end_layout + +\begin_layout Standard +Let's look at two examples we've seen before to see how they might be implemente +d using Pyrex. + These examples were compiled into extension modules using Pyrex-0.9.3.1. +\end_layout + +\begin_layout Subsection +Pyrex-add +\end_layout + +\begin_layout Standard +Here is part of a Pyrex-file I named add.pyx which implements the add functions + we previously implemented using f2py: +\end_layout + +\begin_layout LyX-Code +cimport c_numpy +\newline +from c_numpy cimport import_array, ndarray, npy_intp, npy_cdouble +, +\backslash + +\newline + npy_cfloat, NPY_DOUBLE, NPY_CDOUBLE, NPY_FLOAT, +\backslash + +\newline + NPY_CFLOAT +\newline + +\newline +#We need to initialize NumPy +\newline +import_array() +\newline + +\newline +def zadd(object + ao, object bo): +\newline + cdef ndarray c, a, b +\newline + cdef npy_intp i +\newline + a = c_numpy.PyArra +y_ContiguousFromAny(ao, +\newline + NPY_CDOUBLE, 1, 1) +\newline + b = c_numpy.PyArr +ay_ContiguousFromAny(bo, +\newline + NPY_CDOUBLE, 1, 1) +\newline + c = c_numpy.PyAr +ray_SimpleNew(a.nd, a.dimensions, +\newline + a.descr.type_num) +\newline + for i + from 0 <= i < a.dimensions[0]: +\newline + (<npy_cdouble *>c.data)[i].real = +\backslash + +\newline + (<npy_cdouble *>a.data)[i].real + +\backslash + +\newline + (<npy_cdouble *>b.data)[i].real +\newline + (<npy_cdouble *>c.data)[i].imag + = +\backslash + +\newline + (<npy_cdouble *>a.data)[i].imag + +\backslash + +\newline + (<npy_cdouble *>b.data)[i].imag +\newline + return c +\end_layout + +\begin_layout Standard +This module shows use of the +\family typewriter +cimport +\family default + statement to load the definitions from the c_numpy.pxd file. + As shown, both versions of the import statement are supported. + It also shows use of the NumPy C-API to construct NumPy arrays from arbitrary + input objects. + The array c is created using PyArray_SimpleNew. + Then the c-array is filled by addition. + Casting to a particiular data-type is accomplished using <cast *>. + Pointers are de-referenced with bracket notation and members of structures + are accessed using '.' notation even if the object is techinically a pointer + to a structure. + The use of the special for loop construct ensures that the underlying code + will have a similar C-loop so the addition calculation will proceed quickly. + Notice that we have not checked for NULL after calling to the C-API --- + a cardinal sin when writing C-code. + For routines that return Python objects, Pyrex inserts the checks for NULL + into the C-code for you and returns with failure if need be. + There is also a way to get Pyrex to automatically check for exceptions + when you call functions that don't return Python objects. + See the documentation of Pyrex for details. + +\end_layout + +\begin_layout Subsection +Pyrex-filter +\end_layout + +\begin_layout Standard +The two-dimensional example we created using weave is a bit uglierto implement + in Pyrex because two-dimensional indexing using Pyrex is not as simple. + But, it is straightforward (and possibly faster because of pre-computed + indices). + Here is the Pyrex-file I named image.pyx. +\end_layout + +\begin_layout LyX-Code +cimport c_numpy +\newline +from c_numpy cimport import_array, ndarray, npy_intp, +\backslash + +\newline + NPY_DOUBLE, NPY_CDOUBLE, +\backslash + +\newline + NPY_FLOAT, NPY_CFLOAT, NPY_ALIGNED +\backslash + +\newline + +\newline +#We need to initialize NumPy +\newline +import_array() +\newline +def filter(object ao): +\newline + cdef + ndarray a, b +\newline + cdef npy_intp i, j, M, N, oS +\newline + cdef npy_intp r,rm1,rp1,c,cm1,c +p1 +\newline + cdef double value +\newline + # Require an ALIGNED array +\newline + # (but not necessarily + contiguous) +\newline + # We will use strides to access the elements. +\newline + a = c_numpy.PyAr +ray_FROMANY(ao, NPY_DOUBLE, +\backslash + +\newline + 2, 2, NPY_ALIGNED) +\newline + b = c_numpy.PyArray_SimpleNew(a.nd,a.dimensio +ns, +\backslash + +\newline + a.descr.type_num) +\newline + M = a.dimensions[0] +\newline + + N = a.dimensions[1] +\newline + S0 = a.strides[0] +\newline + S1 = a.strides[1] +\newline + for i + from 1 <= i < M-1: +\newline + r = i*S0 +\newline + rm1 = r-S0 +\newline + rp1 = r+S0 +\newline + + oS = i*N +\newline + for j from 1 <= j < N-1: +\newline + c = j*S1 +\newline + + cm1 = c-S1 +\newline + cp1 = c+S1 +\newline + (<double *>b.data)[oS+j] + = +\backslash + +\newline + (<double *>(a.data+r+c))[0] + +\backslash + +\newline + ((<double *>(a.data+rm1+c))[0] + +\backslash + +\newline + (<double *>(a.data+rp1+c))[0] + +\backslash + +\newline + (<double *>(a.data+r+cm1))[0] + +\backslash + +\newline + (<double *>(a.data+r+cp1))[0])*0.5 + +\backslash + +\newline + ((<double *>(a.data+rm1+cm1))[0] + +\backslash + +\newline + (<double *>(a.data+rp1+cm1))[0] + +\backslash + +\newline + (<double *>(a.data+rp1+cp1))[0] + +\backslash + +\newline + (<double *>(a.data+rm1+cp1))[0])*0.25 +\newline + return b +\end_layout + +\begin_layout Standard +This 2-d averaging filter runs quickly because the loop is in C and the + pointer computations are done only as needed. + However, it is not particularly easy to understand what is happening. + A 2-d image, +\family typewriter +in +\family default +, can be filtered using this code very quickly using +\end_layout + +\begin_layout LyX-Code +import image +\end_layout + +\begin_layout LyX-Code +out = image.filter(in) +\end_layout + +\begin_layout Subsection +Conclusion +\end_layout + +\begin_layout Standard +There are several disadvantages of using Pyrex: +\end_layout + +\begin_layout Enumerate +The syntax for Pyrex can get a bit bulky, and it can be confusing at first + to understand what kind of objects you are getting and how to interface + them with C-like constructs. + +\end_layout + +\begin_layout Enumerate +Inappropriate Pyrex syntax or incorrect calls to C-code or type-mismatches + can result in failures such as +\end_layout + +\begin_deeper +\begin_layout Enumerate +Pyrex failing to generate the extension module source code, +\end_layout + +\begin_layout Enumerate +Compiler failure while generating the extension module binary due to incorrect + C syntax, +\end_layout + +\begin_layout Enumerate +Python failure when trying to use the module. + +\end_layout + +\end_deeper +\begin_layout Enumerate +It is easy to lose a clean separation between Python and C which makes re-using + your C-code for other non-Python-related projects more difficult. +\end_layout + +\begin_layout Enumerate +Multi-dimensional arrays are +\begin_inset Quotes eld +\end_inset + +bulky +\begin_inset Quotes erd +\end_inset + + to index (appropriate macros may be able to fix this). + +\end_layout + +\begin_layout Enumerate +The C-code generated by Prex is hard to read and modify (and typically compiles + with annoying but harmless warnings). + +\end_layout + +\begin_layout Standard +Writing a good Pyrex extension module still takes a bit of effort because + not only does it require (a little) familiarity with C, but also with Pyrex's + brand of Python-mixed-with C. + One big advantage of Pyrex-generated extension modules is that they are + easy to distribute using distutils. + In summary, Pyrex is a very capable tool for either gluing C-code or generating + an extension module quickly and should not be over-looked. + It is especially useful for people that can't or won't write C-code or + Fortran code. + But, if you are already able to write simple subroutines in C or Fortran, + then I would use one of the other approaches such as f2py (for Fortran), + ctypes (for C shared-libraries), or weave (for inline C-code). +\begin_inset LatexCommand index +name "pyrex|)" + +\end_inset + + +\end_layout + +\begin_layout Section +ctypes +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "ctypes|(" + +\end_inset + +Ctypes is a python extension module (downloaded separately for Python <2.5 + and included with Python 2.5) that allows you to call an arbitrary function + in a shared library directly from Python. + This approach allows you to interface with C-code directly from Python. + This opens up an enormous number of libraries for use from Python. + The drawback, however, is that coding mistakes can lead to ugly program + crashes very easily (just as can happen in C) because there is little type + or bounds checking done on the parameters. + This is especially true when array data is passed in as a pointer to a + raw memory location. + The responsibility is then on you that the subroutine will not access memory + outside the actual array area. + But, if you don't mind living a little dangerously ctypes can be an effective + tool for quickly taking advantage of a large shared library (or writing + extended functionality in your own shared library). +\end_layout + +\begin_layout Standard +Because the ctypes approach exposes a raw interface to the compiled code + it is not always tolerant of user mistakes. + Robust use of the ctypes module typically involves an additional layer + of Python code in order to check the data types and array bounds of objects + passed to the underlying subroutine. + This additional layer of checking (not to mention the conversion from ctypes + objects to C-data-types that ctypes itself performs), will make the interface + slower than a hand-written extension-module interface. + However, this overhead should be neglible if the C-routine being called + is doing any significant amount of work. + If you are a great Python programmer with weak C-skills, ctypes is an easy + way to write a useful interface to a (shared) library of compiled code. + +\end_layout + +\begin_layout Standard +To use c-types you must +\end_layout + +\begin_layout Enumerate +Have a shared library. +\end_layout + +\begin_layout Enumerate +Load the shared library. +\end_layout + +\begin_layout Enumerate +Convert the python objects to ctypes-understood arguments. +\end_layout + +\begin_layout Enumerate +Call the function from the library with the ctypes arguments. +\end_layout + +\begin_layout Subsection +Having a shared library +\end_layout + +\begin_layout Standard +There are several requirements for a shared library that can be used with + c-types that are platform specific. + This guide assumes you have some familiarity with making a shared library + on your system (or simply have a shared library available to you). + Items to remember are: +\end_layout + +\begin_layout Itemize +A shared library must be compiled in a special way ( +\emph on +e.g. + +\emph default + using the -shared flag with gcc). +\end_layout + +\begin_layout Itemize +On some platforms ( +\emph on +e.g. + +\emph default + Windows) , a shared library requires a .def file that specifies the functions + to be exported. + For example a mylib.def file might contain. + +\end_layout + +\begin_deeper +\begin_layout LyX-Code +LIBRARY mylib.dll +\newline +EXPORTS +\newline +cool_function1 +\newline +cool_function2 +\end_layout + +\begin_layout Standard +Alternatively, you may be able to use the storage-class specifier __declspec(dll +export) in the C-definition of the function to avoid the need for this .def + file. + +\end_layout + +\end_deeper +\begin_layout Standard +There is no standard way in Python distutils to create a standard shared + library (an extension module is a +\begin_inset Quotes eld +\end_inset + +special +\begin_inset Quotes erd +\end_inset + + shared library Python understands) in a cross-platform manner. + Thus, a big disadvantage of ctypes at the time of writing this book is + that it is difficult to distribute in a cross-platform manner a Python + extension that uses c-types and includes your own code which should be + compiled as a shared library on the users system. + +\end_layout + +\begin_layout Subsection +Loading the shared library +\end_layout + +\begin_layout Standard +A simple, but robust way to load the shared library is to get the absolute + path name and load it using the cdll object of ctypes. + +\end_layout + +\begin_layout LyX-Code +lib = ctypes.cdll[<full_path_name>] +\end_layout + +\begin_layout Standard +However, on Windows accessing an attribute of the cdll method will load + the first DLL by that name found in the current directory or on the PATH. + Loading the absolute path name requires a little finesse for cross-platform + work since the extension of shared libraries varies. + There is a +\family typewriter +ctypes.util.find_library +\family default + utility available that can simplify the process of finding the library + to load but it is not foolproof. + Complicating matters, different platforms have different default extensions + used by shared libraries (e.g. + .dll -- Windows, .so -- Linux, .dylib -- Mac OS X). + This must also be taken into account if you are using c-types to wrap code + that needs to work on several platforms. + +\end_layout + +\begin_layout Standard +NumPy provides a convenience function called +\series bold +ctypeslib.load_library +\series default +(name, path). + This function takes the name of the shared library (including any prefix + like 'lib' but excluding the extension) and a path where the shared library + can be located. + It returns a ctypes library object or raises an OSError if the library + cannot be found or raises an ImportError if the ctypes module is not available. + (Windows users: the ctypes library object loaded using +\series bold +load_library +\series default + is always loaded assuming cdecl calling convention. + See the ctypes documentation under ctypes.windll and/or ctypes.oledll for + ways to load libraries under other calling conventions). + +\end_layout + +\begin_layout Standard +The functions in the shared library are available as attributes of the ctypes + library object (returned from +\series bold +ctypeslib.load_library +\series default +) or as items using lib['func_name'] syntax. + The latter method for retrieving a function name is particularly useful + if the function name contains characters that are not allowable in Python + variable names. + +\end_layout + +\begin_layout Subsection +Converting arguments +\end_layout + +\begin_layout Standard +Python ints/longs, strings, and unicode objects are automatically converted + as needed to equivalent c-types arguments The None object is also converted + automatically to a NULL pointer. + All other Python objects must be converted to ctypes-specific types. + There are two ways around this restriction that allow c-types to integrate + with other objects. + +\end_layout + +\begin_layout Enumerate +Don't set the argtypes attribute of the function object and define an _as_parame +ter_ method for the object you want to pass in. + The _as_parameter_ method must return a Python int which will be passed + directly to the function. + +\end_layout + +\begin_layout Enumerate +Set the argtypes attribute to a list whose entries contain objects with + a classmethod named from_param that knows how to convert your object to + an object that ctypes can understand (an int/long, string, unicode, or + object with the _as_parameter_ attribute). + +\end_layout + +\begin_layout Standard +NumPy uses both methods with a preference for the second method because + it can be safer. + The ctypes attribute of the ndarray returns an object that has an _as_parameter +_ attribute which returns an integer representing the address of the ndarray + to which it is associated. + As a result, one can pass this ctypes attribute object directly to a function + expecting a pointer to the data in your ndarray. + The caller must be sure that the ndarray object is of the correct type, + shape, and has the correct flags set or risk nasty crashes if the data-pointer + to inappropriate arrays are passsed in. + +\end_layout + +\begin_layout Standard +To implement the second method, NumPy provides the class-factory function + +\series bold +ndpointer +\series default + in the +\series bold +ctypeslib +\series default + module. + This class-factory function produces an appropriate class that can be placed + in an argtypes attribute entry of a ctypes function. + The class will contain a from_param method which ctypes will use to convert + any ndarray passed in to the function to a ctypes-recognized object. + In the process, the conversion will perform checking on any properties + of the ndarray that were specified by the user in the call to ndpointer. + Aspects of the ndarray that can be checked include the data-type, the number-of +-dimensions, the shape, and/or the state of the flags on any array passed. + The return value of the from_param method is the ctypes attribute of the + array which (because it contains the _as_parameter_ attribute pointing + to the array data area) can be used by ctypes directly. + +\end_layout + +\begin_layout Standard +The ctypes attribute of an ndarray is also endowed with additional attributes + that may be convenient when passing additional information about the array + into a ctypes function. + The attributes +\series bold +data +\series default +, +\series bold +shape +\series default +, and +\series bold +strides +\series default + can provide c-types compatible types corresponding to the data-area, the + shape, and the strides of the array. + The data attribute reutrns a +\family typewriter +c_void_p +\family default + representing a pointer to the data area. + The shape and strides attributes each return an array of ctypes integers + (or None representing a NULL pointer, if a 0-d array). + The base ctype of the array is a ctype integer of the same size as a pointer + on the platform. + There are also methods data_as(<ctype>), shape_as(<base ctype>), and strides_as +(<base ctype>). + These return the data as a ctype object of your choice and the shape/strides + arrays using an underlying base type of your choice. + For convenience, the +\series bold +ctypeslib +\series default + module also contains +\series bold +c_intp +\series default + as a ctypes integer data-type whose size is the same as the size of +\family typewriter +c_void_p +\family default + on the platform (it's value is None if ctypes is not installed). + +\end_layout + +\begin_layout Subsection +Calling the function +\end_layout + +\begin_layout Standard +The function is accessed as an attribute of or an item from the loaded shared-li +brary. + Thus, if +\begin_inset Quotes eld +\end_inset + +./mylib.so +\begin_inset Quotes erd +\end_inset + + has a function named +\begin_inset Quotes eld +\end_inset + +cool_function1 +\begin_inset Quotes erd +\end_inset + +, I could access this function either as +\end_layout + +\begin_layout LyX-Code +lib = numpy.ctypeslib.load_library('mylib','.') +\newline +func1 = lib.cool_function1 # + or equivalently +\newline +func1 = lib['cool_function1'] +\end_layout + +\begin_layout Standard +In ctypes, the return-value of a function is set to be 'int' by default. + This behavior can be changed by setting the restype attribute of the function. + Use None for the restype if the function has no return value ('void'): +\end_layout + +\begin_layout LyX-Code +func1.restype = None +\end_layout + +\begin_layout Standard +As previously discussed, you can also set the argtypes attribute of the + function in order to have ctypes check the types of the input arguments + when the function is called. + Use the ndpointer factory function to generate a ready-made class for data-type +, shape, and flags checking on your new function. + The ndpointer function has the signature +\end_layout + +\begin_layout Description +ndpointer (dtype=None, ndim=None, shape=None, flags=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Keyword arguments with the value +\family typewriter +None +\family default + are not checked. + Specifying a keyword enforces checking of that aspect of the ndarray on + conversion to a ctypes-compatible object. + The dtype keyword can be any object understood as a data-type object. + The ndim keyword should be an integer, and the shape keyword should be + an integer or a sequence of integers. + The flags keyword specifies the minimal flags that are required on any + array passed in. + This can be specified as a string of comma separated requirements, an integer + indicating the requirement bits OR'd together, or a flags object returned + from the flags attribute of an array with the necessary requirements. + +\end_layout + +\begin_layout Standard +Using an ndpointer class in the argtypes method can make it significantly + safer to call a C-function using ctypes and the data-area of an ndarray. + You may still want to wrap the function in an additional Python wrapper + to make it user-friendly (hiding some obvious arguments and making some + arguments output arguments). + In this process, the +\series bold +requires +\series default + function in NumPy may be useful to return the right kind of array from + a given input. + +\end_layout + +\begin_layout Subsection +Complete example +\end_layout + +\begin_layout Standard +In this example, I will show how the addition function and the filter function + implemented previously using the other approaches can be implemented using + ctypes. + First, the C-code which implements the algorithms contains the functions + zadd, dadd, sadd, cadd, and dfilter2d. + The zadd function is +\end_layout + +\begin_layout LyX-Code +/* Add arrays of contiguous data */ +\newline +typedef struct {double real; double imag;} + cdouble; +\newline +typedef struct {float real; float imag;} cfloat; +\newline +void zadd(cdouble + *a, cdouble *b, cdouble *c, long n) +\newline +{ +\newline + while (n--) { +\newline + c->real = + a->real + b->real; +\newline + c->imag = a->imag + b->imag; +\newline + a++; b++; + c++; +\newline + } +\newline +} +\end_layout + +\begin_layout Standard +with similar code for cadd, dadd, and sadd that handles complex float, double, + and float data-types, respectively: +\end_layout + +\begin_layout LyX-Code +void cadd(cfloat *a, cfloat *b, cfloat *c, long n) +\newline +{ +\newline + while (n--) { +\newline + + c->real = a->real + b->real; +\newline + c->imag = a->imag + + b->imag; +\newline + a++; b++; c++; +\newline + } +\newline +} +\newline +void dadd(double + *a, double *b, double *c, long n) +\newline +{ +\newline + while (n--) { +\newline + + *c++ = *a++ + *b++; +\newline + } +\newline +} +\newline +void sadd(float *a, float *b, float + *c, long n) +\newline +{ +\newline + while (n--) { +\newline + *c++ = *a++ + *b++; +\newline + + } +\newline +} +\end_layout + +\begin_layout Standard +The code.c file also contains the function dfilter2d: +\end_layout + +\begin_layout LyX-Code +/* Assumes b is contiguous and +\newline + a has strides that are multiples of sizeof(dou +ble) +\newline +*/ +\newline +void +\newline +dfilter2d(double *a, double *b, int *astrides, int *dims) +\newline +{ +\newline + + int i, j, M, N, S0, S1; +\newline + int r, c, rm1, rp1, cp1, cm1; +\newline + +\newline + M = dims[0]; + N = dims[1]; +\newline + S0 = astrides[0]/sizeof(double); +\newline + S1=astrides[1]/sizeof(doub +le); +\newline + for (i=1; i<M-1; i++) { +\newline + r = i*S0; rp1 = r+S0; rm1 = r-S0; +\newline + + for (j=1; j<N-1; j++) { +\newline + c = j*S1; cp1 = j+S1; cm1 = j-S1; +\newline + + b[i*N+j] = a[r+c] + +\backslash + +\newline + (a[rp1+c] + a[rm1+c] + +\backslash + +\newline + a[r+cp1] + a[r+cm1])*0.5 + +\backslash + +\newline + (a[rp1+cp1] + a[rp1+cm1] + +\backslash + +\newline + a[rm1+cp1] + a[rm1+cp1])*0.25; +\newline + } +\newline + } +\newline +} +\end_layout + +\begin_layout Standard +A possible advantage this code has over the Fortran-equivalent code is that + it takes arbitrarily strided (i.e. + non-contiguous arrays) and may also run faster depending on the optimization + capability of your compiler. + But, it is a obviously more complicated than the simple code in filter.f. + This code must be compiled into a shared library. + On my Linux system this is accomplished using +\end_layout + +\begin_layout LyX-Code +gcc -o code.so -shared code.c +\end_layout + +\begin_layout Standard +Which creates a shared_library named code.so in the current directory. + On Windows don't forget to either add __declspec(dllexport) in front of + void on the line preceeding each function definition, or write a code.def + file that lists the names of the functions to be exported. + +\end_layout + +\begin_layout Standard +A suitable Python interface to this shared library should be constructed. + To do this create a file named interface.py with the following lines at + the top: +\end_layout + +\begin_layout LyX-Code +__all__ = ['add', 'filter2d'] +\newline + +\newline +import numpy as N +\newline +import os +\newline + +\newline +_path = os.path.dirname('__ +file__') +\newline +lib = N.ctypeslib.load_library('code', _path) +\newline +_typedict = {'zadd' : + complex, 'sadd' : N.single, +\newline + 'cadd' : N.csingle, 'dadd' : float} +\newline +for + name in _typedict.keys(): +\newline + val = getattr(lib, name) +\newline + val.restype = None +\newline + + _type = _typedict[name] +\newline + val.argtypes = [N.ctypeslib.ndpointer(_type, + +\newline + flags='aligned, contiguous'), +\newline + + N.ctypeslib.ndpointer(_type, +\newline + flags='aligned, contiguous'), +\newline + + N.ctypeslib.ndpointer(_type, +\newline + flags='alig +ned, contiguous,' +\backslash + +\newline + 'writeable'), +\newline + N.ctypeslib.c_intp] +\end_layout + +\begin_layout Standard +This code loads the shared library named code.<ext> located in the same path + as this file. + It then adds a return type of void to the functions contained in the library. + It also adds argument checking to the functions in the library so that + ndarrays can be passed as the first three arguments along with an integer + (large enough to hold a pointer on the platform) as the fourth argument. + +\end_layout + +\begin_layout Standard +Setting up the filtering function is similar and allows the filtering function + to be called with ndarray arguments as the first two arguments and with + pointers to integers (large enough to handle the strides and shape of an + ndarray) as the last two arguments. + +\end_layout + +\begin_layout LyX-Code +lib.dfilter2d.restype=None +\newline +lib.dfilter2d.argtypes = [N.ctypeslib.ndpointer(float, + ndim=2, +\newline + flags='aligned'), +\newline + + N.ctypeslib.ndpointer(float, ndim=2, +\newline + + flags='aligned, contiguous,' +\backslash + +\newline + 'writeable'), +\newline + + ctypes.POINTER(N.ctypeslib.c_intp), +\newline + ctypes.POINTER +(N.ctypeslib.c_intp)] +\end_layout + +\begin_layout Standard +Next, define a simple selection function that chooses which addition function + to call in the shared library based on the data-type: +\end_layout + +\begin_layout LyX-Code +def select(dtype): +\newline + if dtype.char in ['?bBhHf']: +\newline + return lib.sadd, + single +\newline + elif dtype.char in ['F']: +\newline + return lib.cadd, csingle +\newline + elif + dtype.char in ['DG']: +\newline + return lib.zadd, complex +\newline + else: +\newline + return + lib.dadd, float +\newline + return func, ntype +\end_layout + +\begin_layout Standard +Finally, the two functions to be exported by the interface can be written + simply as +\end_layout + +\begin_layout LyX-Code +def add(a, b): +\newline + requires = ['CONTIGUOUS', 'ALIGNED'] +\newline + a = N.asanyarray(a) +\newline + + func, dtype = select(a.dtype) +\newline + a = N.require(a, dtype, requires) +\newline + + b = N.require(b, dtype, requires) +\newline + c = N.empty_like(a) +\newline + func(a,b,c,a.size) +\newline + + return c +\end_layout + +\begin_layout Standard +and +\end_layout + +\begin_layout LyX-Code +def filter2d(a): +\newline + a = N.require(a, float, ['ALIGNED']) +\newline + b = N.zeros_like(a) +\newline + + lib.dfilter2d(a, b, a.ctypes.strides, a.ctypes.shape) +\newline + return b +\end_layout + +\begin_layout Subsection +Conclusion +\end_layout + +\begin_layout Standard +Using ctypes is a powerful way to connect Python with arbitrary C-code. + It's advantages for extending Python include +\end_layout + +\begin_layout Itemize +clean separation of C-code from Python code +\end_layout + +\begin_deeper +\begin_layout Itemize +no need to learn a new syntax except Python and C +\end_layout + +\begin_layout Itemize +allows re-use of C-code +\end_layout + +\begin_layout Itemize +functionality in shared libraries written for other purposes can be obtained + with a simple Python wrapper and search for the library. + +\end_layout + +\end_deeper +\begin_layout Itemize +easy integration with NumPy through the ctypes attribute +\end_layout + +\begin_layout Itemize +full argument checking with the ndpointer class factory +\end_layout + +\begin_layout Standard +It's disadvantages include +\end_layout + +\begin_layout Itemize +It is difficult to distribute an extension module made using ctypes because + of a lack of support for building shared libraries in distutils (but I + suspect this will change in time). + +\end_layout + +\begin_layout Itemize +You must have shared-libraries of your code (no static libraries). + +\end_layout + +\begin_layout Itemize +Very little support for C++ code and it's different library-calling conventions. + You will probably need a C-wrapper around C++ code to use with ctypes (or + just use Boost.Python instead). +\end_layout + +\begin_layout Standard +Because of the difficulty in distributing an extension module made using + ctypes, f2py is still the easiest way to extend Python for package creation. + However, ctypes is a close second and will probably be growing in popularity + now that it is part of the Python distribution. + This should bring more features to ctypes that should eliminate the difficulty + in extending Python and distributing the extension using ctypes. + +\begin_inset LatexCommand index +name "ctypes|)" + +\end_inset + + +\end_layout + +\begin_layout Section +Additional tools you may find useful +\end_layout + +\begin_layout Standard +These tools have been found useful by others using Python and so are included + here. + They are discussed separately because I see them as either older ways to + do things more modernly handled by f2py, weave, Pyrex, or ctypes (SWIG, + PyFort, PyInline) or because I don't know much about them (SIP, Boost, + Instant). + I have not added links to these methods because my experience is that you + can find the most relevant link faster using Google or some other search + engine, and any links provided here would be quickly dated. + Do not assume that just because it is included in this list, I don't think + the package deserves your attention. + I'm including information about these packages because many people have + found them useful and I'd like to give you as many options as possible + for tackling the problem of easily integrating your code. + +\end_layout + +\begin_layout Subsection +SWIG +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "swig" + +\end_inset + +Simplified Wrapper and Interface Generator (SWIG) is an old and fairly stable + method for wrapping C/C++-libraries to a large variety of other languages. + It does not specifically understand NumPy arrays but can be made useable + with NumPy through the use of typemaps. + There are some sample typemaps in the numpy/doc/swig directory under numpy.i + along with an example module that makes use of them. + SWIG excels at wrapping large C/C++ libraries because it can (almost) parse + their headers and auto-produce an interface. + Technically, you need to generate a +\family typewriter +.i +\family default + file that defines the interface. + Often, however, this +\family typewriter +.i +\family default + file can be parts of the header itself. + The interface usually needs a bit of tweaking to be very useful. + This ability to parse C/C++ headers and auto-generate the interface still + makes SWIG a useful approach to adding functionalilty from C/C++ into Python, + despite the other methods that have emerged that are more targeted to Python. + SWIG can actually target extensions for several languages, but the typemaps + usually have to be language-specific. + Nonetheless, with modifications to the Python-specific typemaps, SWIG can + be used to interface a library with other languages such as Perl, Tcl, + and Ruby. + +\end_layout + +\begin_layout Standard +My experience with SWIG has been generally positive in that it is relatively + easy to use and quite powerful. + I used to use it quite often before becoming more proficient at writing + C-extensions. + However, I struggled writing custom interfaces with SWIG because it must + be done using the concept of typemaps which are not Python specific and + are written in a C-like syntax. + Therefore, I tend to prefer other gluing strategies and would only attempt + to use SWIG to wrap a very-large C/C++ library. + Nonetheless, there are others who use SWIG quite happily. + +\end_layout + +\begin_layout Subsection +SIP +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "SIP" + +\end_inset + +SIP is another tool for wrapping C/C++ libraries that is Python specific + and appears to have very good support for C++. + Riverbank Computing developed SIP in order to create Python bindings to + the QT library. + An interface file must be written to generate the binding, but the interface + file looks a lot like a C/C++ header file. + While SIP is not a full C++ parser, it understands quite a bit of C++ syntax + as well as its own special directives that allow modification of how the + Python binding is accomplished. + It also allows the user to define mappings between Python types and C/C++ + structrues and classes. + +\end_layout + +\begin_layout Subsection +Boost Python +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "Boost.Python" + +\end_inset + +Boost is a repository of C++ libraries and Boost.Python is one of those libraries + which provides a concise interface for binding C++ classes and functions + to Python. + The amazing part of the Boost.Python approach is that it works entirely + in pure C++ without introducing a new syntax. + Many users of C++ report that Boost.Python makes it possible to combine + the best of both worlds in a seamless fashion. + I have not used Boost.Python because I am not a big user of C++ and using + Boost to wrap simple C-subroutines is usually over-kill. + It's primary purpose is to make C++ classes available in Python. + So, if you have a set of C++ classes that need to be integrated cleanly + into Python, consider learning about and using Boost.Python. +\end_layout + +\begin_layout Subsection +Instant +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "Instant" + +\end_inset + +This is a relatively new package (called pyinstant at sourceforge) that + builds on top of SWIG to make it easy to inline C and C++ code in Python + very much like weave. + However, Instant builds extension modules on the fly with specific module + names and specific method names. + In this repsect it is more more like f2py in its behavior. + The extension modules are built on-the fly (as long as the SWIG is installed). + They can then be imported. + Here is an example of using Instant with NumPy arrays (adapted from the + test2 included in the Instant distribution): +\end_layout + +\begin_layout LyX-Code +code=""" +\end_layout + +\begin_layout LyX-Code +PyObject* add(PyObject* a_, PyObject* b_){ +\end_layout + +\begin_layout LyX-Code + /* +\end_layout + +\begin_layout LyX-Code + various checks +\end_layout + +\begin_layout LyX-Code + */ +\end_layout + +\begin_layout LyX-Code + PyArrayObject* a=(PyArrayObject*) a_; +\end_layout + +\begin_layout LyX-Code + PyArrayObject* b=(PyArrayObject*) b_; +\end_layout + +\begin_layout LyX-Code + int n = a->dimensions[0]; +\end_layout + +\begin_layout LyX-Code + int dims[1]; +\end_layout + +\begin_layout LyX-Code + dims[0] = n; +\end_layout + +\begin_layout LyX-Code + PyArrayObject* ret; +\end_layout + +\begin_layout LyX-Code + ret = (PyArrayObject*) PyArray_FromDims(1, dims, NPY_DOUBLE); +\end_layout + +\begin_layout LyX-Code + int i; +\end_layout + +\begin_layout LyX-Code + char *aj=a->data; +\end_layout + +\begin_layout LyX-Code + char *bj=b->data; +\end_layout + +\begin_layout LyX-Code + double *retj = (double *)ret->data; +\end_layout + +\begin_layout LyX-Code + for (i=0; i < n; i++) { +\end_layout + +\begin_layout LyX-Code + *retj++ = *((double *)aj) + *((double *)bj); +\end_layout + +\begin_layout LyX-Code + aj += a->strides[0]; +\end_layout + +\begin_layout LyX-Code + bj += b->strides[0]; +\end_layout + +\begin_layout LyX-Code + } +\end_layout + +\begin_layout LyX-Code +return (PyObject *)ret; +\end_layout + +\begin_layout LyX-Code +} +\end_layout + +\begin_layout LyX-Code +""" +\end_layout + +\begin_layout LyX-Code +import Instant, numpy +\end_layout + +\begin_layout LyX-Code +ext = Instant.Instant() +\end_layout + +\begin_layout LyX-Code +ext.create_extension(code=s, headers=["numpy/arrayobject.h"], + include_dirs=[numpy.get_include()], + init_code='import_array();', module="test2b_ext +") +\end_layout + +\begin_layout LyX-Code +import test2b_ext +\end_layout + +\begin_layout LyX-Code +a = numpy.arange(1000) +\end_layout + +\begin_layout LyX-Code +b = numpy.arange(1000) +\end_layout + +\begin_layout LyX-Code +d = test2b_ext.add(a,b) +\end_layout + +\begin_layout Standard +Except perhaps for the dependence on SWIG, Instant is a straightforward + utility for writing extension modules. + +\end_layout + +\begin_layout Subsection +PyInline +\end_layout + +\begin_layout Standard +This is a much older module that allows automatic building of extension + modules so that C-code can be included with Python code. + It's latest release (version 0.03) was in 2001, and it appears that it is + not being updated. + +\end_layout + +\begin_layout Subsection +PyFort +\end_layout + +\begin_layout Standard +PyFort is a nice tool for wrapping Fortran and Fortran-like C-code into + Python with support for Numeric arrays. + It was written by Paul Dubois, a distinguished computer scientist and the + very first maintainer of Numeric (now retired). + It is worth mentioning in the hopes that somebody will update PyFort to + work with NumPy arrays as well which now support either Fortran or C-style + contiguous arrays. + +\end_layout + +\begin_layout Chapter +Code Explanations +\end_layout + +\begin_layout Quotation +Fanaticism consists of redoubling your efforts when you have forgotten your + aim. +\end_layout + +\begin_layout Right Address +--- +\emph on +George Santayana +\end_layout + +\begin_layout Quotation +An authority is a person who can tell you more about something than you + really care to know. +\end_layout + +\begin_layout Right Address +--- +\emph on +Unknown +\end_layout + +\begin_layout Standard +This Chapter attempts to explain the logic behind some of the new pieces + of code. + The purpose behind these explanations is to enable somebody to be able + to understand the ideas behind the implementation somewhat more easily + than just staring at the code. + Perhaps in this way, the algorithms can be improved on, borrowed from, + and/or optimized. + +\end_layout + +\begin_layout Section +Memory model +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "ndarray!memory model" + +\end_inset + +One fundamental aspect of the ndarray is that an array is seen as a +\begin_inset Quotes eld +\end_inset + +chunk +\begin_inset Quotes erd +\end_inset + + of memory starting at some location. + The interpretation of this memory depends on the stride information. + For each dimension in an +\begin_inset Formula $N$ +\end_inset + +-dimensional array, an integer (stride) dictates how many bytes must be + skipped to get to the next element in that dimension. + Unless you have a single-segment array, this stride information must be + consulted when traversing through an array. + It is not difficult to write code that accepts strides, you just have to + use (char *) pointers because strides are in units of bytes. + Keep in mind also that strides do not have to be unit-multiples of the + element size. + Also, remember that if the number of dimensions of the array is 0 (sometimes + called a rank-0 array), then the strides and dimensions variables are NULL. + +\end_layout + +\begin_layout Standard +Besides the structural information contained in the strides and dimensions + members of the PyArrayObject, the flags contain important information about + how the data may be accessed. + In particular, the NPY_ALIGNED flag is set when the memory is on a suitable + boundary according to the data-type array. + Even if you have a contiguous chunk of memory, you cannot just assume it + is safe to dereference a data-type-specific pointer to an element. + Only if the NPY_ALIGNED flag is set is this a safe operation (on some platforms + it will work but on others, like Solaris, it will cause a bus error). + The NPY_WRITEABLE should also be ensured if you plan on writing to the + memory area of the array. + It is also possible to obtain a pointer to an unwriteable memory area. + Sometimes, writing to the memory area when the NPY_WRITEABLE flag is not + set will just be rude. + Other times it can cause program crashes ( +\emph on +e.g. + +\emph default + a data-area that is a read-only memory-mapped file). +\end_layout + +\begin_layout Section +Data-type encapsulation +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "dtype" + +\end_inset + +The data-type is an important abstraction of the ndarray. + Operations will look to the data-type to provide the key functionality + that is needed to operate on the array. + This functionality is provided in the list of function pointers pointed + to by the 'f' member of the PyArray_Descr structure. + In this way, the number of data-types can be extended simply by providing + a PyArray_Descr structure with suitable function pointers in the 'f' member. + For built-in types there are some optimizations that by-pass this mechanism, + but the point of the data-type abstraction is to allow new data-types to + be added. +\end_layout + +\begin_layout Standard +One of the built-in data-types, the void data-type allows for arbitrary + records containing 1 or more fields as elements of the array. + A field is simply another data-type object along with an offset into the + current record. + In order to support arbitrarily nested fields, several recursive implementation +s of data-type access are implemented for the void type. + A common idiom is to cycle through the elements of the dictionary and perform + a specific operation based on the data-type object stored at the given + offset. + These offsets can be arbitrary numbers. + Therefore, the possibility of encountering mis-aligned data must be recognized + and taken into account if necessary. + +\end_layout + +\begin_layout Section +N-D Iterators +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "array iterator" + +\end_inset + +A very common operation in much of NumPy code is the need to iterate over + all the elements of a general, strided, N-dimensional array. + This operation of a general-purpose N-dimensional loop is abstracted in + the notion of an iterator object. + To write an N-dimensional loop, you only have to create an iterator object + from an ndarray, work with the dataptr member of the iterator object structure + and call the macro PyArray_ITER_NEXT(it) on the iterator object to move + to the next element. + The +\begin_inset Quotes eld +\end_inset + +next +\begin_inset Quotes erd +\end_inset + + element is always in C-contiguous order. + The macro works by first special casing the C-contiguous, 1-d, and 2-d + cases which work very simply. + +\end_layout + +\begin_layout Standard +For the general case, the iteration works by keeping track of a list of + coordinate counters in the iterator object. + At each iteration, the last coordinate counter is increased (starting from + 0). + If this counter is smaller then one less than the size of the array in + that dimension (a pre-computed and stored value), then the counter is increased + and the dataptr member is increased by the strides in that dimension and + the macro ends. + If the end of a dimension is reached, the counter for the last dimension + is reset to zero and the dataptr is moved back to the beginning of that + dimension by subtracting the strides value times one less than the number + of elements in that dimension (this is also pre-computed and stored in + the backstrides member of the iterator object). + In this case, the macro does not end, but a local dimension counter is + decremented so that the next-to-last dimension replaces the role that the + last dimension played and the previously-described tests are executed again + on the next-to-last dimension. + In this way, the dataptr is adjusted appropriately for arbitrary striding. + +\end_layout + +\begin_layout Standard +The coordinates member of the PyArrayIterObject structure maintains the + current N-d counter unless the underlying array is C-contiguous in which + case the coordinate counting is by-passed. + The index member of the PyArrayIterObject keeps track of the current flat + index of the iterator. + It is updated by the PyArray_ITER_NEXT macro. + +\end_layout + +\begin_layout Section +Broadcasting +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "broadcasting" + +\end_inset + +In Numeric, broadcasting was implemented in several lines of code buried + deep in ufuncobject.c. + In NumPy, the notion of broadcasting has been abstracted so that it can + be performed in multiple places. + Broadcasting is handled by the function PyArray_Broadcast. + This function requires a PyArrayMultiIterObject (or something that is a + binary equivalent) to be passed in. + The PyArrayMultiIterObject keeps track of the broadcasted number of dimensions + and size in each dimension along with the total size of the broadcasted + result. + It also keeps track of the number of arrays being broadcast and a pointer + to an iterator for each of the arrays being broadcasted. + +\end_layout + +\begin_layout Standard +The PyArray_Broadcast function takes the iterators that have already been + defined and uses them to determine the broadcast shape in each dimension + (to create the iterators at the same time that broadcasting occurs then + use the PyMuliIter_New function). + Then, the iterators are adjusted so that each iterator thinks it is iterating + over an array with the broadcasted size. + This is done by adjusting the iterators number of dimensions, and the shape + in each dimension. + This works because the iterator strides are also adjusted. + Broadcasting only adjusts (or adds) length-1 dimensions. + For these dimensions, the strides variable is simply set to 0 so that the + data-pointer for the iterator over that array doesn't move as the broadcasting + operation operates over the extended dimension. + +\end_layout + +\begin_layout Standard +Broadcasting was always implemented in Numeric using 0-valued strides for + the extended dimensions. + It is done in exactly the same way in NumPy. + The big difference is that now the array of strides is kept track of in + a PyArrayIterObject, the iterators involved in a broadcasted result are + kept track of in a PyArrayMultiIterObject, and the PyArray_BroadCast call + implements the broad-casting rules. + +\end_layout + +\begin_layout Section +Array Scalars +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "array scalars" + +\end_inset + +The array scalars offer a hierarchy of Python types that allow a one-to-one + correspondence between the data-type stored in an array and the Python-type + that is returned when an element is extracted from the array. + An exception to this rule was made with object arrays. + Object arrays are heterogeneous collections of arbitrary Python objects. + When you select an item from an object array, you get back the original + Python object (and not an object array scalar which does exist but is rarely + used for practical purposes). +\end_layout + +\begin_layout Standard +The array scalars also offer the same methods and attributes as arrays with + the intent that the same code can be used to support arbitrary dimensions + (including 0-dimensions). + The array scalars are read-only (immutable) with the exception of the void + scalar which can also be written to so that record-array field setting + works more naturally (a[0]['f1'] = +\family typewriter +value +\family default +). +\end_layout + +\begin_layout Section +Advanced ( +\begin_inset Quotes eld +\end_inset + +Fancy +\begin_inset Quotes erd +\end_inset + +) Indexing +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "indexing" + +\end_inset + +The implementation of advanced indexing represents some of the most difficult + code to write and explain. + In fact, there are two implementations of advanced indexing. + The first works only with 1-d arrays and is implemented to handle expressions + involving a.flat[obj]. + The second is general-purpose that works for arrays of +\begin_inset Quotes eld +\end_inset + +arbitrary dimension +\begin_inset Quotes erd +\end_inset + + (up to a fixed maximum). + The one-dimensional indexing approaches were implemented in a rather straightfo +rward fashion, and so it is the general-purpose indexing code that will + be the focus of this section. + +\end_layout + +\begin_layout Standard +There is a multi-layer approach to indexing because the indexing code can + at times return an array scalar and at other times return an array. + The functions with +\begin_inset Quotes eld +\end_inset + +_nice +\begin_inset Quotes erd +\end_inset + + appended to their name do this special handling while the function without + the _nice appendage always return an array (perhaps a 0-dimensional array). + Some special-case optimizations (the index being an integer scalar, and + the index being a tuple with as many dimensions as the array) are handled + in array_subscript_nice function which is what Python calls when presented + with the code +\begin_inset Quotes eld +\end_inset + +a[obj]. +\begin_inset Quotes erd +\end_inset + + These optimizations allow fast single-integer indexing, and also ensure + that a 0-dimensional array is not created only to be discarded as the array + scalar is returned instead. + This provides significant speed-up for code that is selecting many scalars + out of an array (such as in a loop). + However, it is still not faster than simply using a list to store standard + Python scalars, because that is optimized by the Python interpreter itself. + +\end_layout + +\begin_layout Standard +After these optimizations, the array_subscript function itself is called. + This function first checks for field selection which occurs when a string + is passed as the indexing object. + Then, 0-d arrays are given special-case consideration. + Finally, the code determines whether or not advanced, or fancy, indexing + needs to be performed. + If fancy indexing is not needed, then standard view-based indexing is performed + using code borrowed from Numeric which parses the indexing object and returns + the offset into the data-buffer and the dimensions necessary to create + a new view of the array. + The strides are also changed by multiplying each stride by the step-size + requested along the corresponding dimension. + +\end_layout + +\begin_layout Subsection +Fancy-indexing check +\end_layout + +\begin_layout Standard +The fancy_indexing_check routine determines whether or not to use standard + view-based indexing or new copy-based indexing. + If the indexing object is a tuple, then view-based indexing is assumed + by default. + Only if the tuple contains an array object or a sequence object is fancy-indexi +ng assumed. + If the indexing object is an array, then fancy indexing is automatically + assumed. + If the indexing object is any other kind of sequence, then fancy-indexing + is assumed by default. + This is over-ridden to simple indexing if the sequence contains any slice, + newaxis, or Ellipsis objects, and no arrays or additional sequences are + also contained in the sequence. + The purpose of this is to allow the construction of +\begin_inset Quotes eld +\end_inset + +slicing +\begin_inset Quotes erd +\end_inset + + sequences which is a common technique for building up code that works in + arbitrary numbers of dimensions. + +\end_layout + +\begin_layout Subsection +Fancy-indexing implementation +\end_layout + +\begin_layout Standard +The concept of indexing was also abstracted using the idea of an iterator. + If fancy indexing is performed, then a PyArrayMapIterObject is created. + This internal object is not exposed to Python. + It is created in order to handle the fancy-indexing at a high-level. + Both get and set fancy-indexing operations are implemented using this object. + Fancy indexing is abstracted into three separate operations: (1) creating + the PyArrayMapIterObject from the indexing object, (2) binding the PyArrayMapIt +erObject to the array being indexed, and (3) getting (or setting) the items + determined by the indexing object. + There is an optimization implemented so that the PyArrayIterObject (which + has it's own less complicated fancy-indexing) is used for indexing when + possible. + +\end_layout + +\begin_layout Subsubsection +Creating the mapping object +\end_layout + +\begin_layout Standard +The first step is to convert the indexing objects into a standard form where + iterators are created for all of the index array inputs and all Boolean + arrays are converted to equivalent integer index arrays (as if nonzero(arr) + had been called). + Finally, all integer arrays are replaced with the integer 0 in the indexing + object and all of the index-array iterators are +\begin_inset Quotes eld +\end_inset + +broadcast +\begin_inset Quotes erd +\end_inset + + to the same shape. + +\end_layout + +\begin_layout Subsubsection +Binding the mapping object +\end_layout + +\begin_layout Standard +When the mapping object is created it does not know which array it will + be used with so once the index iterators are constructed during mapping-object + creation, the next step is to associate these iterators with a particular + ndarray. + This process interprets any ellipsis and slice objects so that the index + arrays are associated with the appropriate axis (the axis indicated by + the iteraxis entry corresponding to the iterator for the integer index + array). + This information is then used to check the indices to be sure they are + within range of the shape of the array being indexed. + The presence of ellipsis and/or slice objects implies a sub-space iteration + that is accomplished by extracting a sub-space view of the array (using + the index object resulting from replacing all the integer index arrays + with 0) and storing the information about where this sub-space starts in + the mapping object. + This is used later during mapping-object iteration to select the correct + elements from the underlying array. + +\end_layout + +\begin_layout Subsubsection +Getting (or Setting) +\end_layout + +\begin_layout Standard +After the mapping object is successfully bound to a particular array, the + mapping object contains the shape of the resulting item as well as iterator + objects that will walk through the currently-bound array and either get + or set its elements as needed. + The walk is implemented using the PyArray_MapIterNext function. + This function sets the coordinates of an iterator object into the current + array to be the next coordinate location indicated by all of the indexing-objec +t iterators while adjusting, if necessary, for the presence of a sub-space. + The result of this function is that the dataptr member of the mapping object + structure is pointed to the next position in the array that needs to be + copied out or set to some value. + +\end_layout + +\begin_layout Standard +When advanced indexing is used to extract an array, an iterator for the + new array is constructed and advanced in phase with the mapping object + iterator. + When advanced indexing is used to place values in an array, a special +\begin_inset Quotes eld +\end_inset + +broadcasted +\begin_inset Quotes erd +\end_inset + + iterator is constructed from the object being placed into the array so + that it will only work if the values used for setting have a shape that + is +\begin_inset Quotes eld +\end_inset + +broadcastable +\begin_inset Quotes erd +\end_inset + + to the shape implied by the indexing object. + +\end_layout + +\begin_layout Section +Universal Functions +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "ufunc|(" + +\end_inset + +Universal functions are callable objects that take +\begin_inset Formula $N$ +\end_inset + + inputs and produce +\begin_inset Formula $M$ +\end_inset + + outputs by wrapping basic 1-d loops that work element-by-element into full + easy-to use functions that seamlessly implement broadcasting, type-checking + and buffered coercion, and output-argument handling. + New universal functions are normally created in C, although there is a + mechanism for creating ufuncs from Python functions ( +\series bold +frompyfunc +\series default +). + The user must supply a 1-d loop that implements the basic function taking + the input scalar values and placing the resulting scalars into the appropriate + output slots as explaine n implementation. + +\end_layout + +\begin_layout Subsection +Setup +\end_layout + +\begin_layout Standard +Every ufunc calculation involves some overhead related to setting up the + calculation. + The practical significance of this overhead is that even though the actual + calculation of the ufunc is very fast, you will be able to write array + and type-specific code that will work faster for small arrays than the + ufunc. + In particular, using ufuncs to perform many calculations on 0-d arrays + will be slower than other Python-based solutions (the silently-imported + scalarmath module exists precisely to give array scalars the look-and-feel + of ufunc-based calculations with significantly reduced overhead). + +\end_layout + +\begin_layout Standard +When a ufunc is called, many things must be done. + The information collected from these setup operations is stored in a loop-objec +t. + This loop object is a C-structure (that could become a Python object but + is not initialized as such because it is only used internally). + This loop object has the layout needed to be used with PyArray_Broadcast + so that the broadcasting can be handled in the same way as it is handled + in other sections of code. + +\end_layout + +\begin_layout Standard +The first thing done is to look-up in the thread-specific global dictionary + the current values for the buffer-size, the error mask, and the associated + error object. + The state of the error mask controls what happens when an error-condiction + is found. + It should be noted that checking of the hardware error flags is only performed + after each 1-d loop is executed. + This means that if the input and output arrays are contiguous and of the + correct type so that a single 1-d loop is performed, then the flags may + not be checked until all elements of the array have been calcluated. + Looking up these values in a thread-specific dictionary takes time which + is easily ignored for all but very small arrays. + +\end_layout + +\begin_layout Standard +After checking, the thread-specific global variables, the inputs are evaluated + to determine how the ufunc should proceed and the input and output arrays + are constructed if necessary. + Any inputs which are not arrays are converted to arrays (using context + if necessary). + Which of the inputs are scalars (and therefore converted to 0-d arrays) + is noted. + +\end_layout + +\begin_layout Standard +Next, an appropriate 1-d loop is selected from the 1-d loops available to + the ufunc based on the input array types. + This 1-d loop is selected by trying to match the signature of the data-types + of the inputs against the available signatures. + The signatures corresponding to built-in types are stored in the types + member of the ufunc structure. + The signatures corresponding to user-defined types are stored in a linked-list + of function-information with the head element stored as a +\family typewriter +CObject +\family default + in the userloops dictionary keyed by the data-type number (the first user-defin +ed type in the argument list is used as the key). + The signatures are searched until a signature is found to which the input + arrays can all be cast safely (ignoring any scalar arguments which are + not allowed to determine the type of the result). + The implication of this search procedure is that +\begin_inset Quotes eld +\end_inset + +lesser types +\begin_inset Quotes erd +\end_inset + + should be placed below +\begin_inset Quotes eld +\end_inset + +larger types +\begin_inset Quotes erd +\end_inset + + when the signatures are stored. + If no 1-d loop is found, then an error is reported. + Otherwise, the argument_list is updated with the stored signature --- in + case casting is necessary and to fix the output types assumed by the 1-d + loop. +\end_layout + +\begin_layout Standard +If the ufunc has 2 inputs and 1 output and the second input is an Object + array then a special-case check is performed so that NotImplemented is + returned if the second input is not an ndarray, has the __array_priority__ + attribute, and has an __r<op>__ special method. + In this way, Python is signaled to give the other object a chance to complete + the operation instead of using generic object-array calculations. + This allows (for example) sparse matrices to override the multiplication + operator 1-d loop. + +\end_layout + +\begin_layout Standard +For input arrays that are smaller than the specified buffer size, copies + are made of all non-contiguous, mis-aligned, or out-of-byteorder arrays + to ensure that for small arrays, a single-loop is used. + Then, array iterators are created for all the input arrays and the resulting + collection of iterators is broadcast to a single shape. + +\end_layout + +\begin_layout Standard +The output arguments (if any) are then processed and any missing return + arrays are constructed. + If any provided output array doesn't have the correct type (or is mis-aligned) + and is smaller than the buffer size, then a new output array is constructed + with the special UPDATEIFCOPY flag set so that when it is DECREF'd on completio +n of the function, it's contents will be copied back into the output array. + Iterators for the output arguments are then processed. + +\end_layout + +\begin_layout Standard +Finally, the decision is made about how to execute the looping mechanism + to ensure that all elements of the input arrays are combined to produce + the output arrays of the correct type. + The options for loop execution are one-loop (for contiguous, aligned, and + correct data-type), strided-loop (for non-contiguous but still aligned + and correct data-type), and a buffered loop (for mis-aligned or incorrect + data-type situations). + Depending on which execution method is called for, the loop is then setup + and computed. + +\end_layout + +\begin_layout Subsection +Function call +\end_layout + +\begin_layout Standard +This section describes how the basic universal function computation loop + is setup and executed for each of the three different kinds of execution + possibilities. + If NPY_ALLOW_THREADS is defined during compilation, then the Python Global + Interpreter Lock (GIL) is released prior to calling all of these loops + (as long as they don't involve object arrays). + It is re-acquired if necessary to handle error conditions. + The hardware error flags are checked only after the 1-d loop is calcluated. + +\end_layout + +\begin_layout Subsubsection +One Loop +\end_layout + +\begin_layout Standard +This is the simplest case of all. + The ufunc is executed by calling the underlying 1-d loop exactly once. + This is possible only when we have aligned data of the correct type (including + byte-order) for both input and output and all arrays have uniform strides + (either contiguous, 0-d, or 1-d). + In this case, the 1-d computational loop is called once to compute the + calculation for the entire array. + Note that the hardware error flags are only checked after the entire calculatio +n is complete. + +\end_layout + +\begin_layout Subsubsection +Strided Loop +\end_layout + +\begin_layout Standard +When the input and output arrays are aligned and of the correct type, but + the striding is not uniform (non-contiguous and 2-d or larger), then a + second looping structure is employed for the calculation. + This approach converts all of the iterators for the input and output arguments + to iterate over all but the largest dimension. + The inner loop is then handled by the underlying 1-d computational loop. + The outer loop is a standard iterator loop on the converted iterators. + The hardware error flags are checked after each 1-d loop is completed. + +\end_layout + +\begin_layout Subsubsection +Buffered Loop +\end_layout + +\begin_layout Standard +This is the code that handles the situation whenever the input and/or output + arrays are either misaligned or of the wrong data-type (including being + byte-swapped) from what the underlying 1-d loop expects. + The arrays are also assumed to be non-contiguous. + The code works very much like the strided loop except for the inner 1-d + loop is modified so that pre-processing is performed on the inputs and + post-processing is performed on the outputs in bufsize chunks (where bufsize + is a user-settable parameter). + The underlying 1-d computational loop is called on data that is copied + over (if it needs to be). + The setup code and the loop code is considerably more complicated in this + case because it has to handle: +\end_layout + +\begin_layout Itemize +memory allocation of the temporary buffers +\end_layout + +\begin_layout Itemize +deciding whether or not to use buffers on the input and output data (mis-aligned + and/or wrong data-type) +\end_layout + +\begin_layout Itemize +copying and possibly casting data for any inputs or outputs for which buffers + are necessary. +\end_layout + +\begin_layout Itemize +special-casing Object arrays so that reference counts are properly handled + when copies and/or casts are necessary. + +\end_layout + +\begin_layout Itemize +breaking up the inner 1-d loop into bufsize chunks (with a possible remainder). + +\end_layout + +\begin_layout Standard +Again, the hardware error flags are checked at the end of each 1-d loop. +\end_layout + +\begin_layout Subsection +Final output manipulation +\end_layout + +\begin_layout Standard +Ufuncs allow other array-like classes to be passed seamlessly through the + interface in that inputs of a particular class will induce the outputs + to be of that same class. + The mechanism by which this works is the following. + If any of the inputs are not ndarrays and define the +\series bold +__array_wrap__ +\series default + method, then the class with the largest +\series bold +__array_priority__ +\series default + attribute determines the type of all the outputs (with the exception of + any output arrays passed in). + The +\series bold +__array_wrap__ +\series default + method of the input array will be called with the ndarray being returned + from the ufunc as it's input. + There are two calling styles of the +\series bold +__array_wrap__ +\series default + function supported. + The first takes the ndarray as the first argument and a tuple of +\begin_inset Quotes eld +\end_inset + +context +\begin_inset Quotes erd +\end_inset + + as the second argument. + The context is (ufunc, arguments, output argument number). + This is the first call tried. + If a TypeError occurs, then the function is called with just the ndarray + as the first argument. + +\end_layout + +\begin_layout Subsection +Methods +\end_layout + +\begin_layout Standard +Their are three methods of ufuncs that require calculation similar to the + general-purpose ufuncs. + These are reduce, accumulate, and reduceat. + Each of these methods requires a setup command followed by a loop. + There are four loop styles possible for the methods corresponding to no-element +s, one-element, strided-loop, and buffered-loop. + These are the same basic loop styles as implemented for the general purpose + function call except for the no-element and one-element cases which are + special-cases occurring when the input array objects have 0 and 1 elements + respectively. + +\end_layout + +\begin_layout Subsubsection +Setup +\end_layout + +\begin_layout Standard +The setup function for all three methods is +\family typewriter +construct_reduce +\family default +. + This function creates a reducing loop object and fills it with parameters + needed to complete the loop. + All of the methods only work on ufuncs that take 2-inputs and return 1 + output. + Therefore, the underlying 1-d loop is selected assuming a signature of + [ +\family typewriter +otype +\family default +, +\family typewriter +otype +\family default +, +\family typewriter +otype +\family default +] where +\family typewriter +otype +\family default + is the requested reduction data-type. + The buffer size and error handling is then retrieved from (per-thread) + global storage. + For small arrays that are mis-aligned or have incorrect data-type, a copy + is made so that the un-buffered section of code is used. + Then, the looping strategy is selected. + If there is 1 element or 0 elements in the array, then a simple looping + method is selected. + If the array is not mis-aligned and has the correct data-type, then strided + looping is selected. + Otherwise, buffered looping must be performed. + Looping parameters are then established, and the return array is constructed. + The output array is of a different shape depending on whether the method + is reduce, accumulate, or reduceat. + If an output array is already provided, then it's shape is checked. + If the output array is not C-contiguous, aligned, and of the correct data + type, then a temporary copy is made with the UPDATEIFCOPY flag set. + In this way, the methods will be able to work with a well-behaved output + array but the result will be copied back into the true output array when + the method computation is complete. + Finally, iterators are set up to loop over the correct axis (depending + on the value of axis provided to the method) and the setup routine returns + to the actual computation routine. + +\end_layout + +\begin_layout Subsubsection +Reduce +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "ufunc!methods!reduce" + +\end_inset + +All of the ufunc methods use the same underlying 1-d computational loops + with input and output arguments adjusted so that the appropriate reduction + takes place. + For example, the key to the functioning of reduce is that the 1-d loop + is called with the output and the second input pointing to the same position + in memory and both having a step-size of 0. + The first input is pointing to the input array with a step-size given by + the appropriate stride for the selected axis. + In this way, the operation performed is +\begin_inset Formula \begin{eqnarray*} +o & = & i[0]\\ +o & = & i[k]\textrm{ <op> }o\quad k=1\ldots N\end{eqnarray*} + +\end_inset + + where +\begin_inset Formula $N+1$ +\end_inset + + is the number of elements in the input, +\begin_inset Formula $i$ +\end_inset + +, +\begin_inset Formula $o$ +\end_inset + + is the output, and +\begin_inset Formula $i[k]$ +\end_inset + + is the +\begin_inset Formula $k^{\textrm{th}}$ +\end_inset + + element of +\begin_inset Formula $i$ +\end_inset + + along the selected axis. + This basic operations is repeated for arrays with greater than 1 dimension + so that the reduction takes place for every 1-d sub-array along the selected + axis. + An iterator with the selected dimension removed handles this looping. + +\end_layout + +\begin_layout Standard +For buffered loops, care must be taken to copy and cast data before the + loop function is called because the underlying loop expects aligned data + of the correct data-type (including byte-order). + The buffered loop must handle this copying and casting prior to calling + the loop function on chunks no greater than the user-specified bufsize. + +\end_layout + +\begin_layout Subsubsection +Accumulate +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "ufunc!methods!accumulate" + +\end_inset + +The accumulate function is very similar to the reduce function in that the + output and the second input both point to the output. + The difference is that the second input points to memory one stride behind + the current output pointer. + Thus, the operation performed is +\end_layout + +\begin_layout Standard +\begin_inset Formula \begin{eqnarray*} +o[0] & = & i[0]\\ +o[k] & = & i[k]\textrm{ <op> }o[k-1]\quad k=1\ldots N.\end{eqnarray*} + +\end_inset + + The output has the same shape as the input and each 1-d loop operates over + +\begin_inset Formula $N$ +\end_inset + + elements when the shape in the selected axis is +\begin_inset Formula $N+1$ +\end_inset + +. + Again, buffered loops take care to copy and cast the data before calling + the underlying 1-d computational loop. + +\end_layout + +\begin_layout Subsubsection +Reduceat +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "ufunc!methods!reduceat" + +\end_inset + +The reduceat function is a generalization of both the reduce and accumulate + functions. + It implements a reduce over ranges of the input array specified by indices. + The extra indices argument is checked to be sure that every input is not + too large for the input array along the selected dimension before the loop + calculations take place. + The loop implementation is handled using code that is very similar to the + reduce code repeated as many times as there are elements in the indices + input. + In particular: the first input pointer passed to the underlying 1-d computation +al loop points to the input array at the correct location indicated by the + index array. + In addition, the output pointer and the second input pointer passed to + the underlying 1-d loop point to the same position in memory. + The size of the 1-d computational loop is fixed to be the difference between + the current index and the next index (when the current index is the last + index, then the next index is assumed to be the length of the array along + the selected dimension). + In this way, the 1-d loop will implement a reduce over the specified indices. + +\end_layout + +\begin_layout Standard +Mis-aligned or a loop data-type that does not match the input and/or output + data-type is handled using buffered code where-in data is copied to a temporary + buffer and cast to the correct data-type if necessary prior to calling + the underlying 1-d function. + The temporary buffers are created in (element) sizes no bigger than the + user settable buffer-size value. + Thus, the loop must be flexible enough to call the underlying 1-d computational + loop enough times to complete the total calculation in chunks no bigger + than the buffer-size. + +\begin_inset LatexCommand index +name "ufunc|)" + +\end_inset + + +\end_layout + +\end_body +\end_document diff --git a/numpy/doc/numpybook/comparison/ctypes/code.c b/numpy/doc/numpybook/comparison/ctypes/code.c new file mode 100644 index 000000000..0927a7ed3 --- /dev/null +++ b/numpy/doc/numpybook/comparison/ctypes/code.c @@ -0,0 +1,60 @@ + +typedef struct {double real; double imag;} cdouble; +typedef struct {double real; double imag;} cfloat; + +/* Add arrays of contiguous data */ +void zadd(cdouble *a, cdouble *b, cdouble *c, long n) +{ + while (n--) { + c->real = a->real + b->real; + c->imag = a->imag + b->imag; + a++; b++; c++; + } +} + +void cadd(cfloat *a, cfloat *b, cfloat *c, long n) +{ + while (n--) { + c->real = a->real + b->real; + c->imag = a->imag + b->imag; + a++; b++; c++; + } +} + +void dadd(double *a, double *b, double *c, long n) +{ + while (n--) { + *c++ = *a++ + *b++; + } +} + +void sadd(float *a, float *b, float *c, long n) +{ + while (n--) { + *c++ = *a++ + *b++; + } +} + +/* Assumes b is contiguous and + a has strides that are multiples of sizeof(double) +*/ +void dfilter2d(double *a, double *b, int *astrides, int *dims) +{ + int i, j, M, N, S0, S1; + int r, c, rm1, rp1, cp1, cm1; + + M = dims[0]; N = dims[1]; + S0 = astrides[0]/sizeof(double); + S1=astrides[1]/sizeof(double); + for (i=1; i<M-1; i++) { + r = i*S0; rp1 = r+S0; rm1 = r-S0; + for (j=1; j<N-1; j++) { + c = j*S1; cp1 = j+S1; cm1 = j-S1; + b[i*N+j] = a[r+c] + \ + (a[rp1+c] + a[rm1+c] + \ + a[r+cp1] + a[r+cm1])*0.5 + \ + (a[rp1+cp1] + a[rp1+cm1] + \ + a[rm1+cp1] + a[rm1+cp1])*0.25; + } + } +} diff --git a/numpy/doc/numpybook/comparison/ctypes/filter.py b/numpy/doc/numpybook/comparison/ctypes/filter.py new file mode 100644 index 000000000..e92aa5eab --- /dev/null +++ b/numpy/doc/numpybook/comparison/ctypes/filter.py @@ -0,0 +1,26 @@ +__all__ = ['filter2d'] + +import numpy as N +import os +import ctypes + +_path = os.path.dirname('__file__') +lib = N.ctypeslib.load_library('code', _path) + +lib.dfilter2d.restype = None +lib.dfilter2d.argtypes = [N.ctypeslib.ndpointer(float, ndim=2, + flags='aligned'), + N.ctypeslib.ndpointer(float, ndim=2, + flags='aligned, contiguous,'\ + 'writeable'), + ctypes.POINTER(N.ctypeslib.c_intp), + ctypes.POINTER(N.ctypeslib.c_intp)] + +def filter2d(a): + a = N.require(a, float, ['ALIGNED']) + b = N.zeros_like(a) + lib.dfilter2d(a, b, a.ctypes.strides, a.ctypes.shape) + return b + + + diff --git a/numpy/doc/numpybook/comparison/ctypes/interface.py b/numpy/doc/numpybook/comparison/ctypes/interface.py new file mode 100644 index 000000000..06c12aef3 --- /dev/null +++ b/numpy/doc/numpybook/comparison/ctypes/interface.py @@ -0,0 +1,60 @@ +__all__ = ['add', 'filter2d'] + +import numpy as N +import os +import ctypes + +_path = os.path.dirname('__file__') +lib = N.ctypeslib.load_library('code', _path) +_typedict = {'zadd' : complex, + 'sadd' : N.single, + 'cadd' : N.csingle, + 'dadd' : float} +for name in _typedict.keys(): + val = getattr(lib, name) + val.restype = None + _type = _typedict[name] + val.argtypes = [N.ctypeslib.ndpointer(_type, flags='aligned, contiguous'), + N.ctypeslib.ndpointer(_type, flags='aligned, contiguous'), + N.ctypeslib.ndpointer(_type, flags='aligned, contiguous,'\ + 'writeable'), + N.ctypeslib.c_intp] + +lib.dfilter2d.restype=None +lib.dfilter2d.argtypes = [N.ctypeslib.ndpointer(float, ndim=2, + flags='aligned'), + N.ctypeslib.ndpointer(float, ndim=2, + flags='aligned, contiguous,'\ + 'writeable'), + ctypes.POINTER(N.ctypeslib.c_intp), + ctypes.POINTER(N.ctypeslib.c_intp)] + +def select(dtype): + if dtype.char in ['?bBhHf']: + return lib.sadd, N.single + elif dtype.char in ['F']: + return lib.cadd, N.csingle + elif dtype.char in ['DG']: + return lib.zadd, complex + else: + return lib.dadd, float + return func, ntype + +def add(a, b): + requires = ['CONTIGUOUS', 'ALIGNED'] + a = N.asanyarray(a) + func, dtype = select(a.dtype) + a = N.require(a, dtype, requires) + b = N.require(b, dtype, requires) + c = N.empty_like(a) + func(a,b,c,a.size) + return c + +def filter2d(a): + a = N.require(a, float, ['ALIGNED']) + b = N.zeros_like(a) + lib.dfilter2d(a, b, a.ctypes.strides, a.ctypes.shape) + return b + + + diff --git a/numpy/doc/numpybook/comparison/ctypes/newfile.dat b/numpy/doc/numpybook/comparison/ctypes/newfile.dat Binary files differnew file mode 100644 index 000000000..d3899c294 --- /dev/null +++ b/numpy/doc/numpybook/comparison/ctypes/newfile.dat diff --git a/numpy/doc/numpybook/comparison/ctypes/timeme b/numpy/doc/numpybook/comparison/ctypes/timeme new file mode 100755 index 000000000..2f7cd297f --- /dev/null +++ b/numpy/doc/numpybook/comparison/ctypes/timeme @@ -0,0 +1,2 @@ +python2.4 -m timeit -s "import numpy as N; a=N.random.rand(100,200); import filter" "b = filter.filter(a)" + diff --git a/numpy/doc/numpybook/comparison/f2py/add.f b/numpy/doc/numpybook/comparison/f2py/add.f new file mode 100644 index 000000000..26e45da34 --- /dev/null +++ b/numpy/doc/numpybook/comparison/f2py/add.f @@ -0,0 +1,45 @@ +C + SUBROUTINE ZADD(A,B,C,N) +C + DOUBLE COMPLEX A(*) + DOUBLE COMPLEX B(*) + DOUBLE COMPLEX C(*) + INTEGER N + DO 20 J = 1, N + C(J) = A(J) + B(J) + 20 CONTINUE + END + + SUBROUTINE CADD(A,B,C,N) +C + COMPLEX A(*) + COMPLEX B(*) + COMPLEX C(*) + INTEGER N + DO 20 J = 1, N + C(J) = A(J) + B(J) + 20 CONTINUE + END + + SUBROUTINE DADD(A,B,C,N) +C + DOUBLE PRECISION A(*) + DOUBLE PRECISION B(*) + DOUBLE PRECISION C(*) + INTEGER N + DO 20 J = 1, N + C(J) = A(J) + B(J) + 20 CONTINUE + END + + SUBROUTINE SADD(A,B,C,N) +C + REAL A(*) + REAL B(*) + REAL C(*) + INTEGER N + DO 20 J = 1, N + C(J) = A(J) + B(J) + 20 CONTINUE + END + diff --git a/numpy/doc/numpybook/comparison/f2py/add.pyf b/numpy/doc/numpybook/comparison/f2py/add.pyf new file mode 100644 index 000000000..1a9ac2c9e --- /dev/null +++ b/numpy/doc/numpybook/comparison/f2py/add.pyf @@ -0,0 +1,34 @@ +! -*- f90 -*- +! Note: the context of this file is case sensitive. + +python module add ! in + interface ! in :add + subroutine zadd(a,b,c,n) ! in :add:add.f + double complex dimension(n) :: a + double complex dimension(n) :: b + double complex intent(out), dimension(n) :: c + integer intent(hide), depend(a) :: n = len(a) + end subroutine zadd + subroutine cadd(a,b,c,n) ! in :add:add.f + complex dimension(*) :: a + complex dimension(*) :: b + complex dimension(*) :: c + integer :: n + end subroutine cadd + subroutine dadd(a,b,c,n) ! in :add:add.f + double precision dimension(*) :: a + double precision dimension(*) :: b + double precision dimension(*) :: c + integer :: n + end subroutine dadd + subroutine sadd(a,b,c,n) ! in :add:add.f + real dimension(*) :: a + real dimension(*) :: b + real dimension(*) :: c + integer :: n + end subroutine sadd + end interface +end python module add + +! This file was auto-generated with f2py (version:2_2694). +! See http://cens.ioc.ee/projects/f2py2e/ diff --git a/numpy/doc/numpybook/comparison/f2py/filter.f b/numpy/doc/numpybook/comparison/f2py/filter.f new file mode 100644 index 000000000..a817a866f --- /dev/null +++ b/numpy/doc/numpybook/comparison/f2py/filter.f @@ -0,0 +1,20 @@ + + SUBROUTINE DFILTER2D(A,B,M,N) +C + DOUBLE PRECISION A(M,N) + DOUBLE PRECISION B(M,N) + INTEGER N, M +CF2PY INTENT(OUT) :: B +CF2PY INTENT(HIDE) :: N +CF2PY INTENT(HIDE) :: M + DO 20 I = 2,M-1 + DO 40 J=2,N-1 + B(I,J) = A(I,J) + + $ (A(I-1,J)+A(I+1,J) + + $ A(I,J-1)+A(I,J+1) )*0.5D0 + + $ (A(I-1,J-1) + A(I-1,J+1) + + $ A(I+1,J-1) + A(I+1,J+1))*0.25D0 + 40 CONTINUE + 20 CONTINUE + END + diff --git a/numpy/doc/numpybook/comparison/f2py/filter.pyf b/numpy/doc/numpybook/comparison/f2py/filter.pyf new file mode 100644 index 000000000..1e4bc37f4 --- /dev/null +++ b/numpy/doc/numpybook/comparison/f2py/filter.pyf @@ -0,0 +1,16 @@ +! -*- f90 -*- +! Note: the context of this file is case sensitive. + +python module filter ! in + interface ! in :filter + subroutine dfilter2d(a,b,m,n) ! in :filter:filter.f + double precision dimension(m,n) :: a + double precision dimension(m,n),intent(out),depend(m,n) :: b + integer optional,intent(hide),check(shape(a,0)==m),depend(a) :: m=shape(a,0) + integer optional,intent(hide),check(shape(a,1)==n),depend(a) :: n=shape(a,1) + end subroutine dfilter2d + end interface +end python module filter + +! This file was auto-generated with f2py (version:2_3032). +! See http://cens.ioc.ee/projects/f2py2e/ diff --git a/numpy/doc/numpybook/comparison/f2py/filtermodule.c b/numpy/doc/numpybook/comparison/f2py/filtermodule.c new file mode 100644 index 000000000..8339ad4b9 --- /dev/null +++ b/numpy/doc/numpybook/comparison/f2py/filtermodule.c @@ -0,0 +1,293 @@ +/* File: filtermodule.c + * This file is auto-generated with f2py (version:2_3032). + * f2py is a Fortran to Python Interface Generator (FPIG), Second Edition, + * written by Pearu Peterson <pearu@cens.ioc.ee>. + * See http://cens.ioc.ee/projects/f2py2e/ + * Generation date: Thu Aug 17 12:03:28 2006 + * $Revision:$ + * $Date:$ + * Do not edit this file directly unless you know what you are doing!!! + */ +#ifdef __cplusplus +extern "C" { +#endif + +/*********************** See f2py2e/cfuncs.py: includes ***********************/ +#include "Python.h" +#include "fortranobject.h" +#include <math.h> + +/**************** See f2py2e/rules.py: mod_rules['modulebody'] ****************/ +static PyObject *filter_error; +static PyObject *filter_module; + +/*********************** See f2py2e/cfuncs.py: typedefs ***********************/ +/*need_typedefs*/ + +/****************** See f2py2e/cfuncs.py: typedefs_generated ******************/ +/*need_typedefs_generated*/ + +/********************** See f2py2e/cfuncs.py: cppmacros **********************/ +#if defined(PREPEND_FORTRAN) +#if defined(NO_APPEND_FORTRAN) +#if defined(UPPERCASE_FORTRAN) +#define F_FUNC(f,F) _##F +#else +#define F_FUNC(f,F) _##f +#endif +#else +#if defined(UPPERCASE_FORTRAN) +#define F_FUNC(f,F) _##F##_ +#else +#define F_FUNC(f,F) _##f##_ +#endif +#endif +#else +#if defined(NO_APPEND_FORTRAN) +#if defined(UPPERCASE_FORTRAN) +#define F_FUNC(f,F) F +#else +#define F_FUNC(f,F) f +#endif +#else +#if defined(UPPERCASE_FORTRAN) +#define F_FUNC(f,F) F##_ +#else +#define F_FUNC(f,F) f##_ +#endif +#endif +#endif +#if defined(UNDERSCORE_G77) +#define F_FUNC_US(f,F) F_FUNC(f##_,F##_) +#else +#define F_FUNC_US(f,F) F_FUNC(f,F) +#endif + +#define rank(var) var ## _Rank +#define shape(var,dim) var ## _Dims[dim] +#define old_rank(var) (((PyArrayObject *)(capi_ ## var ## _tmp))->nd) +#define old_shape(var,dim) (((PyArrayObject *)(capi_ ## var ## _tmp))->dimensions[dim]) +#define fshape(var,dim) shape(var,rank(var)-dim-1) +#define len(var) shape(var,0) +#define flen(var) fshape(var,0) +#define size(var) PyArray_SIZE((PyArrayObject *)(capi_ ## var ## _tmp)) +/* #define index(i) capi_i ## i */ +#define slen(var) capi_ ## var ## _len + +#define CHECKSCALAR(check,tcheck,name,show,var)\ + if (!(check)) {\ + PyErr_SetString(filter_error,"("tcheck") failed for "name);\ + fprintf(stderr,show"\n",var);\ + /*goto capi_fail;*/\ + } else +#ifdef DEBUGCFUNCS +#define CFUNCSMESS(mess) fprintf(stderr,"debug-capi:"mess); +#define CFUNCSMESSPY(mess,obj) CFUNCSMESS(mess) \ + PyObject_Print((PyObject *)obj,stderr,Py_PRINT_RAW);\ + fprintf(stderr,"\n"); +#else +#define CFUNCSMESS(mess) +#define CFUNCSMESSPY(mess,obj) +#endif + +#ifndef MAX +#define MAX(a,b) ((a > b) ? (a) : (b)) +#endif +#ifndef MIN +#define MIN(a,b) ((a < b) ? (a) : (b)) +#endif + + +/************************ See f2py2e/cfuncs.py: cfuncs ************************/ +/*need_cfuncs*/ + +/********************* See f2py2e/cfuncs.py: userincludes *********************/ +/*need_userincludes*/ + +/********************* See f2py2e/capi_rules.py: usercode *********************/ + + +/* See f2py2e/rules.py */ +extern void F_FUNC(dfilter2d,DFILTER2D)(double*,double*,int*,int*); +/*eof externroutines*/ + +/******************** See f2py2e/capi_rules.py: usercode1 ********************/ + + +/******************* See f2py2e/cb_rules.py: buildcallback *******************/ +/*need_callbacks*/ + +/*********************** See f2py2e/rules.py: buildapi ***********************/ + +/********************************* dfilter2d *********************************/ +static char doc_f2py_rout_filter_dfilter2d[] = "\ +Function signature:\n\ + b = dfilter2d(a)\n\ +Required arguments:\n" +" a : input rank-2 array('d') with bounds (m,n)\n" +"Return objects:\n" +" b : rank-2 array('d') with bounds (m,n)"; +/* extern void F_FUNC(dfilter2d,DFILTER2D)(double*,double*,int*,int*); */ +static PyObject *f2py_rout_filter_dfilter2d(const PyObject *capi_self, + PyObject *capi_args, + PyObject *capi_keywds, + void (*f2py_func)(double*,double*,int*,int*)) { + PyObject * volatile capi_buildvalue = NULL; + volatile int f2py_success = 1; +/*decl*/ + + double *a = NULL; + npy_intp a_Dims[2] = {-1, -1}; + const int a_Rank = 2; + PyArrayObject *capi_a_tmp = NULL; + int capi_a_intent = 0; + PyObject *a_capi = Py_None; + double *b = NULL; + npy_intp b_Dims[2] = {-1, -1}; + const int b_Rank = 2; + PyArrayObject *capi_b_tmp = NULL; + int capi_b_intent = 0; + int m = 0; + int n = 0; + static char *capi_kwlist[] = {"a",NULL}; + +/*routdebugenter*/ +#ifdef F2PY_REPORT_ATEXIT +f2py_start_clock(); +#endif + if (!PyArg_ParseTupleAndKeywords(capi_args,capi_keywds,\ + "O|:filter.dfilter2d",\ + capi_kwlist,&a_capi)) + return NULL; +/*frompyobj*/ + /* Processing variable a */ + ; + capi_a_intent |= F2PY_INTENT_IN; + capi_a_tmp = array_from_pyobj(PyArray_DOUBLE,a_Dims,a_Rank,capi_a_intent,a_capi); + if (capi_a_tmp == NULL) { + if (!PyErr_Occurred()) + PyErr_SetString(filter_error,"failed in converting 1st argument `a' of filter.dfilter2d to C/Fortran array" ); + } else { + a = (double *)(capi_a_tmp->data); + + /* Processing variable m */ + m = shape(a,0); + CHECKSCALAR(shape(a,0)==m,"shape(a,0)==m","hidden m","dfilter2d:m=%d",m) { + /* Processing variable n */ + n = shape(a,1); + CHECKSCALAR(shape(a,1)==n,"shape(a,1)==n","hidden n","dfilter2d:n=%d",n) { + /* Processing variable b */ + b_Dims[0]=m,b_Dims[1]=n; + capi_b_intent |= F2PY_INTENT_OUT|F2PY_INTENT_HIDE; + capi_b_tmp = array_from_pyobj(PyArray_DOUBLE,b_Dims,b_Rank,capi_b_intent,Py_None); + if (capi_b_tmp == NULL) { + if (!PyErr_Occurred()) + PyErr_SetString(filter_error,"failed in converting hidden `b' of filter.dfilter2d to C/Fortran array" ); + } else { + b = (double *)(capi_b_tmp->data); + +/*end of frompyobj*/ +#ifdef F2PY_REPORT_ATEXIT +f2py_start_call_clock(); +#endif +/*callfortranroutine*/ + (*f2py_func)(a,b,&m,&n); +if (PyErr_Occurred()) + f2py_success = 0; +#ifdef F2PY_REPORT_ATEXIT +f2py_stop_call_clock(); +#endif +/*end of callfortranroutine*/ + if (f2py_success) { +/*pyobjfrom*/ +/*end of pyobjfrom*/ + CFUNCSMESS("Building return value.\n"); + capi_buildvalue = Py_BuildValue("N",capi_b_tmp); +/*closepyobjfrom*/ +/*end of closepyobjfrom*/ + } /*if (f2py_success) after callfortranroutine*/ +/*cleanupfrompyobj*/ + } /*if (capi_b_tmp == NULL) ... else of b*/ + /* End of cleaning variable b */ + } /*CHECKSCALAR(shape(a,1)==n)*/ + /* End of cleaning variable n */ + } /*CHECKSCALAR(shape(a,0)==m)*/ + /* End of cleaning variable m */ + if((PyObject *)capi_a_tmp!=a_capi) { + Py_XDECREF(capi_a_tmp); } + } /*if (capi_a_tmp == NULL) ... else of a*/ + /* End of cleaning variable a */ +/*end of cleanupfrompyobj*/ + if (capi_buildvalue == NULL) { +/*routdebugfailure*/ + } else { +/*routdebugleave*/ + } + CFUNCSMESS("Freeing memory.\n"); +/*freemem*/ +#ifdef F2PY_REPORT_ATEXIT +f2py_stop_clock(); +#endif + return capi_buildvalue; +} +/****************************** end of dfilter2d ******************************/ +/*eof body*/ + +/******************* See f2py2e/f90mod_rules.py: buildhooks *******************/ +/*need_f90modhooks*/ + +/************** See f2py2e/rules.py: module_rules['modulebody'] **************/ + +/******************* See f2py2e/common_rules.py: buildhooks *******************/ + +/*need_commonhooks*/ + +/**************************** See f2py2e/rules.py ****************************/ + +static FortranDataDef f2py_routine_defs[] = { + {"dfilter2d",-1,{{-1}},0,(char *)F_FUNC(dfilter2d,DFILTER2D),(f2py_init_func)f2py_rout_filter_dfilter2d,doc_f2py_rout_filter_dfilter2d}, + +/*eof routine_defs*/ + {NULL} +}; + +static PyMethodDef f2py_module_methods[] = { + + {NULL,NULL} +}; + +PyMODINIT_FUNC initfilter(void) { + int i; + PyObject *m,*d, *s; + m = filter_module = Py_InitModule("filter", f2py_module_methods); + PyFortran_Type.ob_type = &PyType_Type; + import_array(); + if (PyErr_Occurred()) + Py_FatalError("can't initialize module filter (failed to import numpy)"); + d = PyModule_GetDict(m); + s = PyString_FromString("$Revision: $"); + PyDict_SetItemString(d, "__version__", s); + s = PyString_FromString("This module 'filter' is auto-generated with f2py (version:2_3032).\nFunctions:\n" +" b = dfilter2d(a)\n" +"."); + PyDict_SetItemString(d, "__doc__", s); + filter_error = PyErr_NewException ("filter.error", NULL, NULL); + Py_DECREF(s); + for(i=0;f2py_routine_defs[i].name!=NULL;i++) + PyDict_SetItemString(d, f2py_routine_defs[i].name,PyFortranObject_NewAsAttr(&f2py_routine_defs[i])); + +/*eof initf2pywraphooks*/ +/*eof initf90modhooks*/ + +/*eof initcommonhooks*/ + + +#ifdef F2PY_REPORT_ATEXIT + if (! PyErr_Occurred()) + on_exit(f2py_report_on_exit,(void*)"filter"); +#endif + +} +#ifdef __cplusplus +} +#endif diff --git a/numpy/doc/numpybook/comparison/f2py/timeme b/numpy/doc/numpybook/comparison/f2py/timeme new file mode 100755 index 000000000..d6ac5741e --- /dev/null +++ b/numpy/doc/numpybook/comparison/f2py/timeme @@ -0,0 +1 @@ +python2.4 -m timeit -s "import numpy as N; a=N.random.rand(100,200); import filter" "b=N.zeros_like(a); none = filter.DFILTER2D(a,b)" diff --git a/numpy/doc/numpybook/comparison/pyrex/add.c b/numpy/doc/numpybook/comparison/pyrex/add.c new file mode 100644 index 000000000..d5e3bd725 --- /dev/null +++ b/numpy/doc/numpybook/comparison/pyrex/add.c @@ -0,0 +1,560 @@ +/* Generated by Pyrex 0.9.4.1 on Thu Aug 17 02:11:41 2006 */ + +#include "Python.h" +#include "structmember.h" +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifdef __cplusplus +#define __PYX_EXTERN_C extern "C" +#else +#define __PYX_EXTERN_C extern +#endif +__PYX_EXTERN_C double pow(double, double); +#include "numpy/arrayobject.h" + + +typedef struct {PyObject **p; char *s;} __Pyx_InternTabEntry; /*proto*/ +typedef struct {PyObject **p; char *s; long n;} __Pyx_StringTabEntry; /*proto*/ +static PyObject *__Pyx_UnpackItem(PyObject *, int); /*proto*/ +static int __Pyx_EndUnpack(PyObject *, int); /*proto*/ +static int __Pyx_PrintItem(PyObject *); /*proto*/ +static int __Pyx_PrintNewline(void); /*proto*/ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ +static void __Pyx_ReRaise(void); /*proto*/ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/ +static PyObject *__Pyx_GetExcValue(void); /*proto*/ +static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name); /*proto*/ +static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ +static int __Pyx_GetStarArgs(PyObject **args, PyObject **kwds, char *kwd_list[], int nargs, PyObject **args2, PyObject **kwds2); /*proto*/ +static void __Pyx_WriteUnraisable(char *name); /*proto*/ +static void __Pyx_AddTraceback(char *funcname); /*proto*/ +static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size); /*proto*/ +static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/ +static int __Pyx_GetVtable(PyObject *dict, void *vtabptr); /*proto*/ +static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, char *modname); /*proto*/ +static int __Pyx_InternStrings(__Pyx_InternTabEntry *t); /*proto*/ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ +static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ + +static PyObject *__pyx_m; +static PyObject *__pyx_b; +static int __pyx_lineno; +static char *__pyx_filename; +static char **__pyx_f; + +/* Declarations from c_numpy */ + +static PyTypeObject *__pyx_ptype_7c_numpy_dtype = 0; +static PyTypeObject *__pyx_ptype_7c_numpy_ndarray = 0; + +/* Declarations from add */ + + +/* Implementation of add */ + +static PyObject *__pyx_n_c_numpy; +static PyObject *__pyx_n_zadd; +static PyObject *__pyx_n_cadd; +static PyObject *__pyx_n_dadd; +static PyObject *__pyx_n_sadd; + +static PyObject *__pyx_f_3add_zadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_f_3add_zadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_ao = 0; + PyObject *__pyx_v_bo = 0; + PyArrayObject *__pyx_v_c; + PyArrayObject *__pyx_v_a; + PyArrayObject *__pyx_v_b; + npy_intp __pyx_v_i; + PyObject *__pyx_r; + PyObject *__pyx_1 = 0; + npy_intp __pyx_2; + static char *__pyx_argnames[] = {"ao","bo",0}; + if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_ao, &__pyx_v_bo)) return 0; + Py_INCREF(__pyx_v_ao); + Py_INCREF(__pyx_v_bo); + __pyx_v_c = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); + __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); + __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":15 */ + __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_ao,NPY_CDOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; goto __pyx_L1;} + Py_DECREF(((PyObject *)__pyx_v_a)); + __pyx_v_a = ((PyArrayObject *)__pyx_1); + __pyx_1 = 0; + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":16 */ + __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_bo,NPY_CDOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; goto __pyx_L1;} + Py_DECREF(((PyObject *)__pyx_v_b)); + __pyx_v_b = ((PyArrayObject *)__pyx_1); + __pyx_1 = 0; + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":18 */ + __pyx_1 = PyArray_SimpleNew(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;} + Py_DECREF(((PyObject *)__pyx_v_c)); + __pyx_v_c = ((PyArrayObject *)__pyx_1); + __pyx_1 = 0; + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":21 */ + __pyx_2 = (__pyx_v_a->dimensions[0]); + for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; ++__pyx_v_i) { + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":22 */ + (((npy_cdouble (*))__pyx_v_c->data)[__pyx_v_i]).real = ((((npy_cdouble (*))__pyx_v_a->data)[__pyx_v_i]).real + (((npy_cdouble (*))__pyx_v_b->data)[__pyx_v_i]).real); + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":24 */ + (((npy_cdouble (*))__pyx_v_c->data)[__pyx_v_i]).imag = ((((npy_cdouble (*))__pyx_v_a->data)[__pyx_v_i]).imag + (((npy_cdouble (*))__pyx_v_b->data)[__pyx_v_i]).imag); + __pyx_L2:; + } + __pyx_L3:; + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":26 */ + Py_INCREF(((PyObject *)__pyx_v_c)); + __pyx_r = ((PyObject *)__pyx_v_c); + goto __pyx_L0; + + __pyx_r = Py_None; Py_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1:; + Py_XDECREF(__pyx_1); + __Pyx_AddTraceback("add.zadd"); + __pyx_r = 0; + __pyx_L0:; + Py_DECREF(__pyx_v_c); + Py_DECREF(__pyx_v_a); + Py_DECREF(__pyx_v_b); + Py_DECREF(__pyx_v_ao); + Py_DECREF(__pyx_v_bo); + return __pyx_r; +} + +static PyObject *__pyx_f_3add_cadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_f_3add_cadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_ao = 0; + PyObject *__pyx_v_bo = 0; + PyArrayObject *__pyx_v_c; + PyArrayObject *__pyx_v_a; + PyArrayObject *__pyx_v_b; + npy_intp __pyx_v_i; + PyObject *__pyx_r; + PyObject *__pyx_1 = 0; + npy_intp __pyx_2; + static char *__pyx_argnames[] = {"ao","bo",0}; + if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_ao, &__pyx_v_bo)) return 0; + Py_INCREF(__pyx_v_ao); + Py_INCREF(__pyx_v_bo); + __pyx_v_c = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); + __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); + __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":32 */ + __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_ao,NPY_CFLOAT,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; goto __pyx_L1;} + Py_DECREF(((PyObject *)__pyx_v_a)); + __pyx_v_a = ((PyArrayObject *)__pyx_1); + __pyx_1 = 0; + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":33 */ + __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_bo,NPY_CFLOAT,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;} + Py_DECREF(((PyObject *)__pyx_v_b)); + __pyx_v_b = ((PyArrayObject *)__pyx_1); + __pyx_1 = 0; + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":35 */ + __pyx_1 = PyArray_SimpleNew(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; goto __pyx_L1;} + Py_DECREF(((PyObject *)__pyx_v_c)); + __pyx_v_c = ((PyArrayObject *)__pyx_1); + __pyx_1 = 0; + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":38 */ + __pyx_2 = (__pyx_v_a->dimensions[0]); + for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; ++__pyx_v_i) { + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":39 */ + (((npy_cfloat (*))__pyx_v_c->data)[__pyx_v_i]).real = ((((npy_cfloat (*))__pyx_v_a->data)[__pyx_v_i]).real + (((npy_cfloat (*))__pyx_v_b->data)[__pyx_v_i]).real); + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":41 */ + (((npy_cfloat (*))__pyx_v_c->data)[__pyx_v_i]).imag = ((((npy_cfloat (*))__pyx_v_a->data)[__pyx_v_i]).imag + (((npy_cfloat (*))__pyx_v_b->data)[__pyx_v_i]).imag); + __pyx_L2:; + } + __pyx_L3:; + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":43 */ + Py_INCREF(((PyObject *)__pyx_v_c)); + __pyx_r = ((PyObject *)__pyx_v_c); + goto __pyx_L0; + + __pyx_r = Py_None; Py_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1:; + Py_XDECREF(__pyx_1); + __Pyx_AddTraceback("add.cadd"); + __pyx_r = 0; + __pyx_L0:; + Py_DECREF(__pyx_v_c); + Py_DECREF(__pyx_v_a); + Py_DECREF(__pyx_v_b); + Py_DECREF(__pyx_v_ao); + Py_DECREF(__pyx_v_bo); + return __pyx_r; +} + +static PyObject *__pyx_f_3add_dadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_f_3add_dadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_ao = 0; + PyObject *__pyx_v_bo = 0; + PyArrayObject *__pyx_v_c; + PyArrayObject *__pyx_v_a; + PyArrayObject *__pyx_v_b; + npy_intp __pyx_v_i; + PyObject *__pyx_r; + PyObject *__pyx_1 = 0; + npy_intp __pyx_2; + static char *__pyx_argnames[] = {"ao","bo",0}; + if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_ao, &__pyx_v_bo)) return 0; + Py_INCREF(__pyx_v_ao); + Py_INCREF(__pyx_v_bo); + __pyx_v_c = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); + __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); + __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":50 */ + __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_ao,NPY_DOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; goto __pyx_L1;} + Py_DECREF(((PyObject *)__pyx_v_a)); + __pyx_v_a = ((PyArrayObject *)__pyx_1); + __pyx_1 = 0; + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":51 */ + __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_bo,NPY_DOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; goto __pyx_L1;} + Py_DECREF(((PyObject *)__pyx_v_b)); + __pyx_v_b = ((PyArrayObject *)__pyx_1); + __pyx_1 = 0; + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":53 */ + __pyx_1 = PyArray_SimpleNew(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; goto __pyx_L1;} + Py_DECREF(((PyObject *)__pyx_v_c)); + __pyx_v_c = ((PyArrayObject *)__pyx_1); + __pyx_1 = 0; + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":56 */ + __pyx_2 = (__pyx_v_a->dimensions[0]); + for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; ++__pyx_v_i) { + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":57 */ + (((double (*))__pyx_v_c->data)[__pyx_v_i]) = ((((double (*))__pyx_v_a->data)[__pyx_v_i]) + (((double (*))__pyx_v_b->data)[__pyx_v_i])); + __pyx_L2:; + } + __pyx_L3:; + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":59 */ + Py_INCREF(((PyObject *)__pyx_v_c)); + __pyx_r = ((PyObject *)__pyx_v_c); + goto __pyx_L0; + + __pyx_r = Py_None; Py_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1:; + Py_XDECREF(__pyx_1); + __Pyx_AddTraceback("add.dadd"); + __pyx_r = 0; + __pyx_L0:; + Py_DECREF(__pyx_v_c); + Py_DECREF(__pyx_v_a); + Py_DECREF(__pyx_v_b); + Py_DECREF(__pyx_v_ao); + Py_DECREF(__pyx_v_bo); + return __pyx_r; +} + +static PyObject *__pyx_f_3add_sadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_f_3add_sadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_ao = 0; + PyObject *__pyx_v_bo = 0; + PyArrayObject *__pyx_v_c; + PyArrayObject *__pyx_v_a; + PyArrayObject *__pyx_v_b; + npy_intp __pyx_v_i; + PyObject *__pyx_r; + PyObject *__pyx_1 = 0; + npy_intp __pyx_2; + static char *__pyx_argnames[] = {"ao","bo",0}; + if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_ao, &__pyx_v_bo)) return 0; + Py_INCREF(__pyx_v_ao); + Py_INCREF(__pyx_v_bo); + __pyx_v_c = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); + __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); + __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":66 */ + __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_ao,NPY_FLOAT,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; goto __pyx_L1;} + Py_DECREF(((PyObject *)__pyx_v_a)); + __pyx_v_a = ((PyArrayObject *)__pyx_1); + __pyx_1 = 0; + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":67 */ + __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_bo,NPY_FLOAT,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; goto __pyx_L1;} + Py_DECREF(((PyObject *)__pyx_v_b)); + __pyx_v_b = ((PyArrayObject *)__pyx_1); + __pyx_1 = 0; + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":69 */ + __pyx_1 = PyArray_SimpleNew(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; goto __pyx_L1;} + Py_DECREF(((PyObject *)__pyx_v_c)); + __pyx_v_c = ((PyArrayObject *)__pyx_1); + __pyx_1 = 0; + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":72 */ + __pyx_2 = (__pyx_v_a->dimensions[0]); + for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; ++__pyx_v_i) { + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":73 */ + (((float (*))__pyx_v_c->data)[__pyx_v_i]) = ((((float (*))__pyx_v_a->data)[__pyx_v_i]) + (((float (*))__pyx_v_b->data)[__pyx_v_i])); + __pyx_L2:; + } + __pyx_L3:; + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":75 */ + Py_INCREF(((PyObject *)__pyx_v_c)); + __pyx_r = ((PyObject *)__pyx_v_c); + goto __pyx_L0; + + __pyx_r = Py_None; Py_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1:; + Py_XDECREF(__pyx_1); + __Pyx_AddTraceback("add.sadd"); + __pyx_r = 0; + __pyx_L0:; + Py_DECREF(__pyx_v_c); + Py_DECREF(__pyx_v_a); + Py_DECREF(__pyx_v_b); + Py_DECREF(__pyx_v_ao); + Py_DECREF(__pyx_v_bo); + return __pyx_r; +} + +static __Pyx_InternTabEntry __pyx_intern_tab[] = { + {&__pyx_n_c_numpy, "c_numpy"}, + {&__pyx_n_cadd, "cadd"}, + {&__pyx_n_dadd, "dadd"}, + {&__pyx_n_sadd, "sadd"}, + {&__pyx_n_zadd, "zadd"}, + {0, 0} +}; + +static struct PyMethodDef __pyx_methods[] = { + {"zadd", (PyCFunction)__pyx_f_3add_zadd, METH_VARARGS|METH_KEYWORDS, 0}, + {"cadd", (PyCFunction)__pyx_f_3add_cadd, METH_VARARGS|METH_KEYWORDS, 0}, + {"dadd", (PyCFunction)__pyx_f_3add_dadd, METH_VARARGS|METH_KEYWORDS, 0}, + {"sadd", (PyCFunction)__pyx_f_3add_sadd, METH_VARARGS|METH_KEYWORDS, 0}, + {0, 0, 0, 0} +}; + +static void __pyx_init_filenames(void); /*proto*/ + +PyMODINIT_FUNC initadd(void); /*proto*/ +PyMODINIT_FUNC initadd(void) { + __pyx_init_filenames(); + __pyx_m = Py_InitModule4("add", __pyx_methods, 0, 0, PYTHON_API_VERSION); + if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; + __pyx_b = PyImport_AddModule("__builtin__"); + if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; + if (__Pyx_InternStrings(__pyx_intern_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; + __pyx_ptype_7c_numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr)); if (!__pyx_ptype_7c_numpy_dtype) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 74; goto __pyx_L1;} + __pyx_ptype_7c_numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject)); if (!__pyx_ptype_7c_numpy_ndarray) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 79; goto __pyx_L1;} + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":9 */ + import_array(); + + /* "/Users/oliphant/numpybook/pyrex/add.pyx":62 */ + return; + __pyx_L1:; + __Pyx_AddTraceback("add"); +} + +static char *__pyx_filenames[] = { + "add.pyx", + "c_numpy.pxd", +}; + +/* Runtime support code */ + +static void __pyx_init_filenames(void) { + __pyx_f = __pyx_filenames; +} + +static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + if (!type) { + PyErr_Format(PyExc_SystemError, "Missing type object"); + return 0; + } + if (obj == Py_None || PyObject_TypeCheck(obj, type)) + return 1; + PyErr_Format(PyExc_TypeError, "Cannot convert %s to %s", + obj->ob_type->tp_name, type->tp_name); + return 0; +} + +static int __Pyx_InternStrings(__Pyx_InternTabEntry *t) { + while (t->p) { + *t->p = PyString_InternFromString(t->s); + if (!*t->p) + return -1; + ++t; + } + return 0; +} + +static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, + long size) +{ + PyObject *py_module_name = 0; + PyObject *py_class_name = 0; + PyObject *py_name_list = 0; + PyObject *py_module = 0; + PyObject *result = 0; + + py_module_name = PyString_FromString(module_name); + if (!py_module_name) + goto bad; + py_class_name = PyString_FromString(class_name); + if (!py_class_name) + goto bad; + py_name_list = PyList_New(1); + if (!py_name_list) + goto bad; + Py_INCREF(py_class_name); + if (PyList_SetItem(py_name_list, 0, py_class_name) < 0) + goto bad; + py_module = __Pyx_Import(py_module_name, py_name_list); + if (!py_module) + goto bad; + result = PyObject_GetAttr(py_module, py_class_name); + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%s.%s is not a type object", + module_name, class_name); + goto bad; + } + if (((PyTypeObject *)result)->tp_basicsize != size) { + PyErr_Format(PyExc_ValueError, + "%s.%s does not appear to be the correct type object", + module_name, class_name); + goto bad; + } + goto done; +bad: + Py_XDECREF(result); + result = 0; +done: + Py_XDECREF(py_module_name); + Py_XDECREF(py_class_name); + Py_XDECREF(py_name_list); + return (PyTypeObject *)result; +} + +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) { + PyObject *__import__ = 0; + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + __import__ = PyObject_GetAttrString(__pyx_b, "__import__"); + if (!__import__) + goto bad; + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + module = PyObject_CallFunction(__import__, "OOOO", + name, global_dict, empty_dict, list); +bad: + Py_XDECREF(empty_list); + Py_XDECREF(__import__); + Py_XDECREF(empty_dict); + return module; +} + +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" + +static void __Pyx_AddTraceback(char *funcname) { + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + PyObject *py_globals = 0; + PyObject *empty_tuple = 0; + PyObject *empty_string = 0; + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + + py_srcfile = PyString_FromString(__pyx_filename); + if (!py_srcfile) goto bad; + py_funcname = PyString_FromString(funcname); + if (!py_funcname) goto bad; + py_globals = PyModule_GetDict(__pyx_m); + if (!py_globals) goto bad; + empty_tuple = PyTuple_New(0); + if (!empty_tuple) goto bad; + empty_string = PyString_FromString(""); + if (!empty_string) goto bad; + py_code = PyCode_New( + 0, /*int argcount,*/ + 0, /*int nlocals,*/ + 0, /*int stacksize,*/ + 0, /*int flags,*/ + empty_string, /*PyObject *code,*/ + empty_tuple, /*PyObject *consts,*/ + empty_tuple, /*PyObject *names,*/ + empty_tuple, /*PyObject *varnames,*/ + empty_tuple, /*PyObject *freevars,*/ + empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + __pyx_lineno, /*int firstlineno,*/ + empty_string /*PyObject *lnotab*/ + ); + if (!py_code) goto bad; + py_frame = PyFrame_New( + PyThreadState_Get(), /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + py_globals, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + py_frame->f_lineno = __pyx_lineno; + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + Py_XDECREF(empty_tuple); + Py_XDECREF(empty_string); + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} diff --git a/numpy/doc/numpybook/comparison/pyrex/add.pyx b/numpy/doc/numpybook/comparison/pyrex/add.pyx new file mode 100644 index 000000000..63c231641 --- /dev/null +++ b/numpy/doc/numpybook/comparison/pyrex/add.pyx @@ -0,0 +1,75 @@ +# -*- Mode: Python -*- Not really, but close enough + +cimport c_numpy +from c_numpy cimport import_array, ndarray, npy_intp, npy_cdouble, \ + npy_cfloat, NPY_DOUBLE, NPY_CDOUBLE, NPY_FLOAT, \ + NPY_CFLOAT + +#We need to initialize NumPy +import_array() + +def zadd(object ao, object bo): + cdef ndarray c, a, b + cdef npy_intp i + + a = c_numpy.PyArray_ContiguousFromAny(ao, NPY_CDOUBLE, 1, 1) + b = c_numpy.PyArray_ContiguousFromAny(bo, NPY_CDOUBLE, 1, 1) + + c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions, + a.descr.type_num) + + for i from 0 <= i < a.dimensions[0]: + (<npy_cdouble *>c.data)[i].real = (<npy_cdouble *>a.data)[i].real + \ + (<npy_cdouble *>b.data)[i].real + (<npy_cdouble *>c.data)[i].imag = (<npy_cdouble *>a.data)[i].imag + \ + (<npy_cdouble *>b.data)[i].imag + return c + +def cadd(object ao, object bo): + cdef ndarray c, a, b + cdef npy_intp i + + a = c_numpy.PyArray_ContiguousFromAny(ao, NPY_CFLOAT, 1, 1) + b = c_numpy.PyArray_ContiguousFromAny(bo, NPY_CFLOAT, 1, 1) + + c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions, + a.descr.type_num) + + for i from 0 <= i < a.dimensions[0]: + (<npy_cfloat *>c.data)[i].real = (<npy_cfloat *>a.data)[i].real + \ + (<npy_cfloat *>b.data)[i].real + (<npy_cfloat *>c.data)[i].imag = (<npy_cfloat *>a.data)[i].imag + \ + (<npy_cfloat *>b.data)[i].imag + return c + + +def dadd(object ao, object bo): + cdef ndarray c, a, b + cdef npy_intp i + + a = c_numpy.PyArray_ContiguousFromAny(ao, NPY_DOUBLE, 1, 1) + b = c_numpy.PyArray_ContiguousFromAny(bo, NPY_DOUBLE, 1, 1) + + c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions, + a.descr.type_num) + + for i from 0 <= i < a.dimensions[0]: + (<double *>c.data)[i] = (<double *>a.data)[i] + \ + (<double *>b.data)[i] + return c + + +def sadd(object ao, object bo): + cdef ndarray c, a, b + cdef npy_intp i + + a = c_numpy.PyArray_ContiguousFromAny(ao, NPY_FLOAT, 1, 1) + b = c_numpy.PyArray_ContiguousFromAny(bo, NPY_FLOAT, 1, 1) + + c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions, + a.descr.type_num) + + for i from 0 <= i < a.dimensions[0]: + (<float *>c.data)[i] = (<float *>a.data)[i] + \ + (<float *>b.data)[i] + return c diff --git a/numpy/doc/numpybook/comparison/pyrex/c_numpy.pxd b/numpy/doc/numpybook/comparison/pyrex/c_numpy.pxd new file mode 100644 index 000000000..e772f6fee --- /dev/null +++ b/numpy/doc/numpybook/comparison/pyrex/c_numpy.pxd @@ -0,0 +1,106 @@ +# :Author: Robert Kern +# :Copyright: 2004, Enthought, Inc. +# :License: BSD Style + + +cdef extern from "numpy/arrayobject.h": + + cdef enum NPY_TYPES: + NPY_BOOL + NPY_BYTE + NPY_UBYTE + NPY_SHORT + NPY_USHORT + NPY_INT + NPY_UINT + NPY_LONG + NPY_ULONG + NPY_LONGLONG + NPY_ULONGLONG + NPY_FLOAT + NPY_DOUBLE + NPY_LONGDOUBLE + NPY_CFLOAT + NPY_CDOUBLE + NPY_CLONGDOUBLE + NPY_OBJECT + NPY_STRING + NPY_UNICODE + NPY_VOID + NPY_NTYPES + NPY_NOTYPE + + cdef enum requirements: + NPY_CONTIGUOUS + NPY_FORTRAN + NPY_OWNDATA + NPY_FORCECAST + NPY_ENSURECOPY + NPY_ENSUREARRAY + NPY_ELEMENTSTRIDES + NPY_ALIGNED + NPY_NOTSWAPPED + NPY_WRITEABLE + NPY_UPDATEIFCOPY + NPY_ARR_HAS_DESCR + + NPY_BEHAVED + NPY_BEHAVED_NS + NPY_CARRAY + NPY_CARRAY_RO + NPY_FARRAY + NPY_FARRAY_RO + NPY_DEFAULT + + NPY_IN_ARRAY + NPY_OUT_ARRAY + NPY_INOUT_ARRAY + NPY_IN_FARRAY + NPY_OUT_FARRAY + NPY_INOUT_FARRAY + + NPY_UPDATE_ALL + + ctypedef struct npy_cdouble: + double real + double imag + + ctypedef struct npy_cfloat: + double real + double imag + + ctypedef int npy_intp + + ctypedef extern class numpy.dtype [object PyArray_Descr]: + cdef int type_num, elsize, alignment + cdef char type, kind, byteorder, hasobject + cdef object fields, typeobj + + ctypedef extern class numpy.ndarray [object PyArrayObject]: + cdef char *data + cdef int nd + cdef npy_intp *dimensions + cdef npy_intp *strides + cdef object base + cdef dtype descr + cdef int flags + + object PyArray_ZEROS(int ndims, npy_intp* dims, NPY_TYPES type_num, int fortran) + object PyArray_EMPTY(int ndims, npy_intp* dims, NPY_TYPES type_num, int fortran) + dtype PyArray_DescrFromTypeNum(NPY_TYPES type_num) + object PyArray_SimpleNew(int ndims, npy_intp* dims, NPY_TYPES type_num) + int PyArray_Check(object obj) + object PyArray_ContiguousFromAny(object obj, NPY_TYPES type, + int mindim, int maxdim) + npy_intp PyArray_SIZE(ndarray arr) + npy_intp PyArray_NBYTES(ndarray arr) + void *PyArray_DATA(ndarray arr) + object PyArray_FromAny(object obj, dtype newtype, int mindim, int maxdim, + int requirements, object context) + object PyArray_FROMANY(object obj, NPY_TYPES type_num, int min, + int max, int requirements) + object PyArray_NewFromDescr(object subtype, dtype newtype, int nd, + npy_intp* dims, npy_intp* strides, void* data, + int flags, object parent) + + void import_array() diff --git a/numpy/doc/numpybook/comparison/pyrex/filter.c b/numpy/doc/numpybook/comparison/pyrex/filter.c new file mode 100644 index 000000000..1c25eb677 --- /dev/null +++ b/numpy/doc/numpybook/comparison/pyrex/filter.c @@ -0,0 +1,388 @@ +/* Generated by Pyrex 0.9.4.1 on Thu Aug 17 02:11:42 2006 */ + +#include "Python.h" +#include "structmember.h" +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifdef __cplusplus +#define __PYX_EXTERN_C extern "C" +#else +#define __PYX_EXTERN_C extern +#endif +__PYX_EXTERN_C double pow(double, double); +#include "numpy/arrayobject.h" + + +typedef struct {PyObject **p; char *s;} __Pyx_InternTabEntry; /*proto*/ +typedef struct {PyObject **p; char *s; long n;} __Pyx_StringTabEntry; /*proto*/ +static PyObject *__Pyx_UnpackItem(PyObject *, int); /*proto*/ +static int __Pyx_EndUnpack(PyObject *, int); /*proto*/ +static int __Pyx_PrintItem(PyObject *); /*proto*/ +static int __Pyx_PrintNewline(void); /*proto*/ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ +static void __Pyx_ReRaise(void); /*proto*/ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/ +static PyObject *__Pyx_GetExcValue(void); /*proto*/ +static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name); /*proto*/ +static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ +static int __Pyx_GetStarArgs(PyObject **args, PyObject **kwds, char *kwd_list[], int nargs, PyObject **args2, PyObject **kwds2); /*proto*/ +static void __Pyx_WriteUnraisable(char *name); /*proto*/ +static void __Pyx_AddTraceback(char *funcname); /*proto*/ +static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size); /*proto*/ +static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/ +static int __Pyx_GetVtable(PyObject *dict, void *vtabptr); /*proto*/ +static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, char *modname); /*proto*/ +static int __Pyx_InternStrings(__Pyx_InternTabEntry *t); /*proto*/ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ +static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ + +static PyObject *__pyx_m; +static PyObject *__pyx_b; +static int __pyx_lineno; +static char *__pyx_filename; +static char **__pyx_f; + +/* Declarations from c_numpy */ + +static PyTypeObject *__pyx_ptype_7c_numpy_dtype = 0; +static PyTypeObject *__pyx_ptype_7c_numpy_ndarray = 0; + +/* Declarations from filter */ + + +/* Implementation of filter */ + +static PyObject *__pyx_n_c_numpy; +static PyObject *__pyx_n_filter; + +static PyObject *__pyx_f_6filter_filter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_f_6filter_filter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_ao = 0; + PyArrayObject *__pyx_v_a; + PyArrayObject *__pyx_v_b; + npy_intp __pyx_v_i; + npy_intp __pyx_v_j; + npy_intp __pyx_v_M; + npy_intp __pyx_v_N; + npy_intp __pyx_v_S0; + npy_intp __pyx_v_S1; + npy_intp __pyx_v_r; + npy_intp __pyx_v_rm1; + npy_intp __pyx_v_rp1; + npy_intp __pyx_v_c; + npy_intp __pyx_v_cm1; + npy_intp __pyx_v_cp1; + PyObject *__pyx_v_oS; + PyObject *__pyx_r; + PyObject *__pyx_1 = 0; + long __pyx_2; + long __pyx_3; + PyObject *__pyx_4 = 0; + int __pyx_5; + static char *__pyx_argnames[] = {"ao",0}; + if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_ao)) return 0; + Py_INCREF(__pyx_v_ao); + __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); + __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); + __pyx_v_oS = Py_None; Py_INCREF(Py_None); + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":18 */ + __pyx_1 = PyArray_FROMANY(__pyx_v_ao,NPY_DOUBLE,2,2,NPY_ALIGNED); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;} + Py_DECREF(((PyObject *)__pyx_v_a)); + __pyx_v_a = ((PyArrayObject *)__pyx_1); + __pyx_1 = 0; + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":19 */ + __pyx_1 = PyArray_ZEROS(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num,0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; goto __pyx_L1;} + if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; goto __pyx_L1;} + Py_DECREF(((PyObject *)__pyx_v_b)); + __pyx_v_b = ((PyArrayObject *)__pyx_1); + __pyx_1 = 0; + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":20 */ + __pyx_v_M = (__pyx_v_a->dimensions[0]); + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":21 */ + __pyx_v_N = (__pyx_v_a->dimensions[1]); + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":22 */ + __pyx_v_S0 = (__pyx_v_a->strides[0]); + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":23 */ + __pyx_v_S1 = (__pyx_v_a->strides[1]); + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":24 */ + __pyx_2 = (__pyx_v_M - 1); + for (__pyx_v_i = 1; __pyx_v_i < __pyx_2; ++__pyx_v_i) { + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":25 */ + __pyx_v_r = (__pyx_v_i * __pyx_v_S0); + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":26 */ + __pyx_v_rm1 = (__pyx_v_r - __pyx_v_S0); + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":27 */ + __pyx_v_rp1 = (__pyx_v_r + __pyx_v_S0); + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":28 */ + __pyx_1 = PyInt_FromLong((__pyx_v_i * __pyx_v_N)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; goto __pyx_L1;} + Py_DECREF(__pyx_v_oS); + __pyx_v_oS = __pyx_1; + __pyx_1 = 0; + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":29 */ + __pyx_3 = (__pyx_v_N - 1); + for (__pyx_v_j = 1; __pyx_v_j < __pyx_3; ++__pyx_v_j) { + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":30 */ + __pyx_v_c = (__pyx_v_j * __pyx_v_S1); + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":31 */ + __pyx_v_cm1 = (__pyx_v_c - __pyx_v_S1); + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":32 */ + __pyx_v_cp1 = (__pyx_v_c + __pyx_v_S1); + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":38 */ + __pyx_1 = PyInt_FromLong(__pyx_v_j); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;} + __pyx_4 = PyNumber_Add(__pyx_v_oS, __pyx_1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;} + Py_DECREF(__pyx_1); __pyx_1 = 0; + __pyx_5 = PyInt_AsLong(__pyx_4); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;} + Py_DECREF(__pyx_4); __pyx_4 = 0; + (((double (*))__pyx_v_b->data)[__pyx_5]) = (((((double (*))((__pyx_v_a->data + __pyx_v_r) + __pyx_v_c))[0]) + (((((((double (*))((__pyx_v_a->data + __pyx_v_rm1) + __pyx_v_c))[0]) + (((double (*))((__pyx_v_a->data + __pyx_v_rp1) + __pyx_v_c))[0])) + (((double (*))((__pyx_v_a->data + __pyx_v_r) + __pyx_v_cm1))[0])) + (((double (*))((__pyx_v_a->data + __pyx_v_r) + __pyx_v_cp1))[0])) * 0.5)) + (((((((double (*))((__pyx_v_a->data + __pyx_v_rm1) + __pyx_v_cm1))[0]) + (((double (*))((__pyx_v_a->data + __pyx_v_rp1) + __pyx_v_cm1))[0])) + (((double (*))((__pyx_v_a->data + __pyx_v_rp1) + __pyx_v_cp1))[0])) + (((double (*))((__pyx_v_a->data + __pyx_v_rm1) + __pyx_v_cp1))[0])) * 0.25)); + __pyx_L4:; + } + __pyx_L5:; + __pyx_L2:; + } + __pyx_L3:; + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":43 */ + Py_INCREF(((PyObject *)__pyx_v_b)); + __pyx_r = ((PyObject *)__pyx_v_b); + goto __pyx_L0; + + __pyx_r = Py_None; Py_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1:; + Py_XDECREF(__pyx_1); + Py_XDECREF(__pyx_4); + __Pyx_AddTraceback("filter.filter"); + __pyx_r = 0; + __pyx_L0:; + Py_DECREF(__pyx_v_a); + Py_DECREF(__pyx_v_b); + Py_DECREF(__pyx_v_oS); + Py_DECREF(__pyx_v_ao); + return __pyx_r; +} + +static __Pyx_InternTabEntry __pyx_intern_tab[] = { + {&__pyx_n_c_numpy, "c_numpy"}, + {&__pyx_n_filter, "filter"}, + {0, 0} +}; + +static struct PyMethodDef __pyx_methods[] = { + {"filter", (PyCFunction)__pyx_f_6filter_filter, METH_VARARGS|METH_KEYWORDS, 0}, + {0, 0, 0, 0} +}; + +static void __pyx_init_filenames(void); /*proto*/ + +PyMODINIT_FUNC initfilter(void); /*proto*/ +PyMODINIT_FUNC initfilter(void) { + __pyx_init_filenames(); + __pyx_m = Py_InitModule4("filter", __pyx_methods, 0, 0, PYTHON_API_VERSION); + if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; + __pyx_b = PyImport_AddModule("__builtin__"); + if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; + if (__Pyx_InternStrings(__pyx_intern_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; + __pyx_ptype_7c_numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr)); if (!__pyx_ptype_7c_numpy_dtype) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 74; goto __pyx_L1;} + __pyx_ptype_7c_numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject)); if (!__pyx_ptype_7c_numpy_ndarray) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 79; goto __pyx_L1;} + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":9 */ + import_array(); + + /* "/Users/oliphant/numpybook/pyrex/filter.pyx":11 */ + return; + __pyx_L1:; + __Pyx_AddTraceback("filter"); +} + +static char *__pyx_filenames[] = { + "filter.pyx", + "c_numpy.pxd", +}; + +/* Runtime support code */ + +static void __pyx_init_filenames(void) { + __pyx_f = __pyx_filenames; +} + +static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + if (!type) { + PyErr_Format(PyExc_SystemError, "Missing type object"); + return 0; + } + if (obj == Py_None || PyObject_TypeCheck(obj, type)) + return 1; + PyErr_Format(PyExc_TypeError, "Cannot convert %s to %s", + obj->ob_type->tp_name, type->tp_name); + return 0; +} + +static int __Pyx_InternStrings(__Pyx_InternTabEntry *t) { + while (t->p) { + *t->p = PyString_InternFromString(t->s); + if (!*t->p) + return -1; + ++t; + } + return 0; +} + +static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, + long size) +{ + PyObject *py_module_name = 0; + PyObject *py_class_name = 0; + PyObject *py_name_list = 0; + PyObject *py_module = 0; + PyObject *result = 0; + + py_module_name = PyString_FromString(module_name); + if (!py_module_name) + goto bad; + py_class_name = PyString_FromString(class_name); + if (!py_class_name) + goto bad; + py_name_list = PyList_New(1); + if (!py_name_list) + goto bad; + Py_INCREF(py_class_name); + if (PyList_SetItem(py_name_list, 0, py_class_name) < 0) + goto bad; + py_module = __Pyx_Import(py_module_name, py_name_list); + if (!py_module) + goto bad; + result = PyObject_GetAttr(py_module, py_class_name); + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%s.%s is not a type object", + module_name, class_name); + goto bad; + } + if (((PyTypeObject *)result)->tp_basicsize != size) { + PyErr_Format(PyExc_ValueError, + "%s.%s does not appear to be the correct type object", + module_name, class_name); + goto bad; + } + goto done; +bad: + Py_XDECREF(result); + result = 0; +done: + Py_XDECREF(py_module_name); + Py_XDECREF(py_class_name); + Py_XDECREF(py_name_list); + return (PyTypeObject *)result; +} + +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) { + PyObject *__import__ = 0; + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + __import__ = PyObject_GetAttrString(__pyx_b, "__import__"); + if (!__import__) + goto bad; + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + module = PyObject_CallFunction(__import__, "OOOO", + name, global_dict, empty_dict, list); +bad: + Py_XDECREF(empty_list); + Py_XDECREF(__import__); + Py_XDECREF(empty_dict); + return module; +} + +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" + +static void __Pyx_AddTraceback(char *funcname) { + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + PyObject *py_globals = 0; + PyObject *empty_tuple = 0; + PyObject *empty_string = 0; + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + + py_srcfile = PyString_FromString(__pyx_filename); + if (!py_srcfile) goto bad; + py_funcname = PyString_FromString(funcname); + if (!py_funcname) goto bad; + py_globals = PyModule_GetDict(__pyx_m); + if (!py_globals) goto bad; + empty_tuple = PyTuple_New(0); + if (!empty_tuple) goto bad; + empty_string = PyString_FromString(""); + if (!empty_string) goto bad; + py_code = PyCode_New( + 0, /*int argcount,*/ + 0, /*int nlocals,*/ + 0, /*int stacksize,*/ + 0, /*int flags,*/ + empty_string, /*PyObject *code,*/ + empty_tuple, /*PyObject *consts,*/ + empty_tuple, /*PyObject *names,*/ + empty_tuple, /*PyObject *varnames,*/ + empty_tuple, /*PyObject *freevars,*/ + empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + __pyx_lineno, /*int firstlineno,*/ + empty_string /*PyObject *lnotab*/ + ); + if (!py_code) goto bad; + py_frame = PyFrame_New( + PyThreadState_Get(), /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + py_globals, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + py_frame->f_lineno = __pyx_lineno; + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + Py_XDECREF(empty_tuple); + Py_XDECREF(empty_string); + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} diff --git a/numpy/doc/numpybook/comparison/pyrex/filter.pyx b/numpy/doc/numpybook/comparison/pyrex/filter.pyx new file mode 100644 index 000000000..492bc43de --- /dev/null +++ b/numpy/doc/numpybook/comparison/pyrex/filter.pyx @@ -0,0 +1,44 @@ +# -*- Mode: Python -*- Not really, but close enough + +cimport c_numpy +from c_numpy cimport import_array, ndarray, npy_intp,\ + NPY_DOUBLE, NPY_CDOUBLE, NPY_FLOAT, \ + NPY_CFLOAT, NPY_ALIGNED + +#We need to initialize NumPy +import_array() + +def filter(object ao): + cdef ndarray a, b + cdef npy_intp i, j, M, N, S0, S1 + cdef npy_intp r,rm1,rp1,c,cm1,cp1 + + # Require an ALIGNED array (but not necessarily contiguous) + # We will use strides to access the elements. + a = c_numpy.PyArray_FROMANY(ao, NPY_DOUBLE, 2, 2, NPY_ALIGNED) + b = c_numpy.PyArray_ZEROS(a.nd, a.dimensions, a.descr.type_num, 0) + M = a.dimensions[0] + N = a.dimensions[1] + S0 = a.strides[0] + S1 = a.strides[1] + for i from 1 <= i < M-1: + r = i*S0 + rm1 = r-S0 + rp1 = r+S0 + oS = i*N + for j from 1 <= j < N-1: + c = j*S1 + cm1 = c-S1 + cp1 = c+S1 + (<double *>b.data)[oS+j] = \ + (<double *>(a.data+r+c))[0] + \ + ((<double *>(a.data+rm1+c))[0] + \ + (<double *>(a.data+rp1+c))[0] + \ + (<double *>(a.data+r+cm1))[0] + \ + (<double *>(a.data+r+cp1))[0])*0.5 + \ + ((<double *>(a.data+rm1+cm1))[0] + \ + (<double *>(a.data+rp1+cm1))[0] + \ + (<double *>(a.data+rp1+cp1))[0] + \ + (<double *>(a.data+rm1+cp1))[0])*0.25 + return b + diff --git a/numpy/doc/numpybook/comparison/pyrex/setup.py b/numpy/doc/numpybook/comparison/pyrex/setup.py new file mode 100644 index 000000000..64cf12bc8 --- /dev/null +++ b/numpy/doc/numpybook/comparison/pyrex/setup.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python + +from distutils.core import setup +from distutils.extension import Extension + +import numpy + +# Define a pyrex-based extension module, using the generated sources if pyrex +from Pyrex.Distutils import build_ext +pyx_sources = ['add.pyx'] +cmdclass = {'build_ext': build_ext} + + +pyx_ext = Extension('add', + pyx_sources, + include_dirs = [numpy.get_include()]) + +pyx_ext2 = Extension('blur', + ['blur.pyx'], + include_dirs = [numpy.get_include()]) + + +# Call the routine which does the real work +setup(name = 'add', + description = 'Small example on using Pyrex to write a Numpy extension', + url = 'http://www.scipy.org/Cookbook/Pyrex_and_NumPy', + ext_modules = [pyx_ext, pyx_ext2], + cmdclass = cmdclass, + ) diff --git a/numpy/doc/numpybook/comparison/pyrex/timeme b/numpy/doc/numpybook/comparison/pyrex/timeme new file mode 100755 index 000000000..2f7cd297f --- /dev/null +++ b/numpy/doc/numpybook/comparison/pyrex/timeme @@ -0,0 +1,2 @@ +python2.4 -m timeit -s "import numpy as N; a=N.random.rand(100,200); import filter" "b = filter.filter(a)" + diff --git a/numpy/doc/numpybook/comparison/timing.py b/numpy/doc/numpybook/comparison/timing.py new file mode 100644 index 000000000..14841d7cb --- /dev/null +++ b/numpy/doc/numpybook/comparison/timing.py @@ -0,0 +1,63 @@ + +import timeit + +pyrex_pre = """ +import numpy as N +a = N.random.rand(%d,%d) +import filter +""" + +pyrex_run = """ +b = filter.filter(a) +""" + +weave_pre = """ +import numpy as N +a = N.random.rand(%d,%d) +import filter +""" + +weave_run = """ +b = filter.filter(a) +""" + +ctypes_pre = """ +import numpy as N +a = N.random.rand(%d,%d) +import filter +""" + +ctypes_run = """ +b = filter.filter(a) +""" + +f2py_pre = """ +import numpy as N +a = N.random.rand(%d, %d).T +import filter +""" + +f2py_run = """ +b = N.zeros_like(a) +filter.DFILTER2D(a,b) +""" + +N = [10,20,30,40,50,100,200,300, 400, 500] + +res = {} + +import os +import sys +path = sys.path + +for kind in ['f2py']:#['ctypes', 'pyrex', 'weave', 'f2py']: + res[kind] = [] + sys.path = ['/Users/oliphant/numpybook/%s' % (kind,)] + path + print sys.path + for n in N: + print "%s - %d" % (kind, n) + t = timeit.Timer(eval('%s_run'%kind), eval('%s_pre %% (%d,%d)'%(kind,n,n))) + mytime = min(t.repeat(3,100)) + res[kind].append(mytime) + + diff --git a/numpy/doc/numpybook/comparison/weave/filter.py b/numpy/doc/numpybook/comparison/weave/filter.py new file mode 100644 index 000000000..b2fdb277e --- /dev/null +++ b/numpy/doc/numpybook/comparison/weave/filter.py @@ -0,0 +1,23 @@ +from scipy import weave, zeros_like + +def filter(a): + if a.ndim != 2: + raise ValueError, "a must be 2-d" + code = r""" + int i,j; + for(i=1;i<Na[0]-1;i++) { + for(j=1;j<Na[1]-1;j++) { + B2(i,j) = A2(i,j) + (A2(i-1,j) + + A2(i+1,j) + A2(i,j-1) + + A2(i,j+1))*0.5 + + (A2(i-1,j-1) + + A2(i-1,j+1) + + A2(i+1,j-1) + + A2(i+1,j+1))*0.25; + } + } + """ + b = zeros_like(a) + weave.inline(code,['a','b']) + return b + diff --git a/numpy/doc/numpybook/comparison/weave/inline.py b/numpy/doc/numpybook/comparison/weave/inline.py new file mode 100644 index 000000000..31499213e --- /dev/null +++ b/numpy/doc/numpybook/comparison/weave/inline.py @@ -0,0 +1,49 @@ +from scipy import weave +from numpy import rand, zeros_like + +def example1(a): + if not isinstance(a, list): + raise ValueError, "argument must be a list" + code = r""" + int i; + py::tuple results(2); + for (i=0; i<a.length(); i++) { + a[i] = i; + } + results[0] = 3.0; + results[1] = 4.0; + return_val = results; + """ + return weave.inline(code,['a']) + +def arr(a): + if a.ndim != 2: + raise ValueError, "a must be 2-d" + code = r""" + int i,j; + for(i=1;i<Na[0]-1;i++) { + for(j=1;j<Na[1]-1;j++) { + B2(i,j) = A2(i,j) + A2(i-1,j)*0.5 + + A2(i+1,j)*0.5 + A2(i,j-1)*0.5 + + A2(i,j+1)*0.5 + + A2(i-1,j-1)*0.25 + + A2(i-1,j+1)*0.25 + + A2(i+1,j-1)*0.25 + + A2(i+1,j+1)*0.25; + } + } + """ + b = zeros_like(a) + weave.inline(code,['a','b']) + return b + +a = [None]*10 +print example1(a) +print a + +a = rand(512,512) +b = arr(a) + +h = [[0.25,0.5,0.25],[0.5,1,0.5],[0.25,0.5,0.25]] +import scipy.signal as ss +b2 = ss.convolve(h,a,'same') diff --git a/numpy/doc/numpybook/comparison/weave/timeme b/numpy/doc/numpybook/comparison/weave/timeme new file mode 100755 index 000000000..2f7cd297f --- /dev/null +++ b/numpy/doc/numpybook/comparison/weave/timeme @@ -0,0 +1,2 @@ +python2.4 -m timeit -s "import numpy as N; a=N.random.rand(100,200); import filter" "b = filter.filter(a)" + diff --git a/numpy/doc/numpybook/graphics/note.eps b/numpy/doc/numpybook/graphics/note.eps new file mode 100644 index 000000000..6dc22e31c --- /dev/null +++ b/numpy/doc/numpybook/graphics/note.eps @@ -0,0 +1,116 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: note.fig +%%Creator: fig2dev Version 3.2 Patchlevel 4 +%%CreationDate: Wed Aug 24 03:03:42 2005 +%%For: oliphant@den.local.net (Travis Oliphant) +%%BoundingBox: 0 0 88 88 +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def +/col32 {0.875 0.953 0.996 srgb} bind def +/col33 {0.996 0.820 0.820 srgb} bind def +/col34 {0.984 0.961 0.859 srgb} bind def + +end +save +newpath 0 88 moveto 0 0 lineto 88 0 lineto 88 88 lineto closepath clip newpath +% Fill background color +0 0 moveto 88 0 lineto 88 88 lineto 0 88 lineto +closepath 0.98 0.96 0.86 setrgbcolor fill + +-172.1 187.9 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06000 0.06000 sc +% +% Fig objects follow +% +% +% here starts figure with depth 52 +% Polyline +7.500 slw +n 3600 1680 m 2880 2400 l 3600 3120 l 4320 2400 l + cp gs col31 1.00 shd ef gr gs col31 s gr +% here ends figure; +% +% here starts figure with depth 50 +% Polyline +60.000 slw +n 3600 1860 m 3060 2400 l 3600 2940 l 4140 2400 l + cp gs col0 s gr +% here ends figure; +$F2psEnd +rs +showpage diff --git a/numpy/doc/numpybook/graphics/note.fig b/numpy/doc/numpybook/graphics/note.fig new file mode 100644 index 000000000..3a193a52c --- /dev/null +++ b/numpy/doc/numpybook/graphics/note.fig @@ -0,0 +1,16 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +0 32 #e0f4ff +0 33 #ffd2d2 +0 34 #fcf6dc +2 3 0 1 31 31 52 -1 20 0.000 0 0 -1 0 0 5 + 3600 1680 2880 2400 3600 3120 4320 2400 3600 1680 +2 3 0 5 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3600 1860 3060 2400 3600 2940 4140 2400 3600 1860 diff --git a/numpy/doc/numpybook/graphics/note.png b/numpy/doc/numpybook/graphics/note.png Binary files differnew file mode 100644 index 000000000..bea5b70be --- /dev/null +++ b/numpy/doc/numpybook/graphics/note.png diff --git a/numpy/doc/numpybook/graphics/tip.eps b/numpy/doc/numpybook/graphics/tip.eps new file mode 100644 index 000000000..b87fd662c --- /dev/null +++ b/numpy/doc/numpybook/graphics/tip.eps @@ -0,0 +1,127 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: tip.fig +%%Creator: fig2dev Version 3.2 Patchlevel 4 +%%CreationDate: Tue Aug 23 23:51:46 2005 +%%For: oliphant@den.local.net (Travis Oliphant) +%%BoundingBox: 0 0 88 88 +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def +/col32 {0.875 0.953 0.996 srgb} bind def +/col33 {0.000 0.000 0.000 srgb} bind def + +end +save +newpath 0 88 moveto 0 0 lineto 88 0 lineto 88 88 lineto closepath clip newpath +% Fill background color +0 0 moveto 88 0 lineto 88 88 lineto 0 88 lineto +closepath 0.88 0.95 1.00 setrgbcolor fill + +-172.3 187.6 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06000 0.06000 sc +% +% Fig objects follow +% +% +% here starts figure with depth 51 +% Ellipse +7.500 slw +n 3600 2400 720 720 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col7 s gr + +% Ellipse +n 3600 2400 660 660 0 360 DrawEllipse gs col1 1.00 shd ef gr gs col1 s gr + +/Times-Bold ff 1650.00 scf sf +3384 2940 m +gs 1 -1 sc (i) col7 sh gr +% here ends figure; +$F2psEnd +rs +showpage diff --git a/numpy/doc/numpybook/graphics/tip.fig b/numpy/doc/numpybook/graphics/tip.fig new file mode 100644 index 000000000..77db02fe1 --- /dev/null +++ b/numpy/doc/numpybook/graphics/tip.fig @@ -0,0 +1,14 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +0 32 #e0f4ff +0 33 #000000 +1 3 0 1 1 1 50 -1 20 0.000 1 0.0000 3600 2400 660 660 3600 2400 4260 2400 +1 3 0 1 7 7 51 -1 20 0.000 1 0.0000 3600 2400 720 720 3600 2400 4320 2400 +4 0 7 50 -1 2 110 0.0000 4 1140 465 3384 2940 i\001 diff --git a/numpy/doc/numpybook/graphics/tip.png b/numpy/doc/numpybook/graphics/tip.png Binary files differnew file mode 100644 index 000000000..6a63550e2 --- /dev/null +++ b/numpy/doc/numpybook/graphics/tip.png diff --git a/numpy/doc/numpybook/graphics/tip.xfig.fig b/numpy/doc/numpybook/graphics/tip.xfig.fig new file mode 100644 index 000000000..ede65f7c4 --- /dev/null +++ b/numpy/doc/numpybook/graphics/tip.xfig.fig @@ -0,0 +1,12 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +1 3 0 1 1 1 50 -1 20 0.000 1 0.0000 3600 2400 660 660 3600 2400 4260 2400 +1 3 0 1 7 7 51 -1 20 0.000 1 0.0000 3600 2400 720 720 3600 2400 4320 2400 +4 0 7 50 -1 2 92 0.0000 4 960 390 3450 2850 i\001 diff --git a/numpy/doc/numpybook/graphics/warning.eps b/numpy/doc/numpybook/graphics/warning.eps new file mode 100644 index 000000000..d854a99ff --- /dev/null +++ b/numpy/doc/numpybook/graphics/warning.eps @@ -0,0 +1,125 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: warning.fig +%%Creator: fig2dev Version 3.2 Patchlevel 4 +%%CreationDate: Wed Aug 24 00:00:52 2005 +%%For: oliphant@den.local.net (Travis Oliphant) +%%BoundingBox: 0 0 88 88 +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def +/col32 {0.875 0.953 0.996 srgb} bind def +/col33 {0.996 0.820 0.820 srgb} bind def +/col34 {0.984 0.961 0.859 srgb} bind def + +end +save +newpath 0 88 moveto 0 0 lineto 88 0 lineto 88 88 lineto closepath clip newpath +% Fill background color +0 0 moveto 88 0 lineto 88 88 lineto 0 88 lineto +closepath 1.00 0.82 0.82 setrgbcolor fill + +-172.3 187.6 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def + /DrawEllipse { + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def + /savematrix mtrx currentmatrix def + x y tr xrad yrad sc 0 0 1 startangle endangle arc + closepath + savematrix setmatrix + } def + +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +10 setmiterlimit +0 slj 0 slc + 0.06000 0.06000 sc +% +% Fig objects follow +% +% +% here starts figure with depth 50 +% Ellipse +7.500 slw +n 3600 2400 720 720 0 360 DrawEllipse gs col20 1.00 shd ef gr gs col20 s gr + +% Polyline +n 3096 2268 m 4104 2268 l 4104 2532 l 3096 2532 l + cp gs col7 1.00 shd ef gr gs col7 s gr +% here ends figure; +$F2psEnd +rs +showpage diff --git a/numpy/doc/numpybook/graphics/warning.fig b/numpy/doc/numpybook/graphics/warning.fig new file mode 100644 index 000000000..89424d5ba --- /dev/null +++ b/numpy/doc/numpybook/graphics/warning.fig @@ -0,0 +1,15 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +0 32 #e0f4ff +0 33 #ffd2d2 +0 34 #fcf6dc +1 3 0 1 20 20 50 -1 20 0.000 1 0.0000 3600 2400 720 720 3600 2400 4320 2400 +2 2 0 1 7 7 50 -1 20 0.000 0 0 -1 0 0 5 + 3096 2268 4104 2268 4104 2532 3096 2532 3096 2268 diff --git a/numpy/doc/numpybook/graphics/warning.png b/numpy/doc/numpybook/graphics/warning.png Binary files differnew file mode 100644 index 000000000..12f105160 --- /dev/null +++ b/numpy/doc/numpybook/graphics/warning.png diff --git a/numpy/doc/numpybook/mybook.layout b/numpy/doc/numpybook/mybook.layout new file mode 100644 index 000000000..588384dd3 --- /dev/null +++ b/numpy/doc/numpybook/mybook.layout @@ -0,0 +1,177 @@ +#% Do not delete the line below; configure depends on this +# \DeclareLaTeXClass[book]{Stylish Book} +# Book textclass definition file. Taken from initial LyX source code +# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de> +# Transposed by Pascal André <andre@via.ecp.fr> +# Heavily modifed and enhanced by serveral developers. + +# Input general definitions +Input stdclass.inc + +# Global parameters. +Sides 2 +PageStyle Headings + +# There is no abstract environment in book.cls +NoStyle Abstract + +# a few changes to the bibliography +Style Bibliography + TopSep 4 + LabelString Bibliography + # label font definition + LabelFont + Series Bold + Size Huge + EndFont +End + + +Style Note + LatexType Command + LatexName notel + + LabelType Centered_Top_Environment + LabelString "NOTE" + AlignPossible Left + LeftMargin "MMMMM" + RightMargin "MMMMM" + ParSkip 0.7 + ParSep 0.7 + TopSep 0.7 + BottomSep 0.7 + + Font + Shape SmallCaps + Color Magenta + EndFont + Preamble + \usepackage{color} + \setlength{\fboxrule}{2pt} + \definecolor{noteback}{rgb}{0.988235, 0.964706, 0.862745} + \newcommand{\notel}[1]{% + \begin{center}% + \fcolorbox{black}{noteback}{% + \begin{minipage}{0.8\textwidth}% + \includegraphics[height=0.3in]{graphics/note.eps}% + \vskip-0.3in\hskip1.65in{\large\bf NOTE} \\[0.2cm]% + #1% + \end{minipage}% + }% + \end{center}% + } + EndPreamble +End + + +Style Warning + LatexType Command + LatexName warnl + + LabelType Centered_Top_Environment + LabelString "WARNING" + AlignPossible Left + LeftMargin "MMMMM" + RightMargin "MMMMM" + ParSkip 0.7 + ParSep 0.7 + TopSep 0.7 + BottomSep 0.7 + + Font + Shape SmallCaps + Color Red + EndFont + Preamble + \usepackage{color} + \setlength{\fboxrule}{2pt} + \definecolor{warnback}{rgb}{1.0, 0.8235294, 0.8235294} + \newcommand{\warnl}[1]{% + \begin{center}% + \fcolorbox{black}{warnback}{% + \begin{minipage}{0.8\textwidth}% + \includegraphics[height=0.3in]{graphics/warning.eps}% + \vskip-0.3in\hskip1.5in{\large\bf WARNING} \\[0.2cm]% + #1% + \end{minipage}% + }% + \end{center}% + } + EndPreamble +End + + +Style Tip + LatexType Command + LatexName tipl + + LabelType Centered_Top_Environment + LabelString "TIP" + AlignPossible Left + LeftMargin "MMMMM" + RightMargin "MMMMM" + ParSkip 0.7 + ParSep 0.7 + TopSep 0.7 + BottomSep 0.7 + + Font + Shape SmallCaps + Color Blue + EndFont + Preamble + \usepackage{color} + \setlength{\fboxrule}{2pt} + \definecolor{tipback}{rgb}{0.87843, 0.95686, 1.0} + \newcommand{\tipl}[1]{% + \begin{center}% + \fcolorbox{black}{tipback}{% + \begin{minipage}{0.8\textwidth}% + \includegraphics[height=0.3in]{graphics/tip.eps}% + \vskip-0.3in\hskip1.8in{\large\bf TIP} \\[0.2cm]% + #1% + \end{minipage}% + }% + \end{center}% + } + EndPreamble +End + +Style MyCode + Margin Static + LatexType Environment + LatexName mycode + NextNoIndent 1 + LeftMargin MMM + RightMargin MMM + TopSep 0.5 + BottomSep 0.5 + Align Left + AlignPossible Block, Left, Right, Center + LabelType No_Label + FreeSpacing 1 + + # define the environment lyxcode + Preamble + \usepackage{color} + \setlength{\fboxrule}{2pt} + \definecolor{codeback}{rgb}{0.94118,0.94118,0.94118} + \newsavebox{\mycodesavebox} + \newenvironment{mycode} + {\begin{lrbox}{\mycodesavebox}% + \begin{minipage}{0.95\linewidth}% + \begin{trivlist} + \setlength{\itemsep}{0pt} + \setlength{\parsep}{0pt} + \normalfont\ttfamily + \item[] } + {\end{trivlist}\end{minipage}\end{lrbox}% + \vskip 0.5em \begin{center}\fcolorbox{black}{codeback}{\usebox{\mycodesavebox}}\end{center}\par \vskip 0.5em} + EndPreamble + + # standard font definition + Font + Family Typewriter + EndFont + +End diff --git a/numpy/doc/numpybook/numpybook.lyx b/numpy/doc/numpybook/numpybook.lyx new file mode 100644 index 000000000..16ee19d90 --- /dev/null +++ b/numpy/doc/numpybook/numpybook.lyx @@ -0,0 +1,27836 @@ +#LyX 1.5.1 created this file. For more info see http://www.lyx.org/ +\lyxformat 276 +\begin_document +\begin_header +\textclass mybook +\begin_preamble + + + +\usepackage{array} + +% This gives us a better font in URL links (otherwise the default +% MonoSpace font is bitmapped, and it looks horrible in PDF) +\usepackage{courier} + +\usepackage{fullpage} + +\usepackage{color} % so we can use red for the fixme warnings + +% The hyperref package gives us a pdf with properly built +% internal navigation ('pdf bookmarks' for the table of contents, +% internal cross-reference links, web links for URLs, etc.) + +% A few colors to replace the defaults for certain link types +\definecolor{darkorange}{rgb}{.71,0.21,0.01} +\definecolor{darkgreen}{rgb}{.12,.54,.11} + +\usepackage[ + %pdftex, % needed for pdflatex + breaklinks=true, % so long urls are correctly broken across lines + colorlinks=true, + urlcolor=blue, + linkcolor=darkorange, + citecolor=darkgreen, + ]{hyperref} + +% This helps prevent overly long lines that stretch beyond the margins +\sloppy + +% Define a \fixme command to mark visually things needing fixing in the draft. +% For final printing or to simply disable these bright warnings, simply +% uncomment the \renewcommand redefinition below + +\newcommand{\fixme}[1] { +\textcolor{red}{ +{\fbox{ {\bf FIX} +\ensuremath{\blacktriangleright \blacktriangleright \blacktriangleright}} +{\bf #1} +\fbox{\ensuremath{ \blacktriangleleft \blacktriangleleft \blacktriangleleft } +} } } +} +% Uncomment the next line to make the \fixme command be a no-op +%\renewcommand{\fixme}[1]{} + +%%% If you also want to use the listings package for nicely formatted +%%% Python source code, this configuration produces good on-paper and +%%% on-screen results: + +\definecolor{orange}{cmyk}{0,0.4,0.8,0.2} +% Use and configure listings package for nicely formatted code +\usepackage{listings} +\lstset{ + language=Python, + basicstyle=\small\ttfamily, + commentstyle=\ttfamily\color{blue}, + stringstyle=\ttfamily\color{orange}, + showstringspaces=false, + breaklines=true, + postbreak = \space\dots +} +\end_preamble +\language english +\inputencoding auto +\font_roman default +\font_sans default +\font_typewriter default +\font_default_family default +\font_sc false +\font_osf false +\font_sf_scale 100 +\font_tt_scale 100 +\graphics default +\paperfontsize 10 +\spacing onehalf +\papersize custom +\use_geometry true +\use_amsmath 2 +\use_esint 0 +\cite_engine basic +\use_bibtopic false +\paperorientation portrait +\paperwidth 7in +\paperheight 9in +\leftmargin 1in +\topmargin 1in +\rightmargin 1in +\bottommargin 1in +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\defskip medskip +\quotes_language english +\papercolumns 1 +\papersides 1 +\paperpagestyle headings +\tracking_changes false +\output_changes false +\author "" +\author "" +\end_header + +\begin_body + +\begin_layout Standard +\begin_inset VSpace 2in* +\end_inset + + +\end_layout + +\begin_layout Standard +\align center + +\family sans +\series bold +\size giant +Guide to NumPy +\end_layout + +\begin_layout Standard +\align center + +\family sans +\size larger +Travis E. + Oliphant, PhD +\newline +August 21, 2008 +\end_layout + +\begin_layout Standard +\begin_inset VSpace vfill +\end_inset + +This book was released from a restricted distribution using a Market-Determined, + Temporary, Distribution-Restriction (MDTDR) system (see http://www.trelgol.com) + on August 21, 2008. + It is now released to the public domain and can be used as source material + for other works. + +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand tableofcontents + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset FloatList table + +\end_inset + + +\end_layout + +\begin_layout Part +NumPy from Python +\end_layout + +\begin_layout Chapter +Origins of NumPy +\end_layout + +\begin_layout Quotation +A complex system that works is invariably found to have evolved from a simple + system that worked +\end_layout + +\begin_layout Right Address +--- +\emph on +John Gall +\end_layout + +\begin_layout Quotation +Copy from one, it's plagiarism; copy from two, it's research. +\end_layout + +\begin_layout Right Address +--- +\emph on +Wilson Mizner +\end_layout + +\begin_layout Standard +NumPy builds on (and is a successor to) the successful Numeric array object. + Its goal is to create the corner-stone for a useful environment for scientific + computing. + In order to better understand the people surrounding NumPy and (its library-pac +kage) SciPy, I will explain a little about how SciPy and (current) NumPy + originated. + In 1998, as a graduate student studying biomedical imaging at the Mayo + Clinic in Rochester, MN, I came across Python and its numerical extension + (Numeric) while I was looking for ways to analyze large data sets for Magnetic + Resonance Imaging and Ultrasound using a high-level language. + I quickly fell in love with Python programming which is a remarkable statement + to make about a programming language. + If I had not seen others with the same view, I might have seriously doubted + my sanity. + I became rather involved in the Numeric Python community, adding the C-API + chapter to the Numeric documentation (for which Paul Dubois graciously + made me a co-author). + +\end_layout + +\begin_layout Standard +As I progressed with my thesis work, programming in Python was so enjoyable + that I felt inhibited when I worked with other programming frameworks. + As a result, when a task I needed to perform was not available in the core + language, or in the Numeric extension, I looked around and found C or Fortran + code that performed the needed task, wrapped it into Python (either by + hand or using SWIG), and used the new functionality in my programs. + +\end_layout + +\begin_layout Standard +Along the way, I learned a great deal about the underlying structure of + Numeric and grew to admire it's simple but elegant structures that grew + out of the mechanism by which Python allows itself to be extended. + +\end_layout + +\begin_layout Note +Numeric was originally written in 1995 based off of an earlier Matrix Object + design by Jim Fulton which was released in 1994. + Most of the code was written by Jim Hugunin while he was a graduate student + at MIT. + He received help from many people including Jim Fulton, David Ascher, Paul + Dubois, and Konrad Hinsen. + These individuals and many others added comments, criticisms, and code + which helped the Numeric extension reach stability. + Jim Hugunin did not stay long as an active member of the community --- + moving on to write Jython and, later, Iron Python. +\end_layout + +\begin_layout Standard +By operating in this need-it-make-it fashion I ended up with a substantial + library of extension modules that helped Python + Numeric become easier + to use in a scientific setting. + These early modules included raw input-output functions, a special function + library, an integration library, an ordinary differential equation solver, + some least-squares optimizers, and sparse matrix solvers. + While I was doing this laborious work, Pearu Peterson noticed that a lot + of the routines I was wrapping were written in Fortran, and there was no + simplified wrapping mechanism for Fortran subroutines (like SWIG for C). + He began the task of writing f2py which made it possible to easily wrap + Fortran programs into Python. + I helped him a little bit, mostly with testing and contributing early function- +call-back code, but he put forth the brunt of the work. + His result was simply amazing to me. + I've always been impressed with f2py, especially because I knew how much + effort writing and maintaining extension modules could be. + Anybody serious about scientific computing with Python will appreciate + that f2py is distributed along with NumPy. +\end_layout + +\begin_layout Standard +When I finished my Ph.D. + in 2001, Eric Jones (who had recently completed his Ph.D. + at Duke) contacted me because he had a collection of Python modules he + had developed as part of his thesis work as well. + He wanted to combine his modules with mine into one super package. + Together with Pearu Peterson we joined our efforts, and SciPy was born + in 2001. + Since then, many people have contributed module code to SciPy including + Ed Schofield, Robert Cimrman, David M. + Cooke, Charles (Chuck) Harris, Prabhu Ramachandran, Gary Strangman, Jean-Sebast +ien Roy, and Fernando Perez. + Others such as Travis Vaught, David Morrill, Jeff Whitaker, and Louis Luangkeso +rn have contributed testing and build support. + +\end_layout + +\begin_layout Standard +At the start of 2005, SciPy was at release 0.3 and relatively stable for + an early version number. + Part of the reason it was difficult to stabilize SciPy was that the array + object upon which SciPy builds was undergoing a bit of an upheaval. + At about the same time as SciPy was being built, some Numeric users were + hitting up against the limited capabilities of Numeric. + In particular, the ability to deal with memory mapped files (and associated + alignment and swapping issues), record arrays, and altered error checking + modes were important but limited or non-existent in Numeric. + As a result, numarray was created by Perry Greenfield, Todd Miller, and + Rick White at the Space Science Telescope Institute as a replacement for + Numeric. + Numarray used a very different implementation scheme as a mix of Python + classes and C code (which led to slow downs in certain common uses). + While improving some capabilities, it was slow to pick up on the more advanced + features of Numeric's universal functions (ufuncs) --- never re-creating + the C-API that SciPy depended on. + This made it difficult for SciPy to +\begin_inset Quotes eld +\end_inset + +convert +\begin_inset Quotes erd +\end_inset + + to numarray. + +\end_layout + +\begin_layout Standard +Many newcomers to scientific computing with Python were told that numarray + was the future and started developing for it. + Very useful tools were developed that could not be used with Numeric (because + of numarray's change in C-API), and therefore could not be used easily + in SciPy. + This state of affairs was very discouraging for me personally as it left + the community fragmented. + Some developed for numarray, others developed as part of SciPy. + A few people even rejected adopting Python for scientific computing entirely + because of the split. + In addition, I estimate that quite a few Python users simply stayed away + from both SciPy and numarray, leaving the community smaller than it could + have been given the number of people that use Python for science and engineerin +g purposes. + +\end_layout + +\begin_layout Standard +It should be recognized that the split was not intentional, but simply an + outgrowth of the different and exacting demands of scientific computing + users. + My describing these events should not be construed as assigning blame to + anyone. + I very much admire and appreciate everyone I've met who is involved with + scientific computing and Python. + Using a stretched biological metaphor, it is only through the process of + dividing and merging that better results are born. + I think this concept applies to NumPy. +\end_layout + +\begin_layout Standard +In early 2005, I decided to begin an effort to help bring the diverging + community together under a common framework if it were possible. + I first looked at numarray to see what could be done to add the missing + features to make SciPy work with it as a core array object. + After a couple of days of studying numarray, I was not enthusiastic about + this approach. + My familiarity with the Numeric code base no doubt biased my opinion, but + it seemed to me that the features of Numarray could be added back to Numeric + with a few fundamental changes to the core object. + This would make the transition of SciPy to a more enhanced array object + much easier in my mind. + +\end_layout + +\begin_layout Standard +Therefore, I began to construct this hybrid array object complete with an + enhanced set of universal (broadcasting) functions that could deal with + it. + Along the way, quite a few new features and significant enhancements were + added to the array object and its surrounding infrastructure. + This book describes the result of that year-and-a-half-long effort which + culminated with the release of NumPy 0.9.2 in early 2006 and NumPy 1.0 in + late 2006. + I first named the new package, SciPy Core, and used the scipy namespace. + However, after a few months of testing under that name, it became clear + that a separate namespace was needed for the new package. + As a result, a rapid search for a new name resulted in actually coming + back to the NumPy name which was the unofficial name of Numerical Python + but never the actual namespace. + Because the new package builds on the code-base of and is a successor to + Numeric, I think the NumPy name is fitting and hopefully not too confusing + to new users. +\end_layout + +\begin_layout Standard +This book only briefly outlines some of the infrastructure that surrounds + the basic objects in NumPy to provide the additional functionality contained + in the older Numeric package ( +\emph on +i.e. + +\emph default + LinearAlgebra, RandomArray, FFT). + This infrastructure in NumPy includes basic linear algebra routines, Fourier + transform capabilities, and random number generators. + In addition, the f2py module is described in its own documentation, and + so is only briefly mentioned in the second part of the book. + There are also extensions to the standard Python distutils and testing + frameworks included with NumPy that are useful in constructing your own + packages built on top of NumPy. + The central purpose of this book, however, is to describe and document + the basic NumPy system that is available under the numpy namespace. +\end_layout + +\begin_layout Note +The numpy namespace includes all names under the numpy.core and numpy.lib + namespaces as well. + Thus, +\family typewriter +import numpy +\family default + will also import the names from numpy.core and numpy.lib. + This is the recommended way to use numpy. +\end_layout + +\begin_layout Standard +The following table gives a brief outline of the sub-packages contained + in numpy package. +\end_layout + +\begin_layout Standard +\align center +\begin_inset Tabular +<lyxtabular version="3" rows="9" columns="3"> +<features> +<column alignment="center" valignment="top" leftline="true" width="1in"> +<column alignment="center" valignment="top" leftline="true" width="2in"> +<column alignment="center" valignment="top" leftline="true" rightline="true" width="2in"> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Package +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Purpose +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Comments +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +core +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +basic objects +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +all names exported to numpy +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +lib +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +additional utilities +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +all names exported to numpy +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +linalg +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +basic linear algebra +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +old LinearAlgebra from Numeric +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +fft +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +discrete Fourier transforms +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +old FFT from Numeric +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +random +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +random number generators +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +old RandomArray from Numeric +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +distutils +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +enhanced build and distribution +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +improvements built on standard distutils +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +testing +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +unit-testing +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +utility functions useful for testing +\end_layout + +\end_inset +</cell> +</row> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +f2py +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +automatic wrapping of Fortran code +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +a useful utility needed by SciPy +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\end_inset + + +\end_layout + +\begin_layout Chapter +Object Essentials +\end_layout + +\begin_layout Quotation +Our programs last longer if we manage to build simple abstractions for ourselves... +\end_layout + +\begin_layout Right Address +--- +\emph on +Ron Jeffries +\end_layout + +\begin_layout Quotation +I will tell you the truth as soon as I figure it out. +\end_layout + +\begin_layout Right Address +--- +\emph on +Wayne Birmingham +\end_layout + +\begin_layout Standard +NumPy provides two fundamental objects: an N-dimensional array object ( +\family typewriter +ndarray +\family default +) and a universal function object ( +\family typewriter +ufunc +\family default +). + In addition, there are other objects that build on top of these which you + may find useful in your work, and these will be discussed later. + The current chapter will provide background information on just the +\family typewriter +ndarray +\family default + and the +\family typewriter +ufunc +\family default + that will be important for understanding the attributes and methods to + be discussed later. + +\end_layout + +\begin_layout Standard +An N-dimensional array is a homogeneous collection of +\begin_inset Quotes eld +\end_inset + +items +\begin_inset Quotes erd +\end_inset + + indexed using +\begin_inset Formula $N$ +\end_inset + + integers. + There are two essential pieces of information that define an +\begin_inset Formula $N$ +\end_inset + +-dimensional array: 1) the shape of the array, and 2) the kind of item the + array is composed of. + The shape of the array is a tuple of +\begin_inset Formula $N$ +\end_inset + + integers (one for each dimension) that provides information on how far + the index can vary along that dimension. + The other important information describing an array is the kind of item + the array is composed of. + Because every +\family typewriter +ndarray +\family default + is a homogeneous collection of exactly the same data-type, every item takes + up the same size block of memory, and each block of memory in the array + is interpreted in exactly the same way +\begin_inset Foot +status open + +\begin_layout Standard +By using OBJECT arrays, one can effectively have heterogeneous arrays, but + the system still sees each element of the array as exactly the same thing + (a reference to a Python object). +\end_layout + +\end_inset + +. +\end_layout + +\begin_layout Tip +All arrays in NumPy are indexed starting at 0 and ending at M-1 following + the Python convention. +\end_layout + +\begin_layout Standard +For example, consider the following piece of code: +\end_layout + +\begin_layout MyCode +>>> a = array([[1,2,3],[4,5,6]]) +\newline +>>> a.shape +\newline +(2, 3) +\newline +>>> a.dtype +\newline +dtype('int32') +\end_layout + +\begin_layout Note +for all code in this book it is assumed that you have first entered +\family typewriter +from numpy import * +\family default +. + In addition, any previously defined arrays are still defined for subsequent + examples. +\end_layout + +\begin_layout Standard +This code defines an array of size +\begin_inset Formula $2\times3$ +\end_inset + + composed of 4-byte (little-endian) integer elements (on my 32-bit platform). + We can index into this two-dimensional array using two integers: the first + integer running from 0 to 1 inclusive and the second from 0 to 2 inclusive. + For example, index +\begin_inset Formula $\left(1,1\right)$ +\end_inset + + selects the element with value 5: +\end_layout + +\begin_layout MyCode +>>> a[1,1] +\newline +5 +\end_layout + +\begin_layout Standard +All code shown in the shaded-boxes in this book has been (automatically) + executed on a particular version of NumPy. + The output of the code shown below shows which version of NumPy was used + to create all of the output in your copy of this book. +\end_layout + +\begin_layout MyCode +>>> import numpy; print numpy.__version__ +\newline +1.0.2.dev3478 +\end_layout + +\begin_layout Section +Data-Type Descriptors +\end_layout + +\begin_layout Standard +In NumPy, an ndarray is an +\begin_inset Formula $N$ +\end_inset + +-dimensional array of items where each item takes up a fixed number of bytes. + Typically, this fixed number of bytes represents a number ( +\emph on +e.g. + +\emph default + integer or floating-point). + However, this fixed number of bytes could also represent an arbitrary record + made up of any collection of other data types. + NumPy achieves this flexibility through the use of a data-type (dtype) + object. + Every array has an associated dtype object which describes the layout of + the array data. + Every dtype +\begin_inset LatexCommand index +name "dtype" + +\end_inset + + object, in turn, has an associated Python type-object that determines exactly + what type of Python object is returned when an element of the array is + accessed. + The dtype objects are flexible enough to contain references to arrays of + other dtype objects and, therefore, can be used to define nested records. + This advanced functionality will be described in better detail later as + it is mainly useful for the recarray (record array) subclass that will + also be defined later. + However, all ndarrays can enjoy the flexibility provided by the dtype objects. + Figure +\begin_inset LatexCommand ref +reference "cap:Conceptual-diagram-showing" + +\end_inset + + provides a conceptual diagram showing the relationship between the ndarray, + its associated data-type object, and an array-scalar that is returned when + a single-element of the array is accessed. + Note that the data-type points to the type-object of the array scalar +\begin_inset LatexCommand index +name "array scalars" + +\end_inset + +. + An array scalar is returned using the type-object and a particular element + of the ndarray. +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status open + +\begin_layout Standard +\align center +\begin_inset Graphics + filename Figures/threefundamental.eps + width 90text% + keepAspectRatio + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +\begin_inset LatexCommand label +name "cap:Conceptual-diagram-showing" + +\end_inset + +Conceptual diagram showing the relationship between the three fundamental + objects used to describe the data in an array: 1) the ndarray itself, 2) + the data-type object that describes the layout of a single fixed-size element + of the array, 3) the array-scalar Python object that is returned when a + single element of the array is accessed. +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Every dtype object is based on one of 21 built-in dtype objects. + These built-in objects allow numeric operations on a wide-variety of integer, + floating-point, and complex data types. + Associated with each data-type is a Python type object whose instances + are array scalars. + This type-object can be obtained using the +\family typewriter +type +\family default + attribute of the dtype object. + Python typically defines only one data-type of a particular data class + (one integer type, one floating-point type, etc.). + This can be convenient for some applications that don't need to be concerned + with all the ways data can be represented in a computer. + For scientific applications, however, this is not always true. + As a result, in NumPy, their are 21 different fundamental Python data-type-desc +riptor objects built-in. + These descriptors are mostly based on the types available in the C language + that CPython is written in. + However, there are a few types that are extremely flexible, such as +\family typewriter +str_ +\family default +, +\family typewriter +unicode_ +\family default +, and +\family typewriter +void +\family default +. +\end_layout + +\begin_layout Standard +The fundamental data-types are shown in Table +\begin_inset LatexCommand ref +reference "cap:Fundamental-Data-Types" + +\end_inset + +. + Along with their (mostly) C-derived names, the integer, float, and complex + data-types are also available using a bit-width convention so that an array + of the right size can always be ensured ( +\emph on +e.g. + +\emph default + int8, float64, complex128). + The C-like names are also accessible using a character code which is also + shown in the table (use of the character codes, however, is discouraged). + Names for the data types that would clash with standard Python object names + are followed by a trailing underscore, '_'. + These data types are so named because they use the same underlying precision + as the corresponding Python data types. + Most scientific users should be able to use the array-enhanced scalar objects + in place of the Python objects. + The array-enhanced scalars inherit from the Python objects they can replace + and should act like them under all circumstances (except for how errors + are handled in math computations). + +\end_layout + +\begin_layout Tip +The array types +\series bold +bool +\series default +_, +\series bold +int +\series default +_, +\series bold +complex +\series default +_, +\series bold +float +\series default +_, +\series bold +object +\series default +_, +\series bold +unicode +\series default +_, and +\series bold +str_ +\series default + are enhanced-scalars. + They are very similar to the standard Python types (without the trailing + underscore) and inherit from them (except for bool_ and object_). + They can be used in place of the standard Python types whenever desired. + Whenever a data type is required, as an argument, the standard Python types + are recognized as well. +\end_layout + +\begin_layout Standard +Three of the data types are flexible in that they can have items that are + of an arbitrary size: the +\family typewriter +str_ +\family default + type, the +\family typewriter +unicode_ +\family default + type, and the +\family typewriter +void +\family default + type. + While, you can specify an arbitrary size for these types, every item in + an array is still of that specified size. + The void type, for example, allows for arbitrary records to be defined + as elements of the array, and can be used to define exotic types built + on top of the basic +\family typewriter +ndarray +\family default +. +\end_layout + +\begin_layout Standard +\begin_inset Float table +wide false +sideways false +status open + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +\begin_inset LatexCommand label +name "cap:Fundamental-Data-Types" + +\end_inset + +Built-in array-scalar types corresponding to data-types for an ndarray. + The bold-face types correspond to standard Python types. + The object_ type is special because arrays with dtype='O' do not return + an array scalar on item access but instead return the actual object referenced + in the array. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align center +\begin_inset Tabular +<lyxtabular version="3" rows="24" columns="3"> +<features> +<column alignment="center" valignment="top" leftline="true" width="0"> +<column alignment="center" valignment="top" leftline="true" width="0"> +<column alignment="center" valignment="top" leftline="true" rightline="true" width="0"> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Type +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Bit-Width +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Character +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +bool_ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +boolXX +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'?' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +byte +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +intXX +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'b' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +short +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'h' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +intc +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'i' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +int_ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'l' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +longlong +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'q' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +intp +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'p' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +ubyte +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +uintXX +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'B' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +ushort +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'H' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +uintc +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'I' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +uint +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'L' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +ulonglong +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'Q' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +uintp +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'P' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +single +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +floatXX +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'f' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +float_ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'d' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +longfloat +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'g' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +csingle +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +complexXX +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'F' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +complex_ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'D' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +clongfloat +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'G' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +object_ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'O' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +str_ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'S#' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +unicode_ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'U#' +\end_layout + +\end_inset +</cell> +</row> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +void +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family typewriter +'V#' +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Note +The two types +\family typewriter +intp +\family default + and +\family typewriter +uintp +\family default + are not separate types. + They are names bound to a specific integer type just large enough to hold + a memory address (a pointer) on the platform. +\end_layout + +\begin_layout Warning +Numeric Compatibility: If you used old typecode characters in your Numeric + code (which was never recommended), you will need to change some of them + to the new characters. + In particular, the needed changes are 'c->'S1', 'b'->'B', '1'->'b', 's'->'h', + 'w'->'H', and 'u'->'I'. + These changes make the typecharacter convention more consistent with other + Python modules such as the struct module. +\end_layout + +\begin_layout Standard +The fundamental data-types are arranged into a hierarchy of Python type-objects + shown in Figure +\begin_inset LatexCommand ref +reference "cap:Hierarchy-of-type" + +\end_inset + +. + Each of the leaves on this hierarchy correspond to actual data-types that + arrays can have (in other words, there is a built in dtype object associated + with each of these new types). + They also correspond to new Python objects that can be created. + These new objects are +\begin_inset Quotes eld +\end_inset + +scalar +\begin_inset Quotes erd +\end_inset + + types corresponding to each fundamental data-type. + Their purpose is to smooth out the rough edges that result when mixing + scalar and array operations. + These scalar objects will be discussed in more detail in Chapter +\begin_inset LatexCommand ref +reference "cha:Scalar-objects" + +\end_inset + +. + The other types in the hierarchy define particular categories of types. + These categories can be useful for testing whether or not the object returned + by +\family typewriter +self.dtype.type +\family default + is of a particular class (using +\family typewriter +issubclass +\family default +). +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status open + +\begin_layout Standard +\align center +\begin_inset Graphics + filename Figures/hierarchy.eps + lyxscale 75 + width 95text% + keepAspectRatio + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +\begin_inset LatexCommand label +name "cap:Hierarchy-of-type" + +\end_inset + +Hierarchy of type objects representing the array data types. + Not shown are the two integer types +\family typewriter +intp +\family default + and +\family typewriter +uintp +\family default + which just point to the integer type that holds a pointer for the platform. + All the number types can be obtained using bit-width names as well. +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Basic indexing (slicing) +\end_layout + +\begin_layout Standard +Indexing +\begin_inset LatexCommand index +name "indexing" + +\end_inset + + is a powerful tool in Python and NumPy takes full advantage of this power. + In fact, some of capabilities of Python's indexing were first established + by the needs of Numeric users. +\begin_inset Foot +status open + +\begin_layout Standard +For example, the ability to index with a comma separated list of objects + and have it correspond to indexing with a tuple is a feature added to Python + at the request of the NumPy community. + The Ellipsis object was also added to Python explicitly for the NumPy community. + Extended slicing (wherein a step can be provided) was also a feature added + to Python because of Numeric. +\end_layout + +\end_inset + + Indexing is also sometimes called slicing in Python, and slicing for an + +\family typewriter +ndarray +\family default + works very similarly as it does for other Python sequences. + There are three big differences: 1) slicing can be done over multiple dimension +s, 2) exactly one ellipsis object can be used to indicate several dimensions + at once, 3) slicing cannot be used to expand the size of an array (unlike + lists). +\end_layout + +\begin_layout Standard +A few examples should make slicing more clear. + Suppose +\begin_inset Formula $A$ +\end_inset + + is a +\begin_inset Formula $10\times20$ +\end_inset + + array, then +\begin_inset Formula $A[3]$ +\end_inset + + is the same as +\begin_inset Formula $A[3,:]$ +\end_inset + + and represents the 4th length-20 +\begin_inset Quotes eld +\end_inset + +row +\begin_inset Quotes erd +\end_inset + + of the array. + On the other hand, +\begin_inset Formula $A[:,3]$ +\end_inset + + represents the 4th length-10 +\begin_inset Quotes eld +\end_inset + +column +\begin_inset Quotes erd +\end_inset + + of the array. + Every third element of the 4th column can be selected as +\begin_inset Formula $A[::3,3]$ +\end_inset + +. + Ellipses can be used to replace zero or more +\begin_inset Quotes eld +\end_inset + +: +\begin_inset Quotes erd +\end_inset + + terms. + In other words, an Ellipsis +\begin_inset LatexCommand index +name "Ellipsis" + +\end_inset + + object expands to zero or more full slice objects ( +\begin_inset Quotes eld +\end_inset + +: +\begin_inset Quotes erd +\end_inset + +) so that the total number of dimensions in the slicing tuple matches the + number of dimensions in the array. + Thus, if +\begin_inset Formula $A$ +\end_inset + + is +\begin_inset Formula $10\times20\times30\times40$ +\end_inset + +, then +\begin_inset Formula $A[3:,...,4]$ +\end_inset + + is equivalent to +\begin_inset Formula $A[3:,:,:,4]$ +\end_inset + + while +\begin_inset Formula $A[...,3]$ +\end_inset + + is equivalent to +\begin_inset Formula $A[:,:,:,3].$ +\end_inset + + +\end_layout + +\begin_layout Standard +The following code illustrates some of these concepts: +\end_layout + +\begin_layout MyCode +>>> a = arange(60).reshape(3,4,5); print a +\newline +[[[ 0 1 2 3 4] +\newline + [ 5 6 7 + 8 9] +\newline + [10 11 12 13 14] +\newline + [15 16 17 18 19]] +\newline + +\newline + [[20 21 22 23 24] +\newline + [25 26 27 + 28 29] +\newline + [30 31 32 33 34] +\newline + [35 36 37 38 39]] +\newline + +\newline + [[40 41 42 43 44] +\newline + [45 46 47 + 48 49] +\newline + [50 51 52 53 54] +\newline + [55 56 57 58 59]]] +\end_layout + +\begin_layout Standard +\InsetSpace ~ + +\end_layout + +\begin_layout MyCode +>>> print a[...,3] +\newline +[[ 3 8 13 18] +\newline + [23 28 33 38] +\newline + [43 48 53 58]] +\newline +>>> print a[1,...,3] +\newline +[23 + 28 33 38] +\newline +>>> print a[:,:,2] +\newline +[[ 2 7 12 17] +\newline + [22 27 32 37] +\newline + [42 47 52 57]] +\newline +>>> + print a[0,::2,::2] +\newline +[[ 0 2 4] +\newline + [10 12 14]] +\end_layout + +\begin_layout Section +Memory Layout of +\family typewriter +ndarray +\end_layout + +\begin_layout Standard +On a fundamental level, an +\begin_inset Formula $N$ +\end_inset + +-dimensional array object is just a one-dimensional sequence of memory with + fancy indexing code that maps an +\begin_inset Formula $N$ +\end_inset + +-dimensional index into a one-dimensional index. + The one-dimensional index is necessary on some level because that is how + memory is addressed in a computer. + The fancy indexing, however, can be very helpful for translating our ideas + into computer code. + This is because many concepts we wish to model on a computer have a natural + representation as an +\begin_inset Formula $N$ +\end_inset + +-dimensional array. + While this is especially true in science and engineering, it is also applicable + to many other arenas which can be appreciated by considering the popularity + of the spreadsheet as well as +\begin_inset Quotes eld +\end_inset + +image processing +\begin_inset Quotes erd +\end_inset + + applications. +\end_layout + +\begin_layout Warning +Some high-level languages give pre-eminence to a particular use of 2-dimensional + arrays as Matrices. + In NumPy, however, the core object is the more general +\begin_inset Formula $N$ +\end_inset + +-dimensional array. + NumPy defines a matrix object as a sub-class of the N-dimensional array. + +\end_layout + +\begin_layout Standard +In order to more fully understand the array object along with its attributes + and methods it is important to learn more about how an +\begin_inset Formula $N$ +\end_inset + +-dimensional array is represented in the computer's memory. + A complete understanding of this layout is only essential for optimizing + algorithms operating on general purpose arrays. + But, even for the casual user, a general understanding of memory layout + will help to explain the use of certain array attributes that may otherwise + be mysterious. + +\end_layout + +\begin_layout Subsection +Contiguous Memory Layout +\end_layout + +\begin_layout Standard +There is a fundamental ambiguity in how the mapping to a one-dimensional + index can take place which is illustrated for a 2-dimensional array in + Figure +\begin_inset LatexCommand ref +reference "cap:Options-for-memory" + +\end_inset + +. + In that figure, each block represents a chunk of memory that is needed + for representing the underlying array element. + For example, each block could represent the 8 bytes needed to represent + a double-precision floating point number. + +\end_layout + +\begin_layout Standard +In the figure, two arrays are shown, a +\begin_inset Formula $4x3$ +\end_inset + + array and a +\begin_inset Formula $3x4$ +\end_inset + + array. + Each of these arrays takes 12 blocks of memory shown as a single, contiguous + segment. + How this memory is used to form the abstract 2-dimensional array can vary, + however, and the +\family typewriter +ndarray +\family default + object supports both styles. + Which style is in use can be interrogated by the use of the flags attribute + which returns a dictionary of the state of array flags. + +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status open + +\begin_layout Standard +\align center +\begin_inset Graphics + filename Figures/contiguous.eps + width 85text% + keepAspectRatio + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +\begin_inset LatexCommand label +name "cap:Options-for-memory" + +\end_inset + +Options for memory layout of a 2-dimensional array. +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +In the C-style of +\begin_inset Formula $N$ +\end_inset + +-dimensional indexing shown on the left of Figure +\begin_inset LatexCommand ref +reference "cap:Options-for-memory" + +\end_inset + + the last +\begin_inset Formula $N$ +\end_inset + +-dimensional index +\begin_inset Quotes eld +\end_inset + +varies the fastest. +\begin_inset Quotes erd +\end_inset + + In other words, to move through computer memory sequentially, the last + index is incremented first, followed by the second-to-last index and so + forth. + Some of the algorithms in NumPy that deal with +\begin_inset Formula $N$ +\end_inset + +-dimensional arrays work best with this kind of data. + +\end_layout + +\begin_layout Standard +In the Fortran-style of +\begin_inset Formula $N$ +\end_inset + +-dimensional indexing shown on the right of Figure +\begin_inset LatexCommand ref +reference "cap:Options-for-memory" + +\end_inset + +, the first +\begin_inset Formula $N$ +\end_inset + +-dimensional index +\begin_inset Quotes eld +\end_inset + +varies the fastest. +\begin_inset Quotes erd +\end_inset + + Thus, to move through computer memory sequentially, the first index is + incremented first until it reaches the limit in that dimension, then the + second index is incremented and the first index is reset to zero. + While NumPy can be compiled without the use of a Fortran compiler, several + modules of SciPy (available separately) rely on underlying algorithms written + in Fortran. + Algorithms that work on +\begin_inset Formula $N$ +\end_inset + +-dimensional arrays that are written in Fortran typically expect Fortran-style + arrays. + +\end_layout + +\begin_layout Standard +The two-styles of memory layout for arrays are connected through the transpose + operation. + Thus, if +\begin_inset Formula $A$ +\end_inset + + is a (contiguous) C-style array, then the same block of memory can be used + to represent +\begin_inset Formula $A^{T}$ +\end_inset + + as a (contiguous) Fortran-style array. + This kind of understanding can be useful when trying to optimize the wrapping + of Fortran subroutines, or if a more detailed understanding of how to write + algorithms for generally-indexed arrays is desired. + But, fortunately, the casual user who does not care if an array is copied + occasionally to get it into the right orientation needed for a particular + algorithm can forget about how the array is stored in memory and just visualize + it as an +\begin_inset Formula $N$ +\end_inset + +-dimensional array (that is, after all, the whole point of creating the + +\family typewriter +ndarray +\family default + object in the first place). + +\end_layout + +\begin_layout Subsection +Non-contiguous memory layout +\end_layout + +\begin_layout Standard +Both of the examples presented above are +\emph on +single-segment +\begin_inset LatexCommand index +name "single-segment" + +\end_inset + + +\emph default + arrays where the entire array is visited by sequentially marching through + memory one element at a time. + When an algorithm in C or Fortran expects an N-dimensional array, this + single segment (of a certain fundamental type) is usually what is expected + along with the shape +\begin_inset Formula $N$ +\end_inset + +-tuple. + With a single-segment of memory representing the array, the one-dimensional + index into computer memory can always be computed from the +\begin_inset Formula $N$ +\end_inset + +-dimensional index. + This concept is explored further in the following paragraphs. +\end_layout + +\begin_layout Standard +Let +\begin_inset Formula $n_{i}$ +\end_inset + + be the value of the +\begin_inset Formula $i^{\textrm{th}}$ +\end_inset + + index into an array whose shape is represented by the +\begin_inset Formula $N$ +\end_inset + + integers +\begin_inset Formula $d_{i}$ +\end_inset + + ( +\begin_inset Formula $i=0\ldots N-1).$ +\end_inset + + Then, the one-dimensional index into a C-style contiguous array is +\begin_inset Formula \[ +n^{C}=\sum_{i=0}^{N-1}n_{i}\prod_{j=i+1}^{N-1}d_{j}\] + +\end_inset + + while the one-dimensional index into a Fortran-style contiguous array is + +\begin_inset Formula \[ +n^{F}=\sum_{i=0}^{N-1}n_{i}\prod_{j=0}^{i-1}d_{j}.\] + +\end_inset + + In these formulas we are assuming that +\begin_inset Formula \[ +\prod_{j=k}^{m}d_{j}=d_{k}d_{k+1}\cdots d_{m-1}d_{m}\] + +\end_inset + +so that if +\begin_inset Formula $m<k,$ +\end_inset + + the product is +\begin_inset Formula $1.$ +\end_inset + + While perfectly general, these formulas may be a bit confusing at first + glimpse. + Let's see how they expand out for determining the one-dimensional index + corresponding to the element +\begin_inset Formula $\left(1,3,2\right)$ +\end_inset + + of a +\begin_inset Formula $4\times5\times6$ +\end_inset + + array. + If the array is stored as Fortran contiguous, then +\begin_inset Formula \begin{eqnarray*} +n^{F} & = & n_{0}\cdot\left(1\right)+n_{1}\cdot(4)+n_{2}\cdot\left(4\cdot5\right)\\ + & = & 1+3\cdot4+2\cdot20=53.\end{eqnarray*} + +\end_inset + + On the other hand, if the array is stored as C contiguous, then +\begin_inset Formula \begin{eqnarray*} +n^{C} & = & n_{0}\cdot\left(5\cdot6\right)+n_{1}\cdot\left(6\right)+n_{2}\cdot\left(1\right)\\ + & = & 1\cdot30+3\cdot6+2\cdot1=50.\end{eqnarray*} + +\end_inset + + The general pattern should be more clear from these examples. + +\end_layout + +\begin_layout Standard +The formulas for the one-dimensional index of the N-dimensional arrays reveal + what results in an important generalization for memory layout. + Notice that each formula can be written as +\begin_inset Formula \[ +n^{X}=\sum_{i=0}^{N-1}n_{i}s_{i}^{X}\] + +\end_inset + + where +\begin_inset Formula $s_{i}^{X}$ +\end_inset + + gives the +\emph on +stride +\begin_inset LatexCommand index +name "stride" + +\end_inset + + +\emph default + for dimension +\begin_inset Formula $i$ +\end_inset + +. +\begin_inset Foot +status open + +\begin_layout Standard +Our definition of stride here is an element-based stride, while the strides + attribute returns a byte-based stride. + The byte-based stride is the element itemsize multiplied by the element-based + stride. +\end_layout + +\end_inset + + Thus, for C and Fortran contiguous arrays respectively we have +\begin_inset Formula \begin{eqnarray*} +s_{i}^{C} & = & \prod_{j=i+1}^{N-1}d_{j}=d_{i+1}d_{i+2}\cdots d_{N-1},\\ +s_{i}^{F} & = & \prod_{j=0}^{i-1}d_{j}=d_{0}d_{1}\cdots d_{i-1}.\end{eqnarray*} + +\end_inset + + +\end_layout + +\begin_layout Standard +The stride is how many elements in the underlying one-dimensional layout + of the array one must jump in order to get to the next array element of + a specific dimension in the N-dimensional layout. + Thus, in a C-style +\begin_inset Formula $4\times5\times6$ +\end_inset + + array one must jump over 30 elements to increment the first index by one, + so 30 is the stride for the first dimension ( +\begin_inset Formula $s_{0}^{C}=30$ +\end_inset + +). + If, for each array, we define a strides tuple with +\begin_inset Formula $N$ +\end_inset + + integers, then we have pre-computed and stored an important piece of how + to map the +\begin_inset Formula $N$ +\end_inset + +-dimensional index to the one-dimensional one used by the computer. + +\end_layout + +\begin_layout Standard +In addition to providing a pre-computed table for index mapping, by allowing + the strides tuple to consist of arbitrary integers we have provided a more + general layout for the +\begin_inset Formula $N$ +\end_inset + +-dimensional array. + As long as we always use the stride information to move around in the +\begin_inset Formula $N$ +\end_inset + +-dimensional array, we can use any convenient layout we wish for the underlying + representation as long as it is regular enough to be defined by constant + jumps in each dimension. + The +\family typewriter +ndarray +\family default + object of NumPy uses this stride information and therefore the underlying + memory of an +\family typewriter +ndarray +\family default + can be laid out dis-contiguously. + +\end_layout + +\begin_layout Note +Several algorithms in NumPy work on arbitrarily strided arrays. + However, some algorithms require single-segment arrays. + When an irregularly strided array is passed in to such algorithms, a copy + is automatically made. + +\end_layout + +\begin_layout Standard +An important situation where irregularly strided arrays occur is array indexing. + Consider again Figure +\begin_inset LatexCommand ref +reference "cap:Options-for-memory" + +\end_inset + +. + In that figure a high-lighted sub-array is shown. + Define +\begin_inset Formula $C$ +\end_inset + + to be the +\begin_inset Formula $4\times3$ +\end_inset + + C contiguous array and +\begin_inset Formula $F$ +\end_inset + + to be the +\begin_inset Formula $3\times4$ +\end_inset + + Fortran contiguous array. + The highlighted areas can be written respectively as +\begin_inset Formula $C$ +\end_inset + +[1:3,1:3] and +\begin_inset Formula $F$ +\end_inset + +[1:3,1:3]. + As evidenced by the corresponding highlighted region in the one-dimensional + view of the memory, these sub-arrays are neither C contiguous nor Fortran + contiguous. + However, they can still be represented by an +\family typewriter +ndarray +\family default + object using the same striding tuple as the original array used. + Therefore, a regular indexing expression on an +\family typewriter +ndarray +\family default + can always produce an +\family typewriter +ndarray +\family default + object +\emph on +without +\emph default + copying any data. + This is sometimes referred to as the +\begin_inset Quotes eld +\end_inset + +view +\begin_inset Quotes erd +\end_inset + + feature of array indexing, and one can see that it is enabled by the use + of striding information in the underlying +\family typewriter +ndarray +\family default + object. + The greatest benefit of this feature is that it allows indexing to be done + very rapidly and without exploding memory usage (because no copies of the + data are made). +\end_layout + +\begin_layout Section +Universal Functions for arrays +\end_layout + +\begin_layout Standard +NumPy provides a wealth of mathematical functions that operate on then ndarray + object. + From algebraic functions such as addition and multiplication to trigonometric + functions such as +\begin_inset Formula $\sin,$ +\end_inset + + and +\begin_inset Formula $\cos$ +\end_inset + +. + Each universal function +\begin_inset LatexCommand index +name "universal function" + +\end_inset + + ( +\family typewriter +ufunc +\family default + +\begin_inset LatexCommand index +name "ufunc" + +\end_inset + +) is an instance of a general class so that function behavior is the same. + All ufuncs perform element-by-element operations over an array or a set + of arrays (for multi-input functions). + The ufuncs themselves and their methods are documented in Part +\begin_inset LatexCommand ref +reference "par:The-Ufunc-Object" + +\end_inset + +. + +\end_layout + +\begin_layout Standard +One important aspect of ufunc behavior that should be introduced early, + however, is the idea of +\emph on + +\begin_inset LatexCommand index +name "broadcasting" + +\end_inset + +broadcasting +\emph default +. + Broadcasting is used in several places throughout NumPy and is therefore + worth early exposure. + To understand the idea of broadcasting, you first have to be conscious + of the fact that all ufuncs are always element-by-element operations. + In other words, suppose we have a ufunc with two inputs and one output + ( +\emph on +e.g. + +\emph default + addition) and the inputs are both arrays of shape +\begin_inset Formula $4\times6\times5$ +\end_inset + +. + Then, the output is going to be +\begin_inset Formula $4\times6\times5$ +\end_inset + +, and will be the result of applying the underlying function ( +\emph on +e.g. + +\emph default + +\begin_inset Formula $+$ +\end_inset + +) to each pair of inputs to produce the output at the corresponding +\begin_inset Formula $N$ +\end_inset + +-dimensional location. + +\end_layout + +\begin_layout Standard +Broadcasting allows ufuncs to deal in a meaningful way with inputs that + do not have exactly the same shape. + In particular, the first rule of broadcasting is that if all input arrays + do not have the same number of dimensions, then a +\begin_inset Quotes eld +\end_inset + + +\begin_inset Formula $1$ +\end_inset + + +\begin_inset Quotes erd +\end_inset + + will be repeatedly pre-pended to the shapes of the smaller arrays until + all the arrays have the same number of dimensions. + The second rule of broadcasting ensures that arrays with a size of 1 along + a particular dimension act as if they had the size of the array with the + largest shape along that dimension. + The value of the array element is assumed to be the same along that dimension + for the +\begin_inset Quotes eld +\end_inset + +broadcasted +\begin_inset Quotes erd +\end_inset + + array. + After application of the broadcasting rules, the sizes of all arrays must + match. +\end_layout + +\begin_layout Standard +While a little tedious to explain, the broadcasting rules are easy to pick + up by looking at a couple of examples. + Suppose there is a +\family typewriter +ufunc +\family default + with two inputs, +\begin_inset Formula $A$ +\end_inset + + and +\begin_inset Formula $B$ +\end_inset + +. + Now supposed that +\begin_inset Formula $A$ +\end_inset + + has shape +\begin_inset Formula $4\times6\times5$ +\end_inset + + while +\begin_inset Formula $B$ +\end_inset + + has shape +\begin_inset Formula $4\times6\times1$ +\end_inset + +. + The ufunc will proceed to compute the +\begin_inset Formula $4\times6\times5$ +\end_inset + + output as if +\begin_inset Formula $B$ +\end_inset + + had been +\begin_inset Formula $4\times6\times5$ +\end_inset + + by assuming that +\begin_inset Formula $B[...,k]=B[...,0]$ +\end_inset + + for +\begin_inset Formula $k=1,2,3,4$ +\end_inset + +. + +\end_layout + +\begin_layout Standard +Another example illustrates the idea of adding +\begin_inset Formula $1$ +\end_inset + +'s to the beginning of the array shape-tuple. + Suppose +\begin_inset Formula $A$ +\end_inset + + is the same as above, but +\begin_inset Formula $B$ +\end_inset + + is a length +\begin_inset Formula $5$ +\end_inset + + array. + Because of the first rule, +\begin_inset Formula $B$ +\end_inset + + will be interpreted as a +\begin_inset Formula $1\times1\times5$ +\end_inset + + array, and then because of the second rule +\begin_inset Formula $B$ +\end_inset + + will be interpreted as a +\begin_inset Formula $4\times6\times5$ +\end_inset + + array by repeating the elements of +\begin_inset Formula $B$ +\end_inset + + in the obvious way. + +\end_layout + +\begin_layout Standard +The most common alteration needed is to route-around the automatic pre-pending + of 1's to the shape of the array. + If it is desired, to add +\begin_inset Formula $1$ +\end_inset + +'s to the end of the array shape, then dimensions can always be added using + the +\family typewriter +newaxis +\family default + name in NumPy: +\begin_inset Formula $B[...,\textrm{newaxis, newaxis}]$ +\end_inset + + returns an array with 2 additional 1's appended to the shape of +\begin_inset Formula $B.$ +\end_inset + + +\end_layout + +\begin_layout Standard +One important aspect of broadcasting is the calculation of functions on + regularly spaced grids. + For example, suppose it is desired to show a portion of the multiplication + table by computing the function +\begin_inset Formula $a*b$ +\end_inset + + on a grid with +\begin_inset Formula $a$ +\end_inset + + running from 6 to 9 and +\begin_inset Formula $b$ +\end_inset + + running from 12 to 16. + The following code illustrates how this could be done using ufuncs and + broadcasting. + +\end_layout + +\begin_layout MyCode +>>> a = arange(6, 10); print a +\newline +[6 7 8 9] +\newline +>>> b = arange(12, 17); print b +\newline +[12 + 13 14 15 16] +\newline +>>> table = a[:,newaxis] * b +\newline +>>> print table +\newline +[[ 72 78 84 90 + 96] +\newline + [ 84 91 98 105 112] +\newline + [ 96 104 112 120 128] +\newline + [108 117 126 135 144]] +\end_layout + +\begin_layout Section +Summary of new features +\end_layout + +\begin_layout Standard +More information about using arrays in Python can be found in the old Numeric + documentation at +\begin_inset LatexCommand htmlurl +name "http://numeric.scipy.org" +target "http://numeric.scipy.org" + +\end_inset + +. + Quite a bit of that documentation is still accurate, especially in the + discussion of array basics. + There are significant differences, however, and this book seeks to explain + them in detail. + The following list tries to summarize the significant new features (over + Numeric) available in the +\family typewriter +ndarray +\family default + and +\family typewriter +ufunc +\family default + objects of NumPy: +\end_layout + +\begin_layout Enumerate +more data types (all standard C-data types plus complex floats, Boolean, + string, unicode, and void *); +\end_layout + +\begin_layout Enumerate +flexible data types where each array can have a different itemsize (but + all elements of the same array still have the same itemsize); +\end_layout + +\begin_layout Enumerate +there is a true Python scalar type (contained in a hierarchy of types) for + every data-type an array can have; +\end_layout + +\begin_layout Enumerate +data-type objects define the data-type with support for data-type objects + with fields and subarrays which allow record arrays with nested records; +\end_layout + +\begin_layout Enumerate +many more array methods in addition to functional counterparts; +\end_layout + +\begin_layout Enumerate +attributes more clearly distinguished from methods (attributes are intrinsic + parts of an array so that setting them changes the array itself); +\end_layout + +\begin_layout Enumerate +array scalars covering all data types which inherit from Python scalars + when appropriate; +\end_layout + +\begin_layout Enumerate +arrays can be misaligned, swapped, and in Fortran order in memory (facilitates + memory-mapped arrays); +\end_layout + +\begin_layout Enumerate +arrays can be more easily read from text files and created from buffers + and iterators; +\end_layout + +\begin_layout Enumerate +arrays can be quickly written to files in text and/or binary mode; +\end_layout + +\begin_layout Enumerate +arrays support the removal of the 64-bit memory limitation as long as you + have Python 2.5 or later; +\end_layout + +\begin_layout Enumerate +fancy indexing can be done on arrays using integer sequences and Boolean + masks; +\end_layout + +\begin_layout Enumerate +coercion rules are altered for mixed scalar / array operations so that scalars + (anything that produces a 0-dimensional array internally) will not determine + the output type in such cases. +\end_layout + +\begin_layout Enumerate +when coercion is needed, temporary buffer-memory allocation is limited to + a user-adjustable size; +\end_layout + +\begin_layout Enumerate +errors are handled through the IEEE floating point status flags and there + is flexibility on a per-thread level for handling these errors; +\end_layout + +\begin_layout Enumerate +one can register an error callback function in Python to handle errors are + set to 'call' for their error handling; +\end_layout + +\begin_layout Enumerate +ufunc reduce, accumulate, and reduceat can take place using a different + type then the array type if desired (without copying the entire array); +\end_layout + +\begin_layout Enumerate +ufunc output arrays passed in can be a different type than expected from + the calculation; +\end_layout + +\begin_layout Enumerate +ufuncs take keyword arguments which can specify 1) the error handling explicitly + and 2) the specific 1-d loop to use by-passing the type-coercion detection. + +\end_layout + +\begin_layout Enumerate +arbitrary classes can be passed through ufuncs (__array_wrap__ and __array_prior +ity__ expand previous __array__ method); +\end_layout + +\begin_layout Enumerate +ufuncs can be easily created from Python functions; +\end_layout + +\begin_layout Enumerate +ufuncs have attributes to detail their behavior, including a dynamic doc + string that automatically generates the calling signature; +\end_layout + +\begin_layout Enumerate +several new ufuncs (frexp, modf, ldexp, isnan, isfinite, isinf, signbit); +\end_layout + +\begin_layout Enumerate +new types can be registered with the system so that specialized ufunc loops + can be written over new type objects; +\end_layout + +\begin_layout Enumerate +new types can also register casting functions and rules for fitting into + the +\begin_inset Quotes eld +\end_inset + +can-cast +\begin_inset Quotes erd +\end_inset + + hierarchy; +\end_layout + +\begin_layout Enumerate +C-API enhanced so that more of the functionality is available from compiled + code; +\end_layout + +\begin_layout Enumerate +C-API enhanced so array structure access can take place through macros; +\end_layout + +\begin_layout Enumerate +new iterator objects created for easy handling in C of non-contiguous arrays; +\end_layout + +\begin_layout Enumerate +new multi-iterator object created for easy handling in C of broadcasting; +\end_layout + +\begin_layout Enumerate +types have more functions associated with them (no magic function lists + in the C-code). + Any function needed is part of the type structure. +\end_layout + +\begin_layout Standard +All of these enhancements will be documented more thoroughly in the remaining + portions of this book. +\end_layout + +\begin_layout Section +Summary of differences with Numeric +\end_layout + +\begin_layout Standard +An effort was made to retain backwards compatibility with Numeric all the + way to the C-level. + This was mostly accomplished, with a few changes that needed to be made + for consistency of the new system. + If you are just starting out with NumPy, then this section may be skipped. +\end_layout + +\begin_layout Standard +There are two steps (one required and one optional) to converting code that + works with Numeric to work fully with NumPy The first step uses a compatibility + layer and requires only small changes which can be handled by the numpy.oldnumer +ic.alter_code1 module. + Code written to the compatibility layer will work and be supported. + The purpose of the compatibility layer is to make it easy to convert to + NumPy and many codes may only take this first step and work fine with NumPy. + The second step is optional as it removes dependency on the compatibility + layer and therefore requires a few more extensive changes. + Many of these changes can be performed by the numpy.oldnumeric.alter_code2 + module, but you may still need to do some final tweaking by hand. + Because many users will probably be content to only use the first step, + the alter_code2 module for second-stage migration may not be as complete + as it otherwise could be. + +\end_layout + +\begin_layout Subsection +First-step changes +\end_layout + +\begin_layout Standard +In order to use the compatibility layer there are still a few changes that + need to be made to your code. + Many of these changes can be made by running the alter_code1 module with + your code as input. + +\end_layout + +\begin_layout Enumerate +Importing (the alter_code1 module handles all these changes) +\end_layout + +\begin_deeper +\begin_layout Enumerate +import Numeric --> import numpy.oldnumeric as Numeric +\end_layout + +\begin_layout Enumerate +import Numeric as XX --> import numpy.oldnumeric as XX +\end_layout + +\begin_layout Enumerate +from Numeric import <name1>,...<nameN> --> from numpy.oldnumeric import <name1>,...,<na +meN> +\end_layout + +\begin_layout Enumerate +from Numeric import * --> from numpy.oldnumeric import * +\end_layout + +\begin_layout Enumerate +Similar name changes need to be made for Matrix, MLab, UserArray, LinearAlgebra, + RandomArray RNG, RNG.Statistics, and FFT. + The new names are numpy.oldnumeric.<pkg> where <pkg> is matrix, mlab, user_array, + linear_algebra, random_array, rng, rng_stats, and fft. + +\end_layout + +\begin_layout Enumerate +multiarray and umath (if you used them directly) are now numpy.core.multiarray + and numpy.core.umath, but it is more future proof to replace usages of these + internal modules with numpy.oldnumeric. +\end_layout + +\end_deeper +\begin_layout Enumerate +Method name changes and methods converted to attributes. + The alter_code1 module handles all these changes. + +\end_layout + +\begin_deeper +\begin_layout Enumerate + +\emph on +arr +\emph default +.typecode() --> +\emph on +arr +\emph default +.dtype.char +\end_layout + +\begin_layout Enumerate + +\emph on +arr +\emph default +.iscontiguous() --> +\emph on +arr +\emph default +.flags.contiguous +\end_layout + +\begin_layout Enumerate + +\emph on +arr +\emph default +.byteswapped() --> +\emph on +arr +\emph default +.byteswap() +\end_layout + +\begin_layout Enumerate + +\emph on +arr +\emph default +.toscalar() --> +\emph on +arr +\emph default +.item() +\end_layout + +\begin_layout Enumerate + +\emph on +arr +\emph default +.itemsize() --> +\emph on +arr +\emph default +.itemsize +\end_layout + +\begin_layout Enumerate + +\emph on +arr +\emph default +.spacesaver() eliminated +\end_layout + +\begin_layout Enumerate + +\emph on +arr +\emph default +.savespace() eliminated +\end_layout + +\end_deeper +\begin_layout Enumerate +Some of the typecode characters have changed to be more consistent with + other Python modules (array and struct). + You should only notice this change if you used the actual typecode characters + (instead of the named constants). + +\newline +The alter_code1 module will change uses of 'b' to 'B' for internal Numeric + functions that it knows about because NumPy will interpret 'b' to mean + a signed byte type (instead of the old unsigned). + It will also change the character codes when they are used explicitly in + the .astype method. + In the compatibility layer (and only in the compatibility layer), typecode-requ +iring function calls ( +\emph on +e.g. + +\emph default + zeros, array) understand the old typecode characters. + +\newline +The changes are (Numeric --> NumPy): +\end_layout + +\begin_deeper +\begin_layout Enumerate +'b' --> 'B' +\end_layout + +\begin_layout Enumerate +'1' --> 'b' +\end_layout + +\begin_layout Enumerate +'s' --> 'h' +\end_layout + +\begin_layout Enumerate +'w' --> 'H' +\end_layout + +\begin_layout Enumerate +'u' --> 'I' +\end_layout + +\end_deeper +\begin_layout Enumerate + +\emph on +arr. +\emph default +flat now returns an indexable 1-D iterator. + This behaves correctly when passed to a function, but if you expected methods + or attributes on +\emph on +arr. +\emph default +flat --- besides .copy() --- then you will need to replace +\emph on +arr +\emph default +.flat with +\emph on +arr. +\emph default +ravel() (copies only when necessary) or +\emph on +arr. +\emph default +flatten() (always copies). + The alter_code1 module will change +\emph on +arr +\emph default +.flat to +\emph on +arr +\emph default +.ravel() unless you used the construct +\emph on +arr +\emph default +.flat = obj or +\emph on +arr +\emph default +.flat[ind]. +\end_layout + +\begin_layout Enumerate +If you used type-equality testing on the objects returned from arrays, then + you need to change this to isinstance testing. + Thus type(a[0]) is float or type(a[0]) == float should be changed to isinstance +(a[0], float). + This is because array scalar objects are now returned from arrays. + These inherit from the Python scalars where they can, but define their + own methods and attributes. + This conversion is done by alter_code1 for the types (float, int, complex, + and ArrayType) +\end_layout + +\begin_layout Enumerate +If your code should produce 0-d arrays. + These no-longer have a length as they should be interpreted similarly to + real scalars which don't have a length. + +\end_layout + +\begin_layout Enumerate +Arrays cannot be tested for truth value unless they are empty (returns False) + or have only one element. + This means that if Z: where Z is an array will fail (unless Z is empty + or has only one element). + Also the 'and' and 'or' operations (which test for object truth value) + will also fail on arrays of more than one element. + Use the .any() and .all() methods to test for truth value of an array. + +\end_layout + +\begin_layout Enumerate +Masked arrays return a special nomask object instead of None when there + is no mask on the array for the functions getmask and attribute access + +\emph on +arr +\emph default +.mask +\end_layout + +\begin_layout Enumerate +Masked array functions have a default axis of None (meaning ravel), make + sure to specify an axis if your masked arrays are larger than 1-d. + +\end_layout + +\begin_layout Enumerate +If you used the construct +\family typewriter +arr.shape=<tuple> +\family default +, this will not work for array scalars (which can be returned from array + operations). + You cannot set the shape of an array-scalar (you can read it though). + As a result, for more general code you should use +\family typewriter +arr=arr.reshape(<tuple>) +\family default + which works for both array-scalars and arrays. + +\end_layout + +\begin_layout Standard +The alter_code1 script should handle the changes outlined in steps 1-5 above. + The final incompatibilities in 6-9 are less common and must be modified + by hand if necessary. + +\end_layout + +\begin_layout Subsection +Second-step changes +\end_layout + +\begin_layout Standard +During the second phase of migration (should it be necessary) the compatibility + layer is dropped. + This phase requires additional changes to your code. + There is another conversion module (alter_code2) which can help but it + is not complete. + The changes required to drop dependency on the compatibility layer are +\end_layout + +\begin_layout Enumerate +Importing +\end_layout + +\begin_deeper +\begin_layout Enumerate +numpy.oldnumeric --> numpy +\end_layout + +\begin_layout Enumerate +from numpy.oldnumeric import * --> from numpy import * (this may clobber + more names and therefore require further fixes to your code but then you + didn't do this regularly anyway did you). + The recommended procedure if this replacement causes problems is to fix + the use of from numpy.oldnumeric import * to extract only the required names + and then continue. +\end_layout + +\begin_layout Enumerate +numpy.oldnumeric.mlab --> None, the functions come from other places. +\end_layout + +\begin_layout Enumerate +numpy.oldnumeric.linear_algebra --> numpy.lilnalg with name changes to the + functions (made lower case and shorter). +\end_layout + +\begin_layout Enumerate +numpy.oldnumeric.random_array --> numpy.random with some name changes to the + functions. +\end_layout + +\begin_layout Enumerate +numpy.oldnumeic.fft --> numpy.fft with some name changes to the functions. +\end_layout + +\begin_layout Enumerate +numpy.oldnumeric.rng --> None +\end_layout + +\begin_layout Enumerate +numpy.oldnumeric.rng_stats --> None +\end_layout + +\begin_layout Enumerate +numpy.oldnumeric.user_array --> numpy.lib.user_array +\end_layout + +\begin_layout Enumerate +numpy.oldnumeric.matrix --> numpy +\end_layout + +\end_deeper +\begin_layout Enumerate +The typecode names are all lower-case and refer to type-objects corresponding + to array scalars. + The character codes are understood by array-creation functions but are + not given names. + All named type constants should be replaced with their lower-case equivalents. + Also, the old character codes '1', 's', 'w', and 'u' are not understood + as data-types. + It is probably easiest to manually replace these with Int8, Int16, UInt16, + and UInt32 and let the alter_code2 script convert the names to lower-case + typeobjects. + +\end_layout + +\begin_layout Enumerate +Keyword and argument changes +\end_layout + +\begin_deeper +\begin_layout Enumerate +All +\family typewriter +typecode= +\family default + keywords must be changed to +\family typewriter +dtype= +\family default +. + +\end_layout + +\begin_layout Enumerate +The +\family typewriter +savespace +\family default + keyword argument has been removed from all functions where it was present + (array, sarray, asarray, ones, and zeros). + The sarray function is equivalent to asarray. +\end_layout + +\end_deeper +\begin_layout Enumerate +The default data-type in NumPy is float unlike in Numeric (and numpy.oldnumeric) + where it was int. + There are several functions affected by this so that if your code was relying + on the default data-type, then it must be changed to explicitly add dtype=int. +\end_layout + +\begin_layout Enumerate +The nonzero function in NumPy returns a tuple of index arrays just like + the corresponding method. + There is a flatnonzero function that first ravels the array and then returns + a single index array. + This function should be interchangeable with the old use of nonzero. + +\end_layout + +\begin_layout Enumerate +The default axis is None (instead of 0) to match the methods for the functions + take, repeat, sum, average, product, sometrue, alltrue, cumsum, and cumproduct + (from Numeric) and also for the functions average, max, min, ptp, prod, + std, and mean (from MLab). +\end_layout + +\begin_layout Enumerate +The default axis is None (instead of -1) to match the methods for the functions + argmin, argmax, compress +\end_layout + +\begin_layout Subsection +Updating code that uses Numeric using alter_codeN +\end_layout + +\begin_layout Standard +Despite the long list of changes that might be needed given above, it is + likely that your code does not use any of the incompatible corners and + it should not be too difficult to convert from Numeric to NumPy. + For example all of SciPy was converted in about 2-3 days. + The needed changes are largely search-and replace type changes, and the + alter_codeN modules can help. + The modules have two functions which help the process: +\end_layout + +\begin_layout Description +convertfile (filename, orig=1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert the file with the given filename to use NumPy. + If orig is True, then a backup is first made and given the name filename.orig. + Then, the file is converted and the updated code written over the top of + the old file. + +\end_layout + +\begin_layout Description +convertall (direc=os.path.curdir, orig=1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Converts all the +\begin_inset Quotes eld +\end_inset + +.py +\begin_inset Quotes erd +\end_inset + + files in the given directory to use NumPy. + Backups of all the files are first made if orig is True as explained for + the convertfile function. + +\end_layout + +\begin_layout Description +convertsrc (direc=os.path.curdir, ext=None, orig=1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Replace +\family typewriter +''Numeric/arrayobject.h +\begin_inset Quotes erd +\end_inset + + +\family default + with +\family typewriter +''numpy/oldnumeric.h +\begin_inset Quotes erd +\end_inset + + +\family default + in all files ending in the list of extensions given by ext (if ext is None, + then all files are updated). + If orig is True, then first make a backup file with +\begin_inset Quotes eld +\end_inset + +.orig +\begin_inset Quotes erd +\end_inset + + as the extension. +\end_layout + +\begin_layout Description +converttree (direc=os.path.curdir) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Walks the tree pointed to by direc and converts all +\begin_inset Quotes eld +\end_inset + +.py +\begin_inset Quotes erd +\end_inset + + modules in each sub-directory to use NumPy. + No backups of the files are made. + Also, converts all .h and .c files to replace +\family typewriter +''Numeric/arrayobject.h +\begin_inset Quotes erd +\end_inset + + +\family default + with +\family typewriter +''numpy/oldnumeric.h +\begin_inset Quotes erd +\end_inset + + +\family default + so that NumPy is used. + +\end_layout + +\begin_layout Subsection +Changes to think about +\end_layout + +\begin_layout Standard +Even if you don't make changes to your old code. + If you are used to coding in Numeric, then you may need to adjust your + coding style a bit. + This list provides some helpful things to remember. + +\end_layout + +\begin_layout Enumerate +Switch from using typecode characters to bitwidth type names or c-type names + +\end_layout + +\begin_layout Enumerate +Convert use of uppercase type-names Int32, Float, etc., to lower case int32, + float, etc. +\end_layout + +\begin_layout Enumerate +Convert use of functions to method calls where appropriate but explicitly + specify any axis arguments for arrays greater than 1-d. + +\end_layout + +\begin_layout Enumerate +The names for standard computations like Fourier transforms, linear algebra, + and random-number generation have changed to conform to the standard of + lower-case names possibly separated by an underscore. +\end_layout + +\begin_layout Enumerate +Look for ways to take advantage of advanced slicing, but remember it always + returns a copy and may be slower at times. +\end_layout + +\begin_layout Enumerate +Remove any kludges you inserted to eliminate problems with Numeric that + are now gone. + +\end_layout + +\begin_layout Enumerate +Look for ways to take advantage of new features like expanded data-types + (record-arrays). + +\end_layout + +\begin_layout Enumerate +See if you can inherit from the ndarray directly, rather than using user_array.co +ntainer (UserArray). + However, if you were using UserArray in a multiple-inheritance hierarchy + this is going to be more difficult and you can continue to use the standard + container class in user_array (but notice the name change). + +\end_layout + +\begin_layout Enumerate +Watch your usage of scalars extracted from arrays. + Treating Numeric arrays like lists and then doing math on the elements + 1 by 1 was always about 2x slower than using real lists in Python. + This can now be 3x-6x slower than using lists in NumPy because of the increased + complexity of both the indexing of ndarrays and the math of array scalars. + If you must select individual scalars from NumPy, you can get some speed + increases by using the item method to get a standard Python scalar from + an N-d array and by using the itemset method to place a scalar into a particula +r location in the N-d array. + This complicates the appearance of the code, however. + Also, when using these methods inside a loop, be sure to assign the methods + to a local variable to avoid the attribute look-up at each loop iteration. + +\end_layout + +\begin_layout Standard +Throughout this book, warnings are inserted when compatibility issues with + old Numeric are raised. + While you may not need to make any changes to get code to run with the + ndarray object, you will likely want to make changes to take advantage + of the new features of NumPy. + If you get into a jam during the conversion process, you should be aware + that Numeric and NumPy can both be used together and they will not interfere + with each other. + In addition, if you have Numeric 24.0 or newer, they can even share the + same memory. + This makes it easy to use NumPy as well as third-party tools that have + not made the switch from Numeric yet. +\end_layout + +\begin_layout Section +Summary of differences with Numarray +\end_layout + +\begin_layout Standard +Conversion from Numarray can also be relatively painless, depending on how + dependent your code is on the specific structure of the Numarray ufuncs, + cfuncs, and various array-like objects. + The internals of Numarray can be quite different and so depending on how + intimately you used those internals adapting to NumPy can be more or less + difficult. + C-code that used the Numarray C-API can be easily adapted because NumPy + includes a Numarray-compatible C-API module. + All you need to do is replace usage of +\begin_inset Quotes eld +\end_inset + +numarray/libnumarray.h +\begin_inset Quotes erd +\end_inset + + with +\begin_inset Quotes eld +\end_inset + +numpy/libnumarray.h +\begin_inset Quotes erd +\end_inset + + and be sure the directory returned from the Python command numpy.get_numarray_in +clude() is included in the list of directories used for compilation. +\end_layout + +\begin_layout Standard +On the Python-side the largest number of differences are in the methods + and attributes of the array and the way array data-types are represented. + In addition, arrays containing Python Objects, strings, and records are + an integral part of the array object and not handled using a separate class + (although enhanced separate classes do exist for the case of character + arrays and record arrays). + +\end_layout + +\begin_layout Standard +As is the case with Numeric, there is a two-step process available for migrating + code written for Numarray to work with NumPy. + This process involves running functions in the modules alter_code1 and + alter_code2 located in the numarray sub-package of NumPy. + These modules have interfaces identical to the ones that convert Numeric + code, but they work to convert code written for numarray. + The first module will convert your code to use the numarray compatibility + module (numpy.numarray), while the second will try and help convert code + to move away from dependency on the compatibility module. + Because many users will probably be content to only use the first step, + the alter_code2 module for second-stage migration may not be as complete + as it otherwise could be. + +\end_layout + +\begin_layout Standard +Also, the alter_code1 module is not guaranteed to convert every piece of + working numarray code to use NumPy. + If your code relied on the internal module structure of numarray or on + how the class hierarchy was laid out, then it will need to be changed manually + to run with NumPy. + Of course you can still use your code with Numarray installed side-by-side + and the two array objects should be able to exchange data without copying. + +\end_layout + +\begin_layout Subsection +First-step changes +\end_layout + +\begin_layout Standard +The alter_code1 script makes the following import and attribute/method changes +\end_layout + +\begin_layout Subsubsection +Import changes +\end_layout + +\begin_layout Itemize +import numarray --> import numpy.numarray as numarray +\end_layout + +\begin_layout Itemize +import numarray.package --> import numpy.numarray.package as numarray_package + with all usages of numarray.package in the code replaced by numarray_package +\end_layout + +\begin_layout Itemize +import numarray as <name> --> import numpy.numarray s <name> +\end_layout + +\begin_layout Itemize +import numarray.package as <name> --> import numpy.numarray.package as <name> +\end_layout + +\begin_layout Itemize +from numarray import <names> --> from numpy.numarray import <names> +\end_layout + +\begin_layout Itemize +from numarray.package import <names> --> from numpy.numarray.package import + <names> +\end_layout + +\begin_layout Subsubsection +Attribute and method changes +\end_layout + +\begin_layout Itemize +.imaginary --> .imag +\end_layout + +\begin_layout Itemize +.flat --> probably .ravel() (Many usages will still work correctly because + you can index and assign to self.flat) +\end_layout + +\begin_layout Itemize +.byteswapped() --> .byteswap(False) +\end_layout + +\begin_layout Itemize +.byteswap() --> .byteswap(True) (Returns a reference to self instead of None). + +\end_layout + +\begin_layout Itemize +self.info() --> numarray.info(self) +\end_layout + +\begin_layout Itemize +.isaligned() --> .flags.aligned +\end_layout + +\begin_layout Itemize +.isbyteswapped() --> not .dtype.isnative (the byte-order is a property of the + data-type object not the array itself in NumPy). + +\end_layout + +\begin_layout Itemize +.iscontiguous() --> .flags.c_contiguous +\end_layout + +\begin_layout Itemize +.is_c_array() --> .dtype.isnative and .flags.carray +\end_layout + +\begin_layout Itemize +.is_fortran_contiguous() --> .flags.f_contiguous +\end_layout + +\begin_layout Itemize +.is_f_array() --> .dtype.isnative and .flags.farray +\end_layout + +\begin_layout Itemize +.itemsize() --> .itemsize +\end_layout + +\begin_layout Itemize +.nelements() --> .size +\end_layout + +\begin_layout Itemize +self.new(type) --> numarray.newobj(self, type) +\end_layout + +\begin_layout Itemize +.repeat(r) --> .repeat(r, axis=0) +\end_layout + +\begin_layout Itemize +.size() --> .size +\end_layout + +\begin_layout Itemize +.type() --> numarray.typefrom(self) +\end_layout + +\begin_layout Itemize +.typecode() --> .dtype.char +\end_layout + +\begin_layout Itemize +.stddev() --> .std() +\end_layout + +\begin_layout Itemize +.togglebyteorder() --> numarray.togglebyteorder(self) +\end_layout + +\begin_layout Itemize +.getshape() --> .shape +\end_layout + +\begin_layout Itemize +.setshape(obj) --> .shape = obj +\end_layout + +\begin_layout Itemize +.getflat() --> .ravel() +\end_layout + +\begin_layout Itemize +.getreal() --> .real +\end_layout + +\begin_layout Itemize +.setreal(obj) --> .real = obj +\end_layout + +\begin_layout Itemize +.getimag() --> .imag +\end_layout + +\begin_layout Itemize +.setimag(obj) --> .imag = obj +\end_layout + +\begin_layout Itemize +.getimaginary() --> .imag +\end_layout + +\begin_layout Itemize +.setimaginary(obj) --> .imag = obj +\end_layout + +\begin_layout Subsection +Second-step changes +\end_layout + +\begin_layout Standard +One of the notable differences is that several functions (array, arange, + fromfile, and fromstring) do not take the shape= keyword argument. + Instead you simply reshape the result using the reshape method. + Another notable difference is that instead of allowing typecode=, type=, + and dtype= variants for specifying the data-types, you must use the dtype= + keyword. + Other differences include +\end_layout + +\begin_layout Itemize +matrixmultiply(a,b) --> dot(a,b) +\end_layout + +\begin_layout Itemize +innerproduct(a,b) --> inner(a,b) +\end_layout + +\begin_layout Itemize +outerproduct(a,b) --> outer(a,b) +\end_layout + +\begin_layout Itemize +kroneckerproduct(a,b) --> kron(a,b) +\end_layout + +\begin_layout Itemize +tensormultiply(a,b) --> None +\end_layout + +\begin_layout Subsection +Additional Extension modules +\end_layout + +\begin_layout Standard +There are three extension packages that come included with numarray which + are now downloaded separately. + Stubs for these packages exist in numpy.numarray but they try and find the + actual code by looking at what is currently installed. + These packages are available in SciPy but can be installed separately as + well: +\end_layout + +\begin_layout Itemize +nd_image --> scipy.ndimage +\end_layout + +\begin_layout Itemize +convolve --> scipy.stsci.convolve +\end_layout + +\begin_layout Itemize +image --> scipy.stsci.image +\end_layout + +\begin_layout Standard +If you don't want to install all of scipy, you can grab just these packages + from SVN using +\end_layout + +\begin_layout LyX-Code +svn co http://svn.scipy.org/svn/scipy/trunk/Lib/ndimage ndimage +\end_layout + +\begin_layout LyX-Code +svn co http://svn.scipy.org/svn/scipy/trunk/Lib/stsci stsci +\end_layout + +\begin_layout Standard +and then run +\end_layout + +\begin_layout LyX-Code +cd ndimage; sudo python setup.py install +\end_layout + +\begin_layout LyX-Code +cd stsci; sudo python setup.py install +\end_layout + +\begin_layout Standard +On a Windows system, you can use the Tortoise SVN client which is integrated + into the Windows Explorer. + It can be downloaded from http://tortoisesvn.tigris.org. + Instructions on how to use it are also provided on that site. + After downloading the packages from SVN, installation will still require + a C-compiler (the mingw32 compiler works fine even with MSVC-compiled Python + as long as you specify --compiler=mingw32). + Alternatively you can download binary releases of scipy from http://www.scipy.org + to get the needed functionality or use the Enthon edition of Python. +\end_layout + +\begin_layout Chapter +The Array Object +\end_layout + +\begin_layout Quotation +Don't worry about people stealing your ideas. + If your ideas are any good, you'll have to ram them down people's throats. +\end_layout + +\begin_layout Right Address +--- +\emph on +Howard Aiken, IBM engineer +\end_layout + +\begin_layout Quotation +No idea is so antiquated that it was not once modern; no idea is so modern + that it will not someday be antiquated. +\end_layout + +\begin_layout Right Address +--- +\emph on +Ellen Glasgow +\end_layout + +\begin_layout Section + +\family typewriter +ndarray +\family default + Attributes +\end_layout + +\begin_layout Standard +Array +\begin_inset LatexCommand index +name "ndarray|(" + +\end_inset + + attributes reflect information that is intrinsic to the array itself. + Generally, accessing an array through its attributes allows you to get + and sometimes set intrinsic properties of the array without creating a + new array. + The exposed attributes are the core parts of an array and only some of + them can be reset meaningfully without creating a new array. + Table +\begin_inset LatexCommand ref +reference "cap:ndarray-attributes" + +\end_inset + + shows all the attributes +\begin_inset LatexCommand index +name "ndarray!attributes|(" + +\end_inset + + with a brief description. + Detailed information on each attribute is given below. +\end_layout + +\begin_layout Warning +Numeric Compatibility: you should check your old use of the .flat attribute. + This attribute now returns an iterator object which acts like a 1-d array + in terms of indexing. + while it does not share all the attributes or methods of an array, it will + be interpreted as an array in functions that take objects and convert them + to arrays. + Furthermore, Any changes in an array converted from a 1-d iterator will + be reflected back in the original array when the converted array is deleted. + +\end_layout + +\begin_layout Standard +\begin_inset Float table +wide false +sideways false +status open + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +\begin_inset LatexCommand label +name "cap:ndarray-attributes" + +\end_inset + +Attributes of the +\family typewriter +ndarray +\family default +. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset ERT +status collapsed + +\begin_layout Standard + + +\backslash +vspace*{-0.2in} +\backslash +setlength{ +\backslash +extrarowheight}{0.25eM} +\end_layout + +\begin_layout Standard + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align center +\begin_inset Tabular +<lyxtabular version="3" rows="18" columns="3"> +<features> +<column alignment="center" valignment="top" leftline="true" width="1in"> +<column alignment="center" valignment="top" leftline="true" width="1in"> +<column alignment="block" valignment="top" leftline="true" rightline="true" width="3in"> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family sans +\series bold +\size large +Attribute +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family sans +\series bold +\size large +Settable +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family sans +\series bold +\size large +Description +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +flags +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +No +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +special array-connected dictionary-like object with attributes showing the + state of flags in this array; only the flags WRITEABLE, ALIGNED, and UPDATEIFCO +PY can be modified by setting attributes of this object +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +shape +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Yes +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +tuple showing the array shape; setting this attribute re-shapes the array +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +strides +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Yes +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +tuple showing how many +\emph on +bytes +\emph default + must be jumped in the data segment to get from one entry to the next +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +ndim +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +No +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +number of dimensions in array +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +data +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Yes +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +buffer object loosely wrapping the array data (only works for single-segment + arrays) +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +size +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +No +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +total number of elements +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +itemsize +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +No +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +size (in bytes) of each element +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +nbytes +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +No +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +total number of bytes used +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +base +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +No +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +object this array is using for its data buffer, or None if it owns its own + memory +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +dtype +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Yes +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +data-type object for this array +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +real +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Yes +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +real part of the array; setting copies data to real part of current array +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +imag +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Yes +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +imaginary part, or read-only zero array if type is not complex; setting + works only if type is complex +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +flat +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Yes +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +one-dimensional, indexable iterator object that acts somewhat like a 1-d + array +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +ctypes +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +No +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +object to simplify the interaction of this array with the ctypes module +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +__array_interface__ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +No +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +dictionary with keys (data, typestr, descr, shape, strides) for compliance + with Python side of array protocol +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +__array_struct__ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +No +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +array interface on C-level +\end_layout + +\end_inset +</cell> +</row> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +__array_priority__ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +No +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +always 0.0 for base type +\family typewriter +ndarray +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection +Memory Layout attributes +\end_layout + +\begin_layout Description +flags +\begin_inset LatexCommand index +name "ndarray!attributes!flags" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Array flags +\begin_inset LatexCommand index +name "ndarray!flags|(" + +\end_inset + + provide information about how the memory area used for the array is to + be interpreted. + There are 6 Boolean flags in use which govern whether or not: +\end_layout + +\begin_deeper +\begin_layout Description +C_CONTIGUOUS\InsetSpace ~ +(C) the data is in a single, C-style contiguous segment; +\end_layout + +\begin_layout Description +F_CONTIGUOUS\InsetSpace ~ +(F) the data is in a single, Fortran-style contiguous segment; +\end_layout + +\begin_layout Description +OWNDATA\InsetSpace ~ +(O) the array owns the memory it uses or if it borrows it from another + object (if this is False, the base attribute retrieves a reference to the + object this array obtained its data from); +\end_layout + +\begin_layout Description +WRITEABLE\InsetSpace ~ +(W) the data area can be written to; +\end_layout + +\begin_layout Description +ALIGNED\InsetSpace ~ +(A) the data and strides are aligned appropriately for the hardware + (as determined by the compiler); +\end_layout + +\begin_layout Description +UPDATEIFCOPY\InsetSpace ~ +(U) this array is a copy of some other array (referenced by + +\family typewriter +.base +\family default +). + When this array is deallocated, the base array will be updated with the + contents of this array. +\end_layout + +\end_deeper +\begin_layout Description +\InsetSpace ~ + Only the +\series bold +UPDATEIFCOPY +\series default +, +\series bold +WRITEABLE +\series default +, and +\series bold +ALIGNED +\series default + flags can be changed by the user. + This can be done using the special array-connected, dictionary-like object + that the flags attribute returns. + By setting elements in this dictionary, the underlying array obect's flags + are altered. + Flags can also be changed using the method +\family typewriter +setflags +\family default +(...). + All flags in the dictionary can be accessed using their first (upper case) + letter as well as the full name. + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Certain logical combinations of flags can also be read using named keys + to the special flags dictionary. + These combinations are +\end_layout + +\begin_deeper +\begin_layout Description +FNC Returns F_CONTIGUOUS and not C_CONTIGUOUS +\end_layout + +\begin_layout Description +FORC Returns F_CONTIGUOUS or C_CONTIGUOUS (one-segment test). +\end_layout + +\begin_layout Description +BEHAVED\InsetSpace ~ +(B) Returns ALIGNED and WRITEABLE +\end_layout + +\begin_layout Description +CARRAY\InsetSpace ~ +(CA) Returns BEHAVED and C_CONTIGUOUS +\end_layout + +\begin_layout Description +FARRAY_(FA) Returns BEHAVED and F_CONTIGUOUS and not C_CONTIGUOUS +\end_layout + +\end_deeper +\begin_layout Note +The array flags cannot be set arbitrarily. + UPDATEIFCOPY can only be set False. + the ALIGNED flag can only be set True if the data is truly aligned. + The flag WRITEABLE can only be set True if the array owns its own memory + or the ultimate owner of the memory exposes a writeable buffer interface + (or is a string). + The exception for string is made so that unpickling can be done without + copying memory. + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Flags can also be set and read using attribute access with the lower-case + key equivalent (without first letter support). + Thus, for example, self.flags.c_contiguous returns whether or not the array + is C-style contiguous, and self.flags.writeable=True changes the array to + be writeable (if possible) +\begin_inset LatexCommand index +name "ndarray!flags|)" + +\end_inset + +. +\end_layout + +\begin_layout Description +shape +\begin_inset LatexCommand index +name "ndarray!attributes!shape" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The shape of the array is a tuple giving the number of elements in each + dimension. + The shape can be reset for single-segment arrays by setting this attribute + to another tuple. + The total number of elements cannot change. + However, a -1 may be used in a dimension entry to indicate that the array + length in that dimension should be computed so that the total number of + elements does not change. + +\family typewriter +a.shape=x +\family default + is equivalent to +\family typewriter +a=a.reshape(x) +\family default + except the latter can be used even if the array is not single-segment and + even if +\begin_inset Formula $a$ +\end_inset + + is an array scalar. + +\end_layout + +\begin_layout Note +Setting the shape attribute to () for a 1-element array will turn self into + a 0-dimensional array. + This is one of the few ways to get a 0-dimensional array in Python. + Most other operations will return an array scalar. + Other ways to get a 0-dimensional array in Python include calling array + with a scalar argument and calling the squeeze method of an array whose + shape is all 1's. + +\end_layout + +\begin_layout Description +strides +\begin_inset LatexCommand index +name "ndarray!attributes!strides" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The strides of an array is a tuple showing for each dimension how many + +\emph on +bytes +\emph default + must be skipped to get to the next element in that dimension. + Setting this attribute to another tuple will change the way the memory + is viewed. + This attribute can only be set to a tuple that will not cause the array + to access unavailable memory. + If an attempt is made to do so, ValueError is raised. +\end_layout + +\begin_layout Description +ndim +\begin_inset LatexCommand index +name "ndarray!attributes!ndim" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The number of dimensions of an array is sometimes called the rank of the + array. + Getting this attribute reveals the length of the shape tuple and the strides + tuple. + +\end_layout + +\begin_layout Description +data +\begin_inset LatexCommand index +name "ndarray!attributes!data" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + A buffer object referencing the actual data for this array if this array + is single-segment. + If the array is not single-segment, then an AttributeError is raised. + The buffer object is writeable depending on the status of self.flags.writeable. +\end_layout + +\begin_layout Description +size +\begin_inset LatexCommand index +name "ndarray!attributes!size" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The total number of elements in the array. +\end_layout + +\begin_layout Description +itemsize +\begin_inset LatexCommand index +name "ndarray!attributes!itemsize" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The number of bytes each element of the array requires. + +\end_layout + +\begin_layout Description +nbytes +\begin_inset LatexCommand index +name "ndarray!attributes!nbytes" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The total number of bytes used by the array. + This is equal to +\family typewriter +self.itemsize*self.size +\family default +. +\end_layout + +\begin_layout Description +base +\begin_inset LatexCommand index +name "ndarray!attributes!base" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + If the array does not own its own memory, then this attribute returns the + object whose memory this array is referencing. + The returned object may not be the original allocator of the memory, but + may be borrowing it from still another object. + If this array does own its own memory, then None is returned unless the + UPDATEIFCOPY flag is True in which case self.base is the array that will + be updated when self is deleted. + UPDATEIFCOPY gets set for an array that is created as a behaved copy of + a general array. + The intent is for the misaligned array to get any changes that occur to + the copy. + +\end_layout + +\begin_layout Subsection +Data Type attributes +\end_layout + +\begin_layout Standard +There are several ways to specify the kind of data that the array is composed + of. + The fullest description that preserves field information is always obtained + using an actual dtype object. + See Chapter +\begin_inset LatexCommand ref +reference "cha:Data-descriptor-objects" + +\end_inset + + for more discussion on data-type objects and acceptable arguments to construct + data-type objects. + Three commonly-used attributes of the data-type object returned are also + documented here. +\end_layout + +\begin_layout Description +dtype +\begin_inset LatexCommand index +name "ndarray!attributes!dtype" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + A data-type object that fully describes (including any defined fields) + each fixed-length item in the array. + Whether or not the data is in machine byte-order is also determined by + the data-type. + The data-type attribute can be set to anything that can be interpreted + as a data-type (see Chapter +\begin_inset LatexCommand ref +reference "cha:Data-descriptor-objects" + +\end_inset + + for more information). + Setting this attribute allows you to change the interpretation of the data + in the array. + The new data-type must be compatible with the array's current data-type. + The new data-type is compatible if it has the same itemsize as the current + data-type descriptor, or (if the array is a single-segment array) if the + the array with the new data-type fits in the memory already consumed by + the array. + +\end_layout + +\begin_layout Description +dtype.type +\end_layout + +\begin_layout Description +\InsetSpace ~ + A Python type object gives the typeobject whose instances represent elements + of the array. + This type object can be used to instantiate a scalar of that type. + +\end_layout + +\begin_layout Description +dtype.char +\end_layout + +\begin_layout Description +\InsetSpace ~ + A typecode character unique to each of the 21 built-in types. + +\end_layout + +\begin_layout Description +dtype.str +\end_layout + +\begin_layout Description +\InsetSpace ~ + This string consists of a required first character giving the +\begin_inset Quotes eld +\end_inset + +endianness +\begin_inset Quotes erd +\end_inset + + of the data ( +\begin_inset Quotes eld +\end_inset + +< +\begin_inset Quotes erd +\end_inset + + for little endian, +\begin_inset Quotes eld +\end_inset + +> +\begin_inset Quotes erd +\end_inset + + for big endian, and +\begin_inset Quotes eld +\end_inset + +| +\begin_inset Quotes erd +\end_inset + + for irrelevant), the second character is a code for the kind of data ('b' + for Boolean, 'i' for signed integer, 'u' for unsigned integer, 'f' for + floating-point, 'c' for complex floating point, 'O' for object, 'S' for + ASCII string, 'U' for unicode, and 'V' for void), the final characters + give the number of bytes each element uses. +\end_layout + +\begin_layout Subsection +Other attributes +\end_layout + +\begin_layout Description +T +\begin_inset LatexCommand index +name "ndarray!attributes!T" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to self.transpose(). + For self.ndim < 2, it returns a view of self. + +\end_layout + +\begin_layout Warning +If arr is 0- or 1-dimensional, then arr.T will return a new ndarray which + refers to the same data as arr. + This is because transpose has the effect of reversing the shape attribute + of an array (whose 0-d and 1-d equivalent is to return the same array). + This may be surprising if you are thinking of your 1-d array as a +\begin_inset Quotes eld +\end_inset + +row +\begin_inset Quotes erd +\end_inset + + or a +\begin_inset Quotes eld +\end_inset + +column +\begin_inset Quotes erd +\end_inset + + vector and expected the .T attribute to return the other convention. + +\end_layout + +\begin_layout Description +real +\begin_inset LatexCommand index +name "ndarray!attributes!real" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The real part of an array. + For arrays that are not complex this attribute returns the array itself. + Setting this attribute allows setting just the real part of an array. + If the array is already real then setting this attribute is equivalent + to self[...] = values. +\end_layout + +\begin_layout Description +imag +\begin_inset LatexCommand index +name "ndarray!attributes!imag" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + A view of the imaginary part of an array. + For arrays that are not complex, this returns a read-only array of zeros. + Setting this array allows in-place alteration of the complex part of an + imaginary array. + If the array is not complex, then trying to set this attribute raises an + Error. + +\end_layout + +\begin_layout Description +flat +\begin_inset LatexCommand index +name "ndarray!attributes!flat" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an iterator object (numpy.flatiter) that acts like a 1-d version + of the array. + 1-d indexing works on this array and it can be passed in to most routines + as an array wherein a 1-d array will be constructed from it. + The new 1-d array will reference this array's data if this array is C-style + contiguous, otherwise, new memory will be allocated for the 1-d array, + the UPDATEIFCOPY flag will be set for the new array, and this array will + have its WRITEABLE flag set FALSE until the the last reference to the new + array disappears. + When the last reference to the new 1-d array disappears, the data will + be copied over to this non-contiguous array. + This is done so that a.flat effectively references the current array regardless + of whether or not it is contiguous or non-contiguous. + As an example, consider the following code: +\end_layout + +\begin_layout MyCode +>>> a = zeros((4,5)) +\newline +>>> b = ones(6) +\newline +>>> add(b,b,a[1:3,0:3].flat) +\newline +array([[ 2., + 2., 2.], +\newline + [ 2., 2., 2.]]) +\newline +>>> print a +\newline +[[ 0. + 0. + 0. + 0. + 0.] +\newline + [ 2. + 2. + 2. + 0. + 0.] +\newline + [ 2. + 2. + 2. + 0. + 0.] +\newline + [ 0. + 0. + 0. + 0. + 0.]] +\end_layout + +\begin_layout Description +\InsetSpace ~ + The numpy.flatiter object has two methods: +\series bold +__array__() +\series default + and +\series bold +copy() +\series default + and one attribute: +\series bold +base +\series default +. + The base attribute returns a reference to the underlying array. + +\end_layout + +\begin_layout Description +__array_priority__ +\begin_inset LatexCommand index +name "ndarray!attributes!\\_\\_array\\_priority\\_\\_" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The array priority attribute is a floating point number useful in mixed + operations involving two subtypes to decide which subtype is returned. + The base ndarray object has priority 0.0 and 1.0 is the default subtype priority. +\end_layout + +\begin_layout Subsection +Array Interface attributes +\end_layout + +\begin_layout Standard +The array interface +\begin_inset LatexCommand index +name "array interface" + +\end_inset + + (sometimes called array protocol) was created in 2005 as a means for array-like + Python objects to re-use each other's data buffers intelligently whenever + possible. + The ndarray object supports both the Python-side and the C-side of the + array interface. + The system is able to consume objects that expose the array interface, + and array objects can expose their inner workings to other objects that + support the array interface. + +\end_layout + +\begin_layout Description +__array_interface__ +\begin_inset LatexCommand index +name "ndarray!attributes!\\_\\_array\\_interface\\_\\_" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The python-side of the array interface. + It is a dictionary with the following attributes: +\end_layout + +\begin_deeper +\begin_layout Description +data A 2-tuple (dataptr, read-only flag). + The dataptr is a string giving the address (in hexadecimal format) of the + array data. + The read-only flag is True if the array memory is read-only. + +\end_layout + +\begin_layout Description +strides The strides tuple. + Same as +\series bold +strides +\series default + attribute except None is returned if the array is C-style contiguous. +\end_layout + +\begin_layout Description +shape The shape tuple. + Same as +\series bold +shape +\series default + attribute. +\end_layout + +\begin_layout Description +typestr A string giving the format of the data. + Same as +\series bold +dtype.str +\series default + attribute. + +\end_layout + +\begin_layout Description +descr A list of tuples providing the detailed description of this data type. + This information is obtained from the arrdescr attribute of the dtypedescr + object associated with each array. + For arrays with fields, this will return a valid array-protocol descriptor + list. + For arrays without defined fields, this returns [('',typestr)]. +\end_layout + +\end_deeper +\begin_layout Description +__array_struct__ +\begin_inset LatexCommand index +name "ndarray!attributes!\\_\\_array\\_struct\\_\\_" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + A PyCObject that wraps a pointer to a PyArrayInterface structure. + This is only useful on the C-level for rapid implementation of the array + interface, using a single attribute lookup. +\end_layout + +\begin_layout Description +ctypes +\begin_inset LatexCommand index +name "ndarray!attributes!ctypes|(" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + This attribute creates an object that makes it easier to use arrays when + calling out to shared libraries with the ctypes module. + The returned object has data, shape, and strides attributes which return + ctypes +\begin_inset LatexCommand index +name "ctypes" + +\end_inset + + objects that can be used as arguments to a shared library. + These attributes are: +\end_layout + +\begin_deeper +\begin_layout Description +data A pointer to the memory area of the array as a Python integer. + This memory area may contain data that is not aligned, or not in correct + byte-order. + The memory area may not even be writeable. + The array flags and data-type of this array should be respected when passing + this attribute to arbitrary C-code to avoid trouble that can include Python + crashing. + User Beware! The value of this attribute is exactly the same as +\family typewriter +self.__array_interface__['data'][0] +\family default +. +\end_layout + +\begin_layout Description +shape (c_intp*self.ndim) A ctypes array of length self.ndim where the base-type + is the C-integer corresponding to dtype('p') on this platform. + This base-type could be c_int, c_long, or c_longlong depending on the platform. + The c_intp type is defined accordingly in numpy.ctypeslib. + The ctypes array contains the shape of the underlying array. +\end_layout + +\begin_layout Description +strides (c_intp*self.ndim) A ctypes array of length self.ndim where the base-type + is the same as for the shape attribute. + This ctypes array contains the strides information from the underlying + array. + This strides information is important for showing how many bytes must be + jumped to get to the next element in the array. + +\end_layout + +\begin_layout Description +_as_parameter_ (c_void_p) Returns the data-pointer to the array as a ctypes + object. + Among other possible uses, this enables this ctypes object to be used directly + in a ctypes-loaded call to an arbitrary function. + Be sure to respect the flags on the array and the size and strides of the + array so as not to use this memory in-appropriately (see the +\series bold +ndpointer +\series default + function for how to return a class that can be used with the argtypes attribute + of ctypes functions). + +\end_layout + +\end_deeper +\begin_layout Warning +Be careful using the ctypes attribute --- especially on temporary arrays + or arrays constructed on the fly. + For example, calling (a+b).ctypes.data_as(ctypes.c_void_p) returns a pointer + to memory that is invalid because the array created as (a+b) is deallocated + before the next Python statement. + You can avoid this problem using either c=a+b or ct=(a+b).ctypes. + In the latter case, ct will hold a reference to the array until ct is deleted + or re-assigned. +\end_layout + +\begin_layout Description +\InsetSpace ~ + The ctypes object also has several methods which can alter how the shape, + strides, and data of the underlying object is returned. + +\end_layout + +\begin_deeper +\begin_layout Description +data_as (obj) Return the data pointer cast-to a particular c-types object. + For example, calling +\family typewriter +self._as_parameter_ +\family default + is equivalent to +\family typewriter +self.data_as(ctypes.c_void_p) +\family default +. + Perhaps you want to use the data as a pointer to a ctypes array of floating-poi +nt data: +\family typewriter +self.data_as(ctypes.POINTER(ctypes.c_double)) +\family default +. + +\end_layout + +\begin_layout Description +shape_as (obj) Return the shape tuple as an array of some other c-types + type. + For example: +\family typewriter +self.shape_as(ctypes.c_short) +\family default +. + +\end_layout + +\begin_layout Description +strides_as (obj) Return the strides tuple as an array of some other c-types + type. + For example: +\family typewriter +self.strides_as(ctypes.c_longlong) +\family default +. +\end_layout + +\end_deeper +\begin_layout Description +\InsetSpace ~ + If the ctypes module is not available, then the ctypes attribute of array + objects still returns something useful, but ctypes objects are not returned + and errors may be raised instead. + In particular, the object will still have the _as_parameter_ attribute + which will return an integer equal to the data +\begin_inset LatexCommand index +name "ndarray!attributes!ctypes|)" + +\end_inset + + attribute +\begin_inset LatexCommand index +name "ndarray!attributes|)" + +\end_inset + +. + +\end_layout + +\begin_layout Section + +\family typewriter +ndarray +\family default + Methods +\end_layout + +\begin_layout Standard +In NumPy, the +\family typewriter +ndarray +\family default + object has many methods +\begin_inset LatexCommand index +name "ndarray!methods|(" + +\end_inset + + which operate on or with the array in some fashion, typically returning + an array result. + In Numeric, many of these methods were only library calls. + These methods are explained in this chapter. + Whenever the array whose method is being called needs to be referenced + it will be referred to as +\emph on +this array +\emph default +, or +\emph on +self +\emph default +. + Keyword arguments will be shown. + Methods that only take one argument do not have keyword arguments. + Default values for one argument methods will be shown in braces {default}. + +\end_layout + +\begin_layout Warning +If you are converting code from Numeric, then you will need to make the + following (search and replace) conversions: +\family typewriter +.typecode() --> .dtype.char +\family default +; +\family typewriter +.iscontiguous() --> .flags.contiguous +\family default +; +\family typewriter +.byteswapped() --> .byteswap() +\family default +; +\family typewriter +.toscalar() --> .item() +\family default +; and +\family typewriter +.itemsize() --> .itemsize +\family default +. + The numpy.oldnumeric.alter_code1 module can automate this for you. +\end_layout + +\begin_layout Subsection +Array conversion +\end_layout + +\begin_layout Description +tolist +\begin_inset LatexCommand index +name "ndarray!methods!tolist" + +\end_inset + + () +\end_layout + +\begin_layout Description +\InsetSpace ~ + The contents of self as a nested list. +\end_layout + +\begin_layout MyCode +>>> a = array([[1,2,3],[4,5,6]]); print a.tolist() +\newline +[[1, 2, 3], [4, 5, 6]] +\end_layout + +\begin_layout Description +item +\begin_inset LatexCommand index +name "ndarray!methods!item" + +\end_inset + + (*args) +\end_layout + +\begin_layout Description +\InsetSpace ~ + If no arguments are passed in, then this method only works for arrays with + one element (a.size == 1). + In this case, it returns a standard Python scalar object (if possible) + copied from the first element of self. + When the data type of self is longdouble or clongdouble, this returns a + scalar array object because there is no available Python scalar that would + not lose information. + Void arrays return a buffer object for item() unless fields are defined + in which case a tuple is returned. +\end_layout + +\begin_layout MyCode +>>> asc = a[0,0].item() +\newline +>>> type(asc) +\newline +<type 'int'> +\newline +>>> asc +\newline +1 +\newline +>>> type(a[0,0]) +\newline +<type + 'numpy.int32'> +\end_layout + +\begin_layout Description +\InsetSpace ~ + If arguments are provided, then they indicate indices into the array (either + a flat index or an nd-index). + A standard Python scalar corresponding to the item at the given location + is then returned. + This is very similar to self[args] except instead of an array scalar, a + standard Python scalar is returned. + This can be useful for speeding up access to elements of the array and + doing arithmetic on elements of the array using Python's optimized math. + +\end_layout + +\begin_layout Description +itemset +\begin_inset LatexCommand index +name "ndarray!methods!itemset" + +\end_inset + + (*args) +\end_layout + +\begin_layout Description +\InsetSpace ~ + There must be at least 1 argument and define the last argument as item. + Then, this is equivalent to but faster than self[args] = item. + The item should be a scalar value and args must select a single item in + the array. +\end_layout + +\begin_layout Description +tostring +\begin_inset LatexCommand index +name "ndarray!methods!tostring" + +\end_inset + + (order='C') +\end_layout + +\begin_layout Description +\InsetSpace ~ + A Python string showing a copy of the raw contents of data memory. + The string can be produced in either 'C' or 'Fortran', or 'Any' order (the + default is 'C'-order). + 'Any' order means C-order unless the F_CONTIGUOUS flag in the array is + set, then 'Fortran' order. + +\end_layout + +\begin_layout Description +tofile +\begin_inset LatexCommand index +name "ndarray!methods!tofile" + +\end_inset + + (file=, sep='', format='') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Write the contents of self to the open file object. + If file is a string, then open a file of that name first. + If sep is the empty string, then write the file in binary mode. + If sep is any other string, write the array in simple text mode separating + each element with the value of the sep string. + When the file is written in text mode, the format string can be used to + alter the appearance of each entry. + If format is the empty string, then it is equivalent to +\family typewriter + +\begin_inset Quotes eld +\end_inset + +%s +\begin_inset Quotes erd +\end_inset + + +\family default +. + Each element of the array will be converted to a Python scalar, +\family typewriter +o +\family default +, and written to the file as +\family typewriter + +\begin_inset Quotes eld +\end_inset + +format +\begin_inset Quotes erd +\end_inset + + % o +\family default +. + Note that writing an array to a file does not store any information about + the shape, type, or endianness of an array. + When written in binary mode, tofile is functionally equivalent to +\family typewriter +fid.write(self.tostring()) +\family default +. +\end_layout + +\begin_layout MyCode +>>> a.tofile('myfile.txt',sep=':',format='%03d') +\end_layout + +\begin_layout MyCode +Contents of myfile.txt +\end_layout + +\begin_layout MyCode +001:002:003:004:005:006 +\end_layout + +\begin_layout Description +dump +\begin_inset LatexCommand index +name "ndarray!methods!dump" + +\end_inset + + (file) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Pickle the contents of self to the file object represented by file. + Equivalent to cPickle.dump(self, file, 2) +\end_layout + +\begin_layout Description +dumps +\begin_inset LatexCommand index +name "ndarray!methods!dumps" + +\end_inset + + () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return pickled representation of self as a string. + Equivalent to cPickle.dumps(self, 2) +\end_layout + +\begin_layout Description +astype +\begin_inset LatexCommand index +name "ndarray!methods!astype" + +\end_inset + + ({None}) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Force conversion of this array to an array with the data type provided + as the argument. + If the argument is None, or equal to the data type of self, then return + a copy of the array. + +\end_layout + +\begin_layout Description +byteswap +\begin_inset LatexCommand index +name "ndarray!methods!byteswap" + +\end_inset + + ({False}) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Byteswap the elements of the array and return the byteswapped array. + If the argument is True, then byteswap in-place and return a reference + to self. + Otherwise, return a copy of the array with the elements byteswapped. + The data-type descriptor is not changed so the array will have changed + numbers. +\end_layout + +\begin_layout Description +copy +\begin_inset LatexCommand index +name "ndarray!methods!copy" + +\end_inset + + () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a copy of the array (which is always single-segment, and ALIGNED). + However, the data-type is preserved (including whether or not the data + is byteswapped). + +\end_layout + +\begin_layout Description +view +\begin_inset LatexCommand index +name "ndarray!methods!view" + +\end_inset + + ({None}) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a new array using the same memory area as self. + If the optional argument is given, it can be either a typeobject that is + a sub-type of the ndarray or an object that can be converted to a data-type + descriptor. + If the argument is a typeobject then a new array of that Python type is + returned that uses the information from self. + If the argument is a data-type descriptor, then a new array of the same + Python type as self is returned using the given data-type. + +\end_layout + +\begin_layout MyCode +>>> print a.view(single) +\newline +[[ 1.40129846e-45 2.80259693e-45 4.20389539e-45] +\newline + + [ 5.60519386e-45 7.00649232e-45 8.40779079e-45]] +\newline +>>> a.view(ubyte) +\newline +array([[1, + 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0], +\newline + [4, 0, 0, 0, 5, 0, 0, 0, 6, 0, + 0, 0]], dtype=uint8) +\end_layout + +\begin_layout Description +getfield +\begin_inset LatexCommand index +name "ndarray!methods!getfield" + +\end_inset + + (dtype=, offset=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a +\emph on +field +\emph default + of the given array as an array of the given data type. + A field is a view of the array's data at a certain byte offset interpreted + as a given data type. + The returned array is a reference into self, therefore changes made to + the returned array will be reflected in self. + This method is particularly useful for record arrays that use a void data + type, but it can also be used to extract the low (high)-order bytes of + other array types as well. + For example, using getfield, you could extract fixed-length substrings + from an array of strings. + +\end_layout + +\begin_layout MyCode +>>> a = array(['Hello','World','NumPy']) +\newline +>>> a.getfield('S2',1) +\newline +array(['el', + 'or', 'um'], +\newline + dtype='|S2') +\end_layout + +\begin_layout Description +setflags +\begin_inset LatexCommand index +name "ndarray!methods!setflags" + +\end_inset + + (write=None, align=None, uic=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Set array flags WRITEABLE, ALIGNED, and UPDATEIFCOPY, respectively. + The ALIGNED flag can only be set to True if the data is actually aligned + according to the type. + The UPDATEIFCOPY flag can never be set to True. + The flag WRITEABLE can only be set True if the array owns its own memory + or the ultimate owner of the memory exposes a writeable buffer interface + (or is a string). + The exception for string is made so that unpickling can be done without + copying memory. + +\end_layout + +\begin_layout Description +fill +\begin_inset LatexCommand index +name "ndarray!methods!fill" + +\end_inset + + (scalar) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Fill an array with the scalar value (appropriately converted to the type + of self). + If the scalar value is an array or a sequence, then only the first element + is used. + This method is usually faster than a[...]=scalar or self.flat=scalar, and always + interprets its argument as a scalar. +\end_layout + +\begin_layout Standard +\begin_inset Float table +wide false +sideways false +status open + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Array conversion methods +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset ERT +status collapsed + +\begin_layout Standard + + +\backslash +setlength{ +\backslash +extrarowheight}{0.1eM} +\end_layout + +\begin_layout Standard + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align center +\begin_inset Tabular +<lyxtabular version="3" rows="15" columns="3"> +<features> +<column alignment="center" valignment="top" leftline="true" width="0"> +<column alignment="center" valignment="top" leftline="true" width="30text%"> +<column alignment="center" valignment="top" leftline="true" rightline="true" width="0"> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family sans +\series bold +\size large +Method +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family sans +\series bold +\size large +Arguments +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family sans +\series bold +\size large +Description +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +astype +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(dtype {None}) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Cast to another data type +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +byteswap +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(inplace {False}) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Byteswap array elements +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +copy +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +() +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Copy array +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +dump +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(file) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Pickle to stream or file +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +dumps +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +() +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Get pickled string +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +fill +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(scalar) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Fill an array with scalar value +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +getfield +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(dtype=, offset=0) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Return a field of the array +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +setflags +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(write=None, align=None, uic=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Set array flags +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +tofile +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(file=, sep='', format='') +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Raw write to file +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +tolist +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +() +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Array as a nested list +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +item +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(*args) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Python scalar extraction +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +itemset +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(*args) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Insert scalar (last argument) into array +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +tostring +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(order='C') +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +String of raw memory +\end_layout + +\end_inset +</cell> +</row> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +view +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(obj) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +View as another data type or class +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection +Array shape manipulation +\end_layout + +\begin_layout Standard +For reshape, resize, and transpose, the single tuple argument may be replaced + with +\begin_inset Formula $n$ +\end_inset + + integers which will be interpreted as an +\begin_inset Formula $n$ +\end_inset + +-tuple. +\end_layout + +\begin_layout Description +reshape +\begin_inset LatexCommand index +name "ndarray!methods!reshape" + +\end_inset + + (newshape, order='C') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an array that uses the same data as this array but has a new shape + given by the newshape tuple (or a scalar to reshape as 1-d). + The new shape must define an array with the same total number of elements. + If one of the elements of the new shape tuple is -1, then that dimension + will be determined such that the overall number of items in the array stays + constant. + If possible, the new array will reference the data of the old one. + If the data must be moved in order to accomplish the reshape, then then + the new array will contain a copy of the data in self. + The order argument specifies how the array data should be viewed during + the reshape (either in 'C' or 'FORTRAN' order). + This order argument specifies both how the intrinsic raveling to a 1-d + array should occur as well as how that 1-d array should be used to fill-up + the new output array. + +\end_layout + +\begin_layout Description +resize +\begin_inset LatexCommand index +name "ndarray!methods!resize" + +\end_inset + + (newshape, refcheck=1, order='C') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Resize an array in-place. + This changes self (in-place) to be an array with the new shape, reallocating + space for the data area if necessary. + If the data memory must be changed because the number of new elements is + different than self.size, then an error will occur if this array does not + own its data or if another object is referencing this one. + Only a single-segment array can be resized. + The method returns None. + To bypass the reference count check, then set refcheck=0. + The purpose of the reference count check is to make sure you don't use + this array as a buffer for another Python object and then reallocate the + memory. + However, reference counts can increase in other ways so if you are sure + that you have not shared the memory for this array to another Python object, + then you may safely set refcheck=0. + +\end_layout + +\begin_layout Description +transpose +\begin_inset LatexCommand index +name "ndarray!methods!transpose" + +\end_inset + + (<None>) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an array view with the shape transposed according to the argument. + An argument of None is equivalent to range(self.ndim)[::-1]. + The argument can either be a tuple or multiple integer arguments. + This method returns a new array with permuted shape and strides attributes + using the same data as self. + +\end_layout + +\begin_layout MyCode +>>> a = arange(40).reshape((2,4,5)) +\newline +>>> b = a.transpose(2,0,1) +\newline +>>> print a.shape, + b.shape +\newline +(2, 4, 5) (5, 2, 4) +\newline +>>> print a.strides, b.strides +\newline +(80, 20, 4) (4, 80, + 20) +\newline +>>> print a +\newline +[[[ 0 1 2 3 4] +\newline + [ 5 6 7 8 9] +\newline + [10 11 12 13 14] +\newline + [15 + 16 17 18 19]] +\newline + +\newline + [[20 21 22 23 24] +\newline + [25 26 27 28 29] +\newline + [30 31 32 33 34] +\newline + [35 + 36 37 38 39]]] +\newline +>>> print b +\newline +[[[ 0 5 10 15] +\newline + [20 25 30 35]] +\newline + +\newline + [[ 1 6 11 16] +\newline + + [21 26 31 36]] +\newline + +\newline + [[ 2 7 12 17] +\newline + [22 27 32 37]] +\newline + +\newline + [[ 3 8 13 18] +\newline + [23 28 33 + 38]] +\newline + +\newline + [[ 4 9 14 19] +\newline + [24 29 34 39]]] +\end_layout + +\begin_layout Description +swapaxes +\begin_inset LatexCommand index +name "ndarray!methods!swapaxes" + +\end_inset + + (axis1, axis2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an array view with axis1 and axis2 swapped. + This is a special case of the transpose method with argument equal to arg=range +(self.ndim); arg[axis1], arg[axis2] = arg[axis2], arg[axis1]. + See the +\series bold +rollaxis +\series default + function for a routine that transposes the array with the axes rolled instead + of swapped. + +\end_layout + +\begin_layout Description +flatten +\begin_inset LatexCommand index +name "ndarray!methods!flatten" + +\end_inset + + (order='C') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a new 1-d array with data copied from self. + Equivalent to but slightly faster then a.flat.copy(). + +\end_layout + +\begin_layout Description +ravel +\begin_inset LatexCommand index +name "ndarray!methods!ravel" + +\end_inset + + (order='C') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a 1-d version of self. + If self is single-segment, then the new array references self, otherwise, + a copy is made. +\end_layout + +\begin_layout Description +squeeze +\begin_inset LatexCommand index +name "ndarray!methods!squeeze" + +\end_inset + + () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an array with all unit-length dimensions squeezed out. +\end_layout + +\begin_layout Subsection +Array item selection and manipulation +\end_layout + +\begin_layout Standard +For array methods that take an axis keyword, it defaults to None. + If axis is None, then the array is treated as a 1-D array. + Any other value for axis represents the dimension along which the operation + should proceed. + +\end_layout + +\begin_layout Description +take +\begin_inset LatexCommand index +name "ndarray!methods!take" + +\end_inset + + (indices=, axis=None, out=None, mode='raise') +\end_layout + +\begin_layout Description +\InsetSpace ~ + The functionality of this method is available using the advanced indexing + ability of the +\family typewriter +ndarray +\family default + object. + However, for doing selection along a single axis it is usually faster to + use take. + If axis is not None, this method is equivalent to +\family typewriter +self[indxobj] +\family default + preceeded by +\family typewriter +indxobj=[slice(None)]*self.ndim; indxobj[ +\series bold +axis +\series default +] = +\family default + +\family typewriter +\series bold +indices +\family default +\series default +. + It returns the elements or sub-arrays from self indicated by the index + numbers in indices. + If axis is None, then this method is equivalent to +\family typewriter +self.flat[indices] +\family default +. + The out and mode arguments allow for specification of the output array + and how out-of-bounds indices will be handled ('raise': raise an error, + 'wrap': wrap around, 'clip': clip to range) +\end_layout + +\begin_layout Description +put +\begin_inset LatexCommand index +name "ndarray!methods!put" + +\end_inset + + (indices=, values=, mode='raise') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Performs the equivalent of +\end_layout + +\begin_layout LyX-Code +for n in +\series bold +indices +\series default +: +\end_layout + +\begin_layout LyX-Code + self.flat[n] = +\series bold +values +\series default +[n] +\end_layout + +\begin_layout Description +\InsetSpace ~ + Values is repeated if it is too short. + The mode argument specifies what to do if n is too large. + +\end_layout + +\begin_layout Description +repeat +\begin_inset LatexCommand index +name "ndarray!methods!repeat" + +\end_inset + + (repeats=, axis=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Copy elements (or sub-arrays selected along axis) of self +\series bold +repeats +\series default + times. + The repeats argument must be a sequence of length self.shape[axis] or a + scalar. + The repeats argument dictates how many times the element (or sub-array) + will be repeated in the result array. + +\end_layout + +\begin_layout Description +choose +\begin_inset LatexCommand index +name "ndarray!methods!choose" + +\end_inset + + (choices, out=None, mode='raise') +\end_layout + +\begin_layout Description +\InsetSpace ~ + The array must be an integer (or bool) array with entries from +\begin_inset Formula $0$ +\end_inset + + to +\begin_inset Formula $n$ +\end_inset + +. + Choices is a tuple of +\begin_inset Formula $n$ +\end_inset + + choice arrays: +\begin_inset Formula $b0,\, b1,\,\ldots\,,\, bn$ +\end_inset + +. + (Alternatively, choices can be replaced with +\begin_inset Formula $n$ +\end_inset + + arguments where each argument is a choice array). + The return array will be formed from the elements of the choice arrays + according to the value of the elements of self. + In other words, the output array will merge the choice arrays together + by using the value of self at a particular position to select which choice + array should be used for the output at a particular position. + The out keyword allows specification of an output array and the clip keyword + allows different behavior when self contains entries outside the number + of choices. + The acceptable arguments to mode are 'raise' (RAISE), 'wrap' (WRAP), and + 'clip' (CLIP) ('raise' produces an error, 'wrap' converts the number into + range by periodic wrapping so that numbers <0 have +\begin_inset Formula $n$ +\end_inset + + repeatedly added and numbers >= +\begin_inset Formula $n$ +\end_inset + + have +\begin_inset Formula $n$ +\end_inset + + repeatedly subtracted, and 'clip' will clip all entries to be within the + range [0, +\begin_inset Formula $n$ +\end_inset + +). +\end_layout + +\begin_layout MyCode +>>> a = array([0,3,2,1]) +\newline +>>> a.choose([0,1,2,3],[10,11,12,13], +\newline +... + [20,21,22,23],[30,31,32,33]) +\newline +array([ 0, 31, 22, 13]) +\end_layout + +\begin_layout Description +sort +\begin_inset LatexCommand index +name "ndarray!methods!sort" + +\end_inset + + (axis=-1, kind='quick', order=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Sort the array in-place and return None. + The sort takes place over the given axis using an underlying sort algorithm + specified by kind. + The sorting algorithms available are 'quick', 'heap', and 'merge'. + For flexible types only the quicksort algorithm is available. + For arrays with fields defined, the order keyword allows specification + of the order in which to use the field names in the sort. + If order is a string then it is the field name to use to define the sort. + If order is a list (or tuple) of strings, then it specifies a lexicographic + ordering so that the first listed field name is compared first if that + results in equality, the second listed field name is used for the comparison + and so on. + If order is None, then arrays with fields use the first field for comparison. + +\end_layout + +\begin_layout MyCode +>>> a=array([[0.2,1.3,2.5],[1.5,0.1,1.4]]); +\newline +>>> b=a.copy(); b.sort(0); print b +\newline +[[ + 0.2 0.1 1.4] +\newline + [ 1.5 1.3 2.5]] +\newline +>>> b=a.copy(); b.sort(1); print b +\newline +[[ 0.2 1.3 2.5] +\newline + + [ 0.1 1.4 1.5]] +\end_layout + +\begin_layout Description +argsort +\begin_inset LatexCommand index +name "ndarray!methods!argsort" + +\end_inset + + (axis=-1, kind='quick', order=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an index array of the same size as self showing which indices along + the given axis should be selected to sort self along that axis. + Uses an underlying sort algorithm specified by kind. + The sorting algorithms available are 'quick', 'heap', and 'merge'. + For arrays with fields defined, the order keyword allows specification + of the order in which to use the field names in the sort. + If order is a string then it is the field name to use to define the sort. + If order is a list (or tuple) of strings, then it specifies a lexicographic + ordering so that the first listed field name is compared first if that + results in equality, the second listed field name is used for the comparison + and so on. + If order is None, then arrays with fields use the first field for comparison. + +\end_layout + +\begin_layout MyCode +>>> b=a.copy(); print b.argsort(0) +\newline +[[0 1 1] +\newline + [1 0 0]] +\newline +>>> b=a.copy(); print b.argsort(1 +) +\newline +[[0 1 2] +\newline + [1 2 0]] +\end_layout + +\begin_layout Tip +Complex valued arrays sort lexicographically by comparing first the real + parts and then the imaginary parts if the real parts are the same. +\end_layout + +\begin_layout Description +searchsorted +\begin_inset LatexCommand index +name "ndarray!methods!searchsorted" + +\end_inset + + (values, side='left') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an index array (dtype=intp) of the same shape as values showing + the index where the value would fit in self. + The index is such that self[index-1] +\begin_inset Formula $<$ +\end_inset + + value +\begin_inset Formula $\le$ +\end_inset + + self[index] when side is 'left'. + In this formula self[self.size]= +\begin_inset Formula $\infty$ +\end_inset + + and self[-1]= +\begin_inset Formula $-\infty$ +\end_inset + +. + Therefore, if value is larger than all elements of self, then index is + self.size. + If value is smaller than all elements of self, then index is 0. + Self must be a sorted 1-d array. + If elements of self are repeated, the index of the first occurrence is + used. + If side is 'right', then the search rule is switched so that the +\begin_inset Formula $<$ +\end_inset + + sign is on the +\begin_inset Quotes eld +\end_inset + +right +\begin_inset Quotes erd +\end_inset + + instead of the left in the search rule. + In other words, the index returned is such that self[index-1] +\begin_inset Formula $\le$ +\end_inset + +value +\begin_inset Formula $<$ +\end_inset + + self[index]. +\end_layout + +\begin_layout MyCode +>>> b=a.ravel(); b.sort() +\newline +>>> b.searchsorted([0.0, 1.35, 2.0, 3.0]) +\newline +array([0, 3, + 5, 6]) +\end_layout + +\begin_layout Description +nonzero +\begin_inset LatexCommand index +name "ndarray!methods!nonzero" + +\end_inset + + () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the +\begin_inset Formula $n$ +\end_inset + +-dimensional indices for elements of the +\begin_inset Formula $n$ +\end_inset + +-dimensional array self that are nonzero into an +\begin_inset Formula $n$ +\end_inset + +-tuple of equal-length index arrays. + In particular, notice that a 0-dimensional array always returns an empty + tuple. + +\end_layout + +\begin_layout MyCode +>>> x = arange(15); y=x.reshape(3,5) +\newline +>>> (x>8).nonzero() +\newline +(array([ 9, 10, 11, + 12, 13, 14]),) +\newline +>>> (y>8).nonzero() +\newline +(array([1, 2, 2, 2, 2, 2]), array([4, 0, + 1, 2, 3, 4])) +\end_layout + +\begin_layout Description +compress +\begin_inset LatexCommand index +name "ndarray!methods!compress" + +\end_inset + + (condition=, axis=None, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This method expects condition to be a one-dimensional mask array of the + same length as self.shape[axis]. + If the array is less than self.shape[axis], then False is assumed for the + missing elements. + The method returns the elements (or sub-arrays along the given axis) of + self where condition is true. + The shape of the return array is self.shape with the axis dimension replaced + by the number of True elements of condition. + The same effect can often be accomplished using array indexing. +\end_layout + +\begin_layout MyCode +>>> x=array([0,1,2,3]) +\newline +>>> x.compress(x > 2) +\newline +array([3]) +\newline +>>> x[x>2] +\newline +array([3]) +\end_layout + +\begin_layout Description +diagonal +\begin_inset LatexCommand index +name "ndarray!methods!diagonal" + +\end_inset + + (offset=0, axis1=0, axis2=1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + If self is 2-d, return the +\series bold +offset +\series default + (from the main diagonal) diagonal of self. + If self is larger than 2-d, then return an array constructed from all the + diagonals created from all the 2-d sub-arrays formed using all of axis1 + and axis2. + The offset parameter is with respect to axis2. + The shape of the returned array is found by removing the axis1 and axis2 + entries from self.shape and then appending the length of the offset diagonal + of each 2-d sub-array. +\end_layout + +\begin_layout MyCode +>>> a=arange(25).reshape(5,5); print a +\newline +[[ 0 1 2 3 4] +\newline + [ 5 6 7 8 9] +\newline + + [10 11 12 13 14] +\newline + [15 16 17 18 19] +\newline + [20 21 22 23 24]] +\newline +>>> print a.diagonal() +\newline +[ + 0 6 12 18 24] +\newline +>>> print a.diagonal(1) +\newline +[ 1 7 13 19] +\newline +>>> print a.diagonal(-1) +\newline +[ + 5 11 17 23] +\end_layout + +\begin_layout Standard +\begin_inset Float table +wide false +sideways false +status open + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Array item selection and shape manipulation methods. + If axis is an argument, then the calculation is performed along that axis. + An axis value of None means the array is flattened before calculation proceeds. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset ERT +status collapsed + +\begin_layout Standard + + +\backslash +setlength{ +\backslash +extrarowheight}{0.25eM} +\end_layout + +\begin_layout Standard + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align center +\begin_inset Tabular +<lyxtabular version="3" rows="18" columns="3"> +<features> +<column alignment="center" valignment="top" leftline="true" width="0"> +<column alignment="center" valignment="top" leftline="true" width="50text%"> +<column alignment="block" valignment="top" leftline="true" rightline="true" width="30text%"> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family sans +\series bold +\size large +Method +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family sans +\series bold +\size large +Arguments +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family sans +\series bold +\size large +Description +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +argsort +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +argsort (axis=None, kind='quick') +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Indices showing how to sort array. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +choose +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +choose (c0, c1 , ..., cn, out=None, clip='raise') +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Choose from different arrays based on value of self. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +compress +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(condition=, axis=None, out=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Elements of self where condition is true. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +diagonal +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(offset=0, axis1=0, axis2=1) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Return a diagonal from self. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +flatten +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(order='C') +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +A 1-d copy of self. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +nonzero +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +() +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +True where self is not zero. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +put +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(indices=, values=, mode='raise') +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Place values at 1-d index locations of self. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +ravel +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(order='C') +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +1-d version of self (no data copy if self is C-style contiguous). +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +repeat +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(repeats=, axis=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Repeat elements of self. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +reshape +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(d1,d2,...,dn, order='C') +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Return reshaped version of self. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +resize +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(d1,d2,...,dn, refcheck=1, order='Any') +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Resize self in-place. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +searchsorted +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(values) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Show where values would be placed in self (assumed sorted). +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +sort +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(axis=None, kind='quick') +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Copy of self sorted along axis. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +squeeze +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +() +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Squeeze out all length-1 dimensions. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +swapaxes +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(axis1, axis2) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Swap two dimensions of self. + +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +take +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(indices=, axis=None, out=None, mode='raise') +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Select elements of self along axis according to indices. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +transpose +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(permute <None>) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Rearrange shape of self according to permute. +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection +Array calculation +\end_layout + +\begin_layout Standard +Many of these methods take an argument named axis. + In such cases, if axis is None (the default), the array is treated as a + 1-d array and the operation is performed over the entire array. + This behavior is also the default if self is a 0-dimensional array or array + scalar. + If axis is an integer, then the operation is done over the given axis (for + each 1-d subarray that can be created along the given axis). + The parameter dtype specifies the data type over which a reduction operation + (like summing) should take place. + The default reduce data type is the same as the data type of self. + To avoid overflow, it can be useful to perform the reduction using a larger + data type. + For several methods, an optional out argument can be provided and the result + will be placed into the output array given. + The out argument must be an ndarray and have the same number of elements. + It can be of a different type in which case casting will be performed. + +\end_layout + +\begin_layout Description +max +\begin_inset LatexCommand index +name "ndarray!methods!max" + +\end_inset + + (axis=None, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the largest value in self. + This is a better way to compute the maximum over an array, than using max(self). + The latter uses the generic sequence interface to self. + This will be slower, and will try to get an answer by comparing whole sub-array +s of self. + This will be incorrect for arrays larger than 1-d. +\end_layout + +\begin_layout Description +argmax +\begin_inset LatexCommand index +name "ndarray!methods!argmax" + +\end_inset + + (axis=None, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the (first, 1-d) index of the largest value in self. +\end_layout + +\begin_layout Description +min +\begin_inset LatexCommand index +name "ndarray!methods!min" + +\end_inset + + (axis=None, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the smallest value in self. + This is a better way to compute the minimum over an array, than using min(self). + The latter uses the generic sequence interface to self. + This will be slower, and will try to get an answer by comparing whole sub-array +s of self. + This will be incorrect for arrays larger than 1-d. +\end_layout + +\begin_layout Description +argmin +\begin_inset LatexCommand index +name "ndarray!methods!argmin" + +\end_inset + + (axis=None, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the (first, 1-d) index of the smallest value in self. +\end_layout + +\begin_layout Description +ptp +\begin_inset LatexCommand index +name "ndarray!methods!ptp" + +\end_inset + + (axis=None, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the difference of the largest to the smallest value in self. + Equivalent to self.max(axis) - self.min(axis) +\end_layout + +\begin_layout Description +clip +\begin_inset LatexCommand index +name "ndarray!methods!clip" + +\end_inset + + (min=,max=, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a new array where any element in self less than min is set to min + and any element less than max is set to max. + Equivalent to self[self<min]=min; self[self>max]=max. +\end_layout + +\begin_layout Description +conj +\begin_inset LatexCommand index +name "ndarray!methods!conj" + +\end_inset + + (out=None) +\end_layout + +\begin_layout Description +conjugate +\begin_inset LatexCommand index +name "ndarray!methods!conjugate" + +\end_inset + + (out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the conjugate of elements of the array. +\end_layout + +\begin_layout Description +round +\begin_inset LatexCommand index +name "ndarray!methods!round" + +\end_inset + + (decimals=0, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Round the elements of the array to the nearest decimal. + For decimals < 0, the rounding is done to the nearest tens, hundreds, etc. + Rounding of exactly the half-interval is to the nearest even integer. + This is the only difference with standard Python rounding. +\end_layout + +\begin_layout Description +trace +\begin_inset LatexCommand index +name "ndarray!methods!trace" + +\end_inset + + (offset=0, axis1=0, axis2=1, dtype=None, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Perform a summation along each diagonal specified by offset, axis1, and + axis2. + Equivalent to diagonal(offset,axis1,axis2).sum(axis=-1, dtype=dtype) +\end_layout + +\begin_layout Description +sum +\begin_inset LatexCommand index +name "ndarray!methods!sum" + +\end_inset + + (axis=None, dtype=None, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the sum +\begin_inset Formula \[ +\sum_{i=0}^{N-1}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]\] + +\end_inset + + where axis ':' objects are placed before the +\begin_inset Formula $i.$ +\end_inset + + +\end_layout + +\begin_layout Description +cumsum +\begin_inset LatexCommand index +name "ndarray!methods!cumsum" + +\end_inset + + (axis=None, dtype=None, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the cumulative sum. + If ret is the return array of the same shape as +\begin_inset Formula $\textrm{self},$ +\end_inset + + then +\begin_inset Formula \[ +\textrm{ret}[\underbrace{:,\ldots,:}_{\textrm{axis}},j]=\sum_{i=0}^{j}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i].\] + +\end_inset + + +\end_layout + +\begin_layout Description +mean +\begin_inset LatexCommand index +name "ndarray!methods!mean" + +\end_inset + + (axis=None, dtype=None, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the average value caculated as +\begin_inset Formula \[ +\frac{1}{N}\sum_{i=0}^{N-1}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]\] + +\end_inset + + where +\begin_inset Formula $N$ +\end_inset + + is self.shape[axis] and axis ':' objects are placed before the +\begin_inset Formula $i.$ +\end_inset + + The sum is done in the data-type of self unless self is an integer or Boolean + data-type and then it is done over the float data-type. + +\end_layout + +\begin_layout Description +var +\begin_inset LatexCommand index +name "ndarray!methods!var" + +\end_inset + + (axis=None, dtype=None, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the variance of the data calculated as +\begin_inset Formula \[ +\frac{1}{N}\sum_{i=0}^{N-1}\left(\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]-\mu\right)^{2}\] + +\end_inset + + where +\begin_inset Formula $N$ +\end_inset + + is self.shape[axis] and +\begin_inset Formula $\mu$ +\end_inset + + is the mean (restored to the same number of dimensions as self with +\begin_inset Formula $\mu$ +\end_inset + + copied along the axis dimension). + This is equivalent to (self**2).mean - self.mean()**2 and ((self-self.mean())**2).m +ean(). + The value of +\begin_inset Formula $N-1$ +\end_inset + + was not chosen for normalization because while it gives an +\begin_inset Quotes eld +\end_inset + +unbiased +\begin_inset Quotes erd +\end_inset + + estimate, it is not always prudent to return unbiased estimates as they + may have larger mean-square error. + The sum is done using a float data-type if self has integer or Boolean + data-type, otherwise it is done using the same data-type as self. + +\end_layout + +\begin_layout Description +std +\begin_inset LatexCommand index +name "ndarray!methods!std" + +\end_inset + + (axis=None, dtype=None, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the standard deviation calculated as +\begin_inset Formula \[ +\sqrt{\frac{1}{N}\sum_{i=0}^{N-1}\left(\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]-\mu\right)^{2}}\] + +\end_inset + + where +\begin_inset Formula $N$ +\end_inset + + is self.shape[axis] and +\begin_inset Formula $\mu$ +\end_inset + + is the mean (restored to the same number of dimensions as self with +\begin_inset Formula $\mu$ +\end_inset + + copied along the axis dimension). + The sum is done using the same data-type as self unless self is an integer + or Boolean data-type and then it is done using a float data-type. + +\end_layout + +\begin_layout Description +prod +\begin_inset LatexCommand index +name "ndarray!methods!prod" + +\end_inset + + (axis=None, dtype=None, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the product calculated as +\begin_inset Formula \[ +\prod_{i=0}^{N-1}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i].\] + +\end_inset + + +\end_layout + +\begin_layout Description +cumprod +\begin_inset LatexCommand index +name "ndarray!methods!cumprod" + +\end_inset + + (axis=None, dtype=None, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the cumulative product so that the return array, ret, is the same + shape as self and +\begin_inset Formula \[ +\textrm{ret}[\underbrace{:,\ldots,:}_{\textrm{axis}},j]=\prod_{i=0}^{j}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i].\] + +\end_inset + + +\end_layout + +\begin_layout Description +all +\begin_inset LatexCommand index +name "ndarray!methods!all" + +\end_inset + + (axis=None, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return True if all entries along axis evaluate True, otherwise return False. +\end_layout + +\begin_layout Description +any +\begin_inset LatexCommand index +name "ndarray!methods!any" + +\end_inset + + (axis=None, out=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return True if any entries along axis evaluate True, otherwise return False +\begin_inset LatexCommand index +name "ndarray!methods|)" + +\end_inset + +. +\end_layout + +\begin_layout Standard +\begin_inset Float table +wide false +sideways false +status open + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Array object calculation methods. + If axis is an argument, then the calculation is performed along that axis. + An axis value of None means the array is flattened before calculation proceeds. + All of these methods can take an optional out= argument which can specify + the output array to write the results into. + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset ERT +status collapsed + +\begin_layout Standard + + +\backslash +setlength{ +\backslash +extrarowheight}{0.5eM} +\end_layout + +\begin_layout Standard + +\end_layout + +\begin_layout Standard + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align center +\begin_inset Tabular +<lyxtabular version="3" rows="18" columns="3"> +<features> +<column alignment="center" valignment="top" leftline="true" width="0"> +<column alignment="center" valignment="top" leftline="true" width="30text%"> +<column alignment="center" valignment="top" leftline="true" rightline="true" width="0"> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family sans +\series bold +\size large +Method +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family sans +\series bold +\size large +Arguments +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\family sans +\series bold +\size large +Description +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +all +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(axis=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +true if all entries are true. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +any +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(axis=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +true if any entries are true. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +argmax +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(axis=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +index of largest value. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +argmin +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(axis=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +index of smallest value. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +clip +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(min=, max=) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +self[self>max]=max; self[self<min]=min +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +conj +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +() +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +complex conjugate +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +cumprod +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(axis=None, dtype=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +cumulative product +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +cumsum +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(axis=None, dtype=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +cumulative sum +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +max +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(axis=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +maximum of self +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +mean +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(axis=None, dtype=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +mean of self +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +min +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(axis=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +minimum of self +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +prod +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(axis=None, dtype=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +multiply elements of self together +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +ptp +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(axis=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +self.max(axis)-self.min(axis) +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +var +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(axis=None, dtype=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +variance of self +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +std +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(axis=None, dtype=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +standard deviation of self +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +sum +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(axis=None, dtype=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +add elements of self together +\end_layout + +\end_inset +</cell> +</row> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard + +\series bold +trace +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +(offset, axis1=0, axis2=0, dtype=None) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +sum along a diagonal +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Array Special Methods +\end_layout + +\begin_layout Standard +Methods +\begin_inset LatexCommand index +name "ndarray!special methods|(" + +\end_inset + + in this chapter are not generally meant to be called directly by the user. + They are called by Python and are used to customize behavior of the ndarray + object as it interacts with the Python language and standard library. + +\end_layout + +\begin_layout Subsection +Methods for standard library functions +\end_layout + +\begin_layout Description +__copy__ +\begin_inset LatexCommand index +name "ndarray!special methods!copy" + +\end_inset + + () +\end_layout + +\begin_layout Description +\InsetSpace ~ + To allow copy.copy(a) to perform a shallow copy of an array. + Exactly the same as self.copy() (contents of object arrays are not copied). + +\end_layout + +\begin_layout Description +__deepcopy__ +\begin_inset LatexCommand index +name "ndarray!special methods!deepcopy" + +\end_inset + + (memodict) +\end_layout + +\begin_layout Description +\InsetSpace ~ + To allow copy.deepcopy(a) to perform a deep copy. + This is the same as a shallow copy unless self is an object array. + Then, after the shallow copy is made, a copy.deepcopy(item) is called for + every item in the object array. + +\end_layout + +\begin_layout Description +__reduce__ +\begin_inset LatexCommand index +name "ndarray!special methods!reduce" + +\end_inset + + () +\end_layout + +\begin_layout Description +__setstate__ +\begin_inset LatexCommand index +name "ndarray!special methods!setstate" + +\end_inset + + (shape, typestr, isfortran, data) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Pickling support for arrays is provided by these two methods. + When an array needs to be pickled, the __reduce__() method is called to + provide a 3-tuple of already-pickleable objects. + To construct a new object from the pickle, the first two elements of the + 3-tuple are used to construct a new (0-length) array of the correct type + and the last element of the 3-tuple, which is itself a 4-tuple of (shape, + typestr, isfortran, data) is passed to the __setstate__ method of the newly + created array to restore its contents. + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The reduce method returns a 3-tuple consisting of (callable, args, state) + where callable is a simple constructor function that handles subclasses + of the ndarray. + Also, args is a 3-tuple of arguments to pass to this constructor function + (type(self), (0,), self.dtypechar), and state is a 4-tuple of information + giving the object's state (self.shape, self.dtypedescr, isfortran, string_or_list +). + In this tuple, isfortran is a Bool stating whether the following flattened + data is in Fortran order or not, and string_or_list is a string formed + by self.tostring() if the data type is not object. + If the data type of self is an object array, then string_or_list is a flat + list equivalent to self.ravel().tolist(). + +\end_layout + +\begin_layout Description +\InsetSpace ~ + On load from a pickle, the pickling code uses the first two elements from + the tuple returned by reduce to construct an empty 0-dimensional subclass + of the correct type. + The last element is then passed to the __setstate__ method of the newly + created array to restore its contents. + +\end_layout + +\begin_layout Note +When data is a string, the __setstate__ method will directly use the string + memory as the array memory (new.base will point to the string). + The typestr contains enough information to decode how the memory should + be interpreted. +\end_layout + +\begin_layout Subsection +Basic customization +\end_layout + +\begin_layout Description +__new__ +\begin_inset LatexCommand index +name "ndarray!special methods!new" + +\end_inset + + (subtype, shape=, dtype=long_, buffer=None, offset=0, strides=None, order=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This method creates a new ndarray. + It is typically only used in the __new__ method of a subclass. + This method is called to construct a new array whenever the object name + is called, +\family typewriter +a=ndarray(...) +\family default +. + It supports two basic modes of array creation: +\end_layout + +\begin_layout Enumerate +a single-segment array of the specified shape and data-type from newly allocated + memory; +\end_layout + +\begin_deeper +\begin_layout Enumerate +uses shape, dtype, strides, and order arguments; others are ignored; +\end_layout + +\begin_layout Enumerate +The order argument allows specification of a Fortran-style contiguous memory + segment (order='Fortran'); +\end_layout + +\begin_layout Enumerate +If strides is given, then it specifies the new strides of the array (and + the order keyword is ignored). + The strides will be checked for consistency with the dimension size so + that steps outside of the memory won't occur. +\end_layout + +\end_deeper +\begin_layout Enumerate +an array of the given shape and data type using the provided object, buffer, + which must export the buffer interface. + +\end_layout + +\begin_deeper +\begin_layout Enumerate +all arguments can be used; +\end_layout + +\begin_layout Enumerate +strides can be given and will be checked for consistency with the shape, + data type, and available memory in buffer; +\end_layout + +\begin_layout Enumerate +order indicates whether the data buffer should be interpreted as Fortran-style + contiguous (order='Fortran') or not; +\end_layout + +\begin_layout Enumerate +offset can be used to start the array data at some offset in the buffer. + +\end_layout + +\end_deeper +\begin_layout Note +The ndarray uses the default no-op __init__ +\begin_inset LatexCommand index +name "ndarray!special methods!init" + +\end_inset + + function because the array is completely initialized after __new__ is called. +\end_layout + +\begin_layout Description +__array__ +\begin_inset LatexCommand index +name "ndarray!special methods!array" + +\end_inset + + (dtype {None}) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This is a special method that should always return an object of type ndarray. + Useful for subclasses that need to get to the ndarray object. + +\end_layout + +\begin_layout Description +__array_wrap__ +\begin_inset LatexCommand index +name "ndarray!special methods!array\\_wrap" + +\end_inset + + (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This is a special method that always returns an object of the same Python + type as self using the array passed as an argument. + This is mainly useful for subclasses as it is an easy way to get the subclass + back from an ndarray. +\end_layout + +\begin_layout Description +__lt__ +\begin_inset LatexCommand index +name "ndarray!special methods!lt" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__le__ +\begin_inset LatexCommand index +name "ndarray!special methods!le" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__gt__ +\begin_inset LatexCommand index +name "ndarray!special methods!gt" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__ge__ +\begin_inset LatexCommand index +name "ndarray!special methods!ge" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__eq__ +\begin_inset LatexCommand index +name "ndarray!special methods!eq" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__ne__ +\begin_inset LatexCommand index +name "ndarray!special methods!ne" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Defined to support rich comparisons (<, <=, >, >=, ==, !=) on ndarrays + using universal functions. + +\end_layout + +\begin_layout Description +__str__ +\begin_inset LatexCommand index +name "ndarray!special methods!str" + +\end_inset + + () +\end_layout + +\begin_layout Description +__repr__ +\begin_inset LatexCommand index +name "ndarray!special methods!repr" + +\end_inset + + () +\end_layout + +\begin_layout Description +\InsetSpace ~ + These functions print the array when called by str(self) and repr(self) + respectively. + Array printing can be changed using set_string_function(..). + Default array printing has been borrowed from numarray whose printing code + was written by Perry Greenfield and J. + Todd Miller. + By default, arrays print such that +\end_layout + +\begin_layout Enumerate +The last axis is always printed left to right. +\end_layout + +\begin_layout Enumerate +The next-to-last axis is printed top to bottom. +\end_layout + +\begin_layout Enumerate +Remaining axes are printed top to bottom with increasing numbers of separators. +\end_layout + +\begin_layout Description +\InsetSpace ~ + Five parameters of the printing can be set using keyword arguments with + +\family typewriter +set_printoptions(...) +\family default +. + The parameters +\begin_inset LatexCommand index +name "set\\_printoptions" + +\end_inset + + can all be retrieved using +\family typewriter +get_printoptions() +\family default +. + These printing options +\begin_inset LatexCommand index +name "get\\_printoptions" + +\end_inset + + are +\end_layout + +\begin_deeper +\begin_layout Description +precision the number of digits of precision for floating point output (default + 8); +\end_layout + +\begin_layout Description +threshold total number of array elements which triggers summarization rather + than full representation (default 1000); +\end_layout + +\begin_layout Description +edgeitems number of array items in summary at beginning an end of each dimension + (default 3); +\end_layout + +\begin_layout Description +linewidth the number of characters per line for the purpose of inserting + line breaks (default 71); +\end_layout + +\begin_layout Description +suppress Boolean indicating whether or not to suppress printing of small + floating point values using scientific notation (default False). + +\end_layout + +\end_deeper +\begin_layout Description +__nonzero__ +\begin_inset LatexCommand index +name "ndarray!special methods!nonzero" + +\end_inset + + () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Truth-value testing for the array as a whole. + It is called whenever the truth value of the ndarray as a whole object + is required. + This raises an error if the number of elements in the the array is larger + than 1 because the truth value of such arrays is ambiguous. + Use .any() and .all() instead to be clear about what is meant in such cases. + If the number of elements is 0 then False is returned. + If there is one element in the array, then the truth-value of this element + is returned. +\end_layout + +\begin_layout Subsection +Container customization +\end_layout + +\begin_layout Description +__len__ +\begin_inset LatexCommand index +name "ndarray!special methods!len" + +\end_inset + + () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns self.shape[0]. + It is called in response to len(self). + Use self.size to get the total number of elements in the array. +\end_layout + +\begin_layout Description +\InsetSpace ~ + Notice that the default Python iterator for sequences is used when arrays + are used in places that expect an iterator. + This iterator returns successively self[0], self[1], ..., self[self.__len__()]. + Use self.flat to get an iterator that walks through the entire array one + element at a time. +\end_layout + +\begin_layout Description +__getitem__ +\begin_inset LatexCommand index +name "ndarray!special methods!getitem" + +\end_inset + + (key) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Called when evaluating self[key] construct. + Items from the array can be selected using this customization. + This construct has both standard and extended indexing abilities which + are explained in Section +\begin_inset LatexCommand ref +reference "sec:Array-indexing" + +\end_inset + +. + A named field can be retrieved if key is a string and fields are defined + in the dtypedescr object associated with this array. + +\end_layout + +\begin_layout Description +__setitem__ +\begin_inset LatexCommand index +name "ndarray!special methods!setitem" + +\end_inset + + (key, value) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Called when evaluating self[key]=value. + Items in the array can be set using this construct. + This construct is explained in Section +\begin_inset LatexCommand ref +reference "sec:Array-indexing" + +\end_inset + +. + A named field can be set if key is a string and fields are defined in the + dtypedescr object associated with this array. + +\end_layout + +\begin_layout Description +__getslice__ +\begin_inset LatexCommand index +name "ndarray!special methods!getslice" + +\end_inset + + (i, j) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to self.__getitem__(slice(i,j)) but defined mainly so that C + code can use the sequence interface. + Called to evaluate self[i:j] +\end_layout + +\begin_layout Description +__setslice__ +\begin_inset LatexCommand index +name "ndarray!special methods!setslice" + +\end_inset + + (i, j, value) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to self.__setitem__(slice(i,j), value) but defined mainly so + C code can use the sequence interface. + Called to evaluate self[i:j] = value. +\end_layout + +\begin_layout Description +__contains__ +\begin_inset LatexCommand index +name "ndarray!special methods!contains" + +\end_inset + + (item) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Called to determine truth value of the +\family typewriter +item in self +\family default + construct. + Returns the equivalent of (self==item).any() +\end_layout + +\begin_layout Subsection +Arithmetic customization +\end_layout + +\begin_layout Subsubsection +Binary +\end_layout + +\begin_layout Description +__add__ +\begin_inset LatexCommand index +name "ndarray!special methods!add" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__sub__ +\begin_inset LatexCommand index +name "ndarray!special methods!sub" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__mul__ +\begin_inset LatexCommand index +name "ndarray!special methods!mul" + +\end_inset + + (self, other) +\end_layout + +\begin_layout Description +__div__ +\begin_inset LatexCommand index +name "ndarray!special methods!div" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__truediv__ +\begin_inset LatexCommand index +name "ndarray!special methods!truediv" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__floordiv__ +\begin_inset LatexCommand index +name "ndarray!special methods!floordiv" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__mod__ +\begin_inset LatexCommand index +name "ndarray!special methods!mod" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__divmod__ +\begin_inset LatexCommand index +name "ndarray!special methods!divmod" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__pow__ +\begin_inset LatexCommand index +name "ndarray!special methods!pow" + +\end_inset + + (other[,modulo]) +\end_layout + +\begin_layout Description +__lshift__ +\begin_inset LatexCommand index +name "ndarray!special methods!lshift" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__rshift__ +\begin_inset LatexCommand index +name "ndarray!special methods!rshift" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__and__ +\begin_inset LatexCommand index +name "ndarray!special methods!and" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__or__ +\begin_inset LatexCommand index +name "ndarray!special methods!or" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__xor__ +\begin_inset LatexCommand index +name "ndarray!special methods!xor" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +\InsetSpace ~ + These methods are defined for ndarrays to implement the operations ( +\family typewriter ++ +\family default +, +\family typewriter +- +\family default +, +\family typewriter +* +\family default +, +\family typewriter +/, +\family default + +\family typewriter +/, +\family default + +\family typewriter +// +\family default +, +\family typewriter +% +\family default +, +\family typewriter +divmod() +\family default +, +\family typewriter +** +\family default + or +\family typewriter +pow() +\family default +, +\family typewriter +<<, +\family default + +\family typewriter +>> +\family default +, +\family typewriter +& +\family default +, +\family typewriter +^ +\family default +, +\family typewriter +| +\family default +). + This is done using calls to the corresponding universal function object + (add, subtract, multiply, divide, true_divide, floor_divide, remainder, + divide and remainder, power, left_shift, right_shift, bitwise_and, bitwise_xor, + bitwise_or). + These implement element-by-element operations for arrays that are broadcastable + to the same shape. + +\end_layout + +\begin_layout Itemize +any third argument to +\family typewriter +pow() +\family default + is silently ignored as the underlying ufunc (power) only takes two arguments. +\end_layout + +\begin_layout Itemize +the three division operators are all defined, div is active by default, + truediv is active when __future__.division is in effect. +\end_layout + +\begin_layout Note +Because it is a built-in type (written in C), the __r<op>__ special methods + are not directly defined for the ndarray. +\end_layout + +\begin_layout Subsubsection +In-place +\end_layout + +\begin_layout Description +__iadd__ +\begin_inset LatexCommand index +name "ndarray!special methods!iadd" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__isub__ +\begin_inset LatexCommand index +name "ndarray!special methods!isub" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__imul__ +\begin_inset LatexCommand index +name "ndarray!special methods!imul" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__idiv__ +\begin_inset LatexCommand index +name "ndarray!special methods!idiv" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__itruediv__ +\begin_inset LatexCommand index +name "ndarray!special methods!itruediv" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__ifloordiv__ +\begin_inset LatexCommand index +name "ndarray!special methods!ifloordiv" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__imod__ +\begin_inset LatexCommand index +name "ndarray!special methods!imod" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__ipow__ +\begin_inset LatexCommand index +name "ndarray!special methods!ipow" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__ilshift__ +\begin_inset LatexCommand index +name "ndarray!special methods!ilshift" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__irshift__ +\begin_inset LatexCommand index +name "ndarray!special methods!irshift" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__iand__ +\begin_inset LatexCommand index +name "ndarray!special methods!iand" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__ixor__ +\begin_inset LatexCommand index +name "ndarray!special methods!ixor" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +__ior__ +\begin_inset LatexCommand index +name "ndarray!special methods!ior" + +\end_inset + + (other) +\end_layout + +\begin_layout Description +\InsetSpace ~ + These methods are implemented to handle the inplace operatiors ( +\family typewriter ++= +\family default +, +\family typewriter +-= +\family default +, +\family typewriter +*= +\family default +, +\family typewriter +/= +\family default +, +\family typewriter +/= +\family default +, +\family typewriter +//= +\family default +, +\family typewriter +%= +\family default +, +\family typewriter +** +\family default +=, +\family typewriter +<< +\family default +=, +\family typewriter +>>= +\family default +, +\family typewriter +&= +\family default +, +\family typewriter +^= +\family default +, +\family typewriter +|= +\family default +). + The inplace operators are implemented using the corresponding ufunc and + its ability to take an output argument (which is set as self). + Using inplace operations can save space and time and is therefore encouraged + whenever appropriate. + +\end_layout + +\begin_layout Warning +In place operations will perform the calculation using the precision decided + by the data type of the two operands, but will silently downcast the result + (if necessary) so it can fit back into the array. + Therefore, for mixed precision calculations, a <op>= B can be different + than a = a <op> B. + For example, suppose a=ones((3,3)). + Then a+=3j is different than a=a+3j While they both perform the same computatio +n, a+=3j casts the result to fit back in a, while a=a+3j re-binds the name + a to the result. +\end_layout + +\begin_layout Subsubsection +Unary operations +\end_layout + +\begin_layout Description +__neg__ +\begin_inset LatexCommand index +name "ndarray!special methods!neg" + +\end_inset + + (self) +\end_layout + +\begin_layout Description +__pos__ +\begin_inset LatexCommand index +name "ndarray!special methods!pos" + +\end_inset + + (self) +\end_layout + +\begin_layout Description +__abs__ +\begin_inset LatexCommand index +name "ndarray!special methods!abs" + +\end_inset + + (self) +\end_layout + +\begin_layout Description +__invert__ +\begin_inset LatexCommand index +name "ndarray!special methods!invert" + +\end_inset + + (self) +\end_layout + +\begin_layout Description +\InsetSpace ~ + These functions are called in response to the unary operations ( +\family typewriter +- +\family default +, +\family typewriter ++ +\family default +, +\family typewriter +abs() +\family default +, +\family typewriter +~ +\family default +). + With the exception of __pos__, these are implemented using ufuncs (negative, + absolute, invert). + The unary +\family typewriter ++ +\family default + operator, however simply calls self.copy(), and can therefore be used to + get a copy of an array. + +\end_layout + +\begin_layout Description +__complex__ +\begin_inset LatexCommand index +name "ndarray!special methods!complex" + +\end_inset + + (self) +\end_layout + +\begin_layout Description +__int__ +\begin_inset LatexCommand index +name "ndarray!special methods!int" + +\end_inset + + (self) +\end_layout + +\begin_layout Description +__long__ +\begin_inset LatexCommand index +name "ndarray!special methods!long" + +\end_inset + + (self) +\end_layout + +\begin_layout Description +__float__ +\begin_inset LatexCommand index +name "ndarray!special methods!float" + +\end_inset + + (self) +\end_layout + +\begin_layout Description +__oct__ +\begin_inset LatexCommand index +name "ndarray!special methods!oct" + +\end_inset + + (self) +\end_layout + +\begin_layout Description +__hex__ +\begin_inset LatexCommand index +name "ndarray!special methods!hex" + +\end_inset + + (self) +\end_layout + +\begin_layout Description +\InsetSpace ~ + These functions are also defined for the +\family typewriter +ndarray +\family default + object to handle the operations +\family typewriter +complex() +\family default +, +\family typewriter +int() +\family default +, +\family typewriter +long() +\family default +, +\family typewriter +float() +\family default +, +\family typewriter +oct() +\family default +, and +\family typewriter +hex() +\family default +. + They work only on arrays that have one element in them and return the appropria +te scalar +\begin_inset LatexCommand index +name "ndarray!special methods|)" + +\end_inset + +. + +\end_layout + +\begin_layout Tip +The function called to implement many arithmetic special methods for arrays + can be modified using the function set_numeric_ops. + This function is called with keyword arguments indicating which operation(s) + to replace. + A dictionary is returned containing showing the old functions. + By default, these functions are set to the corresponding ufunc. + +\end_layout + +\begin_layout Section +Array indexing +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand label +name "sec:Array-indexing" + +\end_inset + + +\end_layout + +\begin_layout Standard +More powerful array +\begin_inset LatexCommand index +name "indexing|(" + +\end_inset + + indexing +\begin_inset LatexCommand index +name "ndarray!special methods!getitem" + +\end_inset + + was an important extension introduced by numarray, and was therefore an + important part of the development of NumPy. + In particular, the desire to select arbitrary elements based on their position + in the array, and according to a mask was desirable. + +\end_layout + +\begin_layout Standard +There are two kinds of indexing available using the +\family typewriter +X[obj] +\family default + syntax: basic slicing, and advanced indexing +\begin_inset LatexCommand index +name "ndarray!special methods!setitem" + +\end_inset + +. + For the description of this syntax given below, X is the array to-be-sliced + and obj is the +\emph on +selection +\emph default + object. + Furthermore, define +\begin_inset Formula $N\equiv$ +\end_inset + +X.ndim. + These two methods of slicing have different behavior and are triggered + depending on obj. + Adding additional functionality yet remaining compatible with old uses + of slicing complicated the rules a little. + Hopefully, after studying this section, you will have a firm grasp of what + kind of selection will be initiated depending on the selection object. +\end_layout + +\begin_layout Tip +in Python X[(exp1, exp2, ..., expN)] is equivalent to X[exp1, exp2, ..., expN] + as the latter is just syntactic sugar for the former. +\end_layout + +\begin_layout Subsection +Basic Slicing +\end_layout + +\begin_layout Standard +Basic slicing +\begin_inset LatexCommand index +name "ndarray!special methods!getslice" + +\end_inset + + extends Python's basic concept of slicing +\begin_inset LatexCommand index +name "ndarray!special methods!setslice" + +\end_inset + + to N dimensions. + Basic slicing occurs when obj is a slice object (constructed by start:stop:step + notation inside of brackets), an integer, or a tuple of slice objects and + integers. + Ellipsis and newaxis objects can be interspersed with these as well. + In order to remain backward compatible with a common usage in Numeric, + basic slicing is also initiated if the selection object is any sequence + (such as a list) containing slice objects, the ellipsis +\begin_inset LatexCommand index +name "ellipsis" + +\end_inset + + object, or the newaxis +\begin_inset LatexCommand index +name "newaxis" + +\end_inset + + object, but no integer arrays or other embedded sequences. + +\end_layout + +\begin_layout Standard +The standard rules of sequence slicing apply to basic slicing on a per-dimension + basis (including using a step index). + Some useful concepts to remember include: +\end_layout + +\begin_layout Itemize +The basic slice syntax is ' +\begin_inset Formula $i:j:k$ +\end_inset + +' where +\begin_inset Formula $i$ +\end_inset + + is the starting index, +\begin_inset Formula $j$ +\end_inset + + is the stopping index, and +\begin_inset Formula $k$ +\end_inset + + is the step ( +\begin_inset Formula $k\neq0$ +\end_inset + +). + This selects the +\begin_inset Formula $m$ +\end_inset + + elements (in the corresponding dimension) with index values +\begin_inset Formula $i,\, i+k,\,\ldots,\, i+(m-1)k$ +\end_inset + + where +\begin_inset Formula $m=q+(r\neq0)$ +\end_inset + + where +\begin_inset Formula $q$ +\end_inset + + and +\begin_inset Formula $r$ +\end_inset + + are the quotient and remainder obtained by dividing +\begin_inset Formula $j-i$ +\end_inset + + by +\begin_inset Formula $k$ +\end_inset + +: +\begin_inset Formula $j-i=qk+r$ +\end_inset + +, so that +\begin_inset Formula $i+\left(m-1\right)k<j.$ +\end_inset + + +\end_layout + +\begin_layout Itemize +Assume +\begin_inset Formula $n$ +\end_inset + + is the number of elements in the dimension being sliced. + Then, if +\begin_inset Formula $i$ +\end_inset + + is not given it defaults to 0 for +\begin_inset Formula $k>0$ +\end_inset + + and +\begin_inset Formula $n$ +\end_inset + + for +\begin_inset Formula $k<0$ +\end_inset + +. + If +\begin_inset Formula $j$ +\end_inset + + is not given it defaults to +\begin_inset Formula $n$ +\end_inset + + for +\begin_inset Formula $k>0$ +\end_inset + + and +\begin_inset Formula $-1$ +\end_inset + + for +\begin_inset Formula $k<0$ +\end_inset + +. + If +\begin_inset Formula $k$ +\end_inset + + is not given it defaults to 1. + Note that '::' is the same as ':' and means select all indices along this + axis. + +\end_layout + +\begin_layout Itemize +If the number of objects in the selection tuple is less than +\begin_inset Formula $N$ +\end_inset + +, then ':' is assumed for any remaining dimensions. +\end_layout + +\begin_layout Itemize +Ellipsis expand to the number of ':' objects needed to make a selection + tuple of the same length as X.ndim. + Only one ellipsis is expanded, any others are interpreted as more ':' +\end_layout + +\begin_layout Itemize +Each newaxis object in the selection tuple serves to expand the dimensions + of the resulting selection by one unit-length dimension. + The added dimension is the position of the newaxis object in the selection + tuple. + +\end_layout + +\begin_layout Itemize +An integer, +\begin_inset Formula $i$ +\end_inset + +, returns the same values as +\begin_inset Formula $i:i+1$ +\end_inset + + +\series bold +except +\series default + the dimensionality of the returned object is reduced by 1. + In particular, a selection tuple with the +\begin_inset Formula $p^{\textrm{th}}$ +\end_inset + + element an integer (and all other entries ':') returns the corresponding + sub-array with dimension +\begin_inset Formula $N-1$ +\end_inset + +. + If +\begin_inset Formula $N=1,$ +\end_inset + + then the returned object is an Array Scalar. + These objects are explained in Chapter +\begin_inset LatexCommand ref +reference "cha:Scalar-objects" + +\end_inset + +. +\end_layout + +\begin_layout Itemize +If the selection tuple has all entries ':' except the +\begin_inset Formula $p^{\textrm{th}}$ +\end_inset + + entry which is a slice object +\begin_inset Formula $i:j:k$ +\end_inset + +, then the returned array has dimension +\begin_inset Formula $N$ +\end_inset + + formed by concatenating the sub-arrays returned by integer indexing of + elements +\begin_inset Formula $i$ +\end_inset + +, +\begin_inset Formula $i+k$ +\end_inset + +, +\begin_inset Formula $i+(m-1)k<j$ +\end_inset + +, +\end_layout + +\begin_layout Itemize +Basic slicing with more than one non-':' entry in the slicing tuple, acts + like repeated application of slicing using a single non-':' entry, where + the non-':' entries are successively taken (with all other non-':' entries + replaced by ':'). + Thus, X[ind1,...,ind2,:] acts like X[ind1][...,ind2,:] under basic slicing. + Note this is NOT true for advanced slicing. + +\end_layout + +\begin_layout Itemize +You may use slicing to set values in the array, but (unlike lists) you can + never grow the array. + The size of the value to be set in X[obj] = value must be (broadcastable) + to the same shape as X[obj]. + +\end_layout + +\begin_layout Standard +Basic slicing always returns another +\emph on +view +\begin_inset LatexCommand index +name "ndarray!view" + +\end_inset + + +\emph default + of the array. + In other words, the returned array from a basic slicing operation uses + the same data as the original array. + This can be confusing at first, but it is faster and can save memory. + A copy can always be obtained if needed using the unary + operator (which + has lower precedence than slicing) or the .copy() method. + +\end_layout + +\begin_layout Tip +Remember that a slicing tuple can always be constructed as obj and used + in the x[obj] notation. + Slice objects can be used in the construction in place of the [start:stop:step] + notation. + For example, +\family typewriter +x[1:10:5,::-1] +\family default + can also be implemented as +\family typewriter +obj=(slice(1,10,5), slice(None,None,-1)); X[obj] +\family default +. + This can be useful for constructing generic code that works on arrays of + arbitrary dimension. +\end_layout + +\begin_layout Subsection +Advanced selection +\end_layout + +\begin_layout Standard +Advanced selection is triggered when the selection object, obj, is a non-tuple + sequence object, an ndarray (of data type integer or bool), or a tuple + with at least one sequence object or ndarray (of data type integer or bool). + There are two types of advanced indexing: integer and Boolean. + Advanced selection always returns a copy of the data (contrast with basic + slicing that returns a view). + +\end_layout + +\begin_layout Subsubsection +Integer +\end_layout + +\begin_layout Standard +Integer indexing allows selection of arbitrary items in the array based + on their +\begin_inset Formula $N$ +\end_inset + +-dimensional index. + This kind of selection occurs when advanced selection is triggered and + the selection object is not an array of data type bool. + For the discussion below, when the selection object is not a tuple, it + will be referred to as if it had been promoted to a 1-tuple, which will + be called the selection tuple. + The rules of advanced integer-style indexing are: +\end_layout + +\begin_layout Itemize +if the length of the selection tuple is larger than +\begin_inset Formula $N$ +\end_inset + +(=X.ndim) an error is raised. +\end_layout + +\begin_layout Itemize +all sequences and scalars in the selection tuple are converted to intp indexing + arrays. + +\end_layout + +\begin_layout Itemize +all selection tuple objects must be convertible to intp arrays, or slice + objects, or the Ellipsis (...) object. +\end_layout + +\begin_layout Itemize +Exactly one Ellipsis object will be expanded, any other Ellipsis objects + will be treated as full slice (':') objects. + The Ellipsis object is replaced with as many full slice (':') objects as + needed to make the length of the selection tuple +\begin_inset Formula $N$ +\end_inset + +. + +\end_layout + +\begin_layout Itemize +If the selection tuple is smaller than +\begin_inset Formula $N$ +\end_inset + +, then as many ':' objects as needed are added to the end of the selection + tuple so that the modified selection tuple has length +\begin_inset Formula $N$ +\end_inset + +. +\end_layout + +\begin_layout Itemize +The shape of all the integer indexing arrays must be broadcastable to the + same shape. + Arrays are broadcastable if any of the following are satisfied +\end_layout + +\begin_deeper +\begin_layout Enumerate +The arrays all have exactly the same shape. +\end_layout + +\begin_layout Enumerate +The arrays all have the same number of dimensions and the length of each + dimensions is either a common length or 1. +\end_layout + +\begin_layout Enumerate +The arrays that have too few dimensions can have their shapes pre-pended + with a dimension of length 1 to satisfy property 2. + +\end_layout + +\end_deeper +\begin_layout Itemize +The shape of the output (or the needed shape of the object to be used for + setting) is the broadcasted shape. + +\end_layout + +\begin_deeper +\begin_layout Description +Example: If a.shape is (5,1), b.shape is (1,6), c.shape is (6,) and d.shape + is () so that d is a scalar, then a, b, c, and d are all broadcastable + to dimension (5,6). + The array +\begin_inset Quotes eld +\end_inset + +a +\begin_inset Quotes erd +\end_inset + + acts like a (5,6) array where a[:,0] is broadcast to the other columns, + +\begin_inset Quotes eld +\end_inset + +b +\begin_inset Quotes erd +\end_inset + + acts like a (5,6) array where b[0,:] is broadcast to the other rows, +\begin_inset Quotes eld +\end_inset + +c +\begin_inset Quotes erd +\end_inset + + acts like a (1,6) array and therefore a (5,6) where c[:] is broadcast to + every row, and finally +\begin_inset Quotes eld +\end_inset + +d +\begin_inset Quotes erd +\end_inset + + acts like a (5,6) array where the single values is repeated. + +\end_layout + +\end_deeper +\begin_layout Itemize +After expanding any ellipses and filling out any missing (':') objects in + the selection tuple, then let +\begin_inset Formula $N_{t}$ +\end_inset + + be the number of indexing arrays, and let +\begin_inset Formula $N_{s}=N-N_{t}$ +\end_inset + + be the number of slice objects. + Note that +\begin_inset Formula $N_{t}>0$ +\end_inset + + (or we wouldn't be doing advanced integer indexing). + +\end_layout + +\begin_layout Itemize +If +\begin_inset Formula $N_{s}=0$ +\end_inset + + then the +\begin_inset Formula $M$ +\end_inset + +-dimensional result is constructed by varying the index tuple +\begin_inset Formula $\left(i_{1},\ldots,i_{M}\right)$ +\end_inset + + over the range of the result shape and for each value of the index tuple + setting: +\begin_inset Formula \[ +\textrm{result[$i_{1},\ldots,i_{M}$]=X[ind$_{1}$[$i_{1},\ldots i_{M}$], ind$_{2}$[$i_{1},\ldots,i_{M}$], \, etc.,\, ind$_{N}$[$i_{1},\ldots,i_{M}$]}.\] + +\end_inset + + +\end_layout + +\begin_deeper +\begin_layout Description +Example: Suppose the shape of the broadcasted indexing arrays is 3-dimensional + and +\begin_inset Formula $N$ +\end_inset + + is 2. + Then the result is found by letting +\begin_inset Formula $i,j,k$ +\end_inset + + run over the shape found by broadcasting +\begin_inset Formula $\textrm{ind}_{1},$ +\end_inset + + and +\begin_inset Formula $\textrm{ind}_{2},$ +\end_inset + +and for each +\begin_inset Formula $i,j,k$ +\end_inset + + setting result[ +\begin_inset Formula $i,j,k$ +\end_inset + +] = X[ +\begin_inset Formula $\textrm{ind}_{1}[i,j,k]$ +\end_inset + +, +\begin_inset Formula $\textrm{ind}_{2}[i,j,k]$ +\end_inset + +]. + +\end_layout + +\end_deeper +\begin_layout Itemize +If +\begin_inset Formula $N_{s}>0$ +\end_inset + +, then partial indexing is done. + This can be somewhat mind-boggling to understand, but if you think in terms + of the shapes of the arrays involved, it can be easier to grasp what happens. + In simple cases ( +\emph on +i.e. + +\emph default + one indexing array and +\begin_inset Formula $N-1$ +\end_inset + + slice objects) it does exactly what you would expect (concatenation of + repeated application of basic slicing). + The rule for partial indexing is that the shape of the result (or the interpret +ed shape of the object to be used in setting) is the shape of X with the + indexed subspace replaced with the broadcasted indexing subspace. + If the index subspaces are right next to each other, then the broadcasted + indexing space directly replaces all of the indexed subspaces in X. + If the indexing subspaces are separated (by slice objects), then the broadcaste +d indexing space is first, followed by the sliced subspace of X. + +\end_layout + +\begin_deeper +\begin_layout Description +Example\InsetSpace ~ +1: Suppose X.shape is (10,20,30) and ind is a (2,3,4) indexing intp + array, then result=X[...,ind,:] has shape (10,2,3,4,30) because the (20,)-shaped + subspace has been replaced with a (2,3,4)-shaped broadcasted indexing subspace. + If we let +\begin_inset Formula $i,j,k$ +\end_inset + + loop over the (2,3,4)-shaped subspace then result[...,i,j,k,:] = X[...,ind[i,j,k],:]. + This example produces the same result as X.take(ind,axis=-2). + +\end_layout + +\begin_layout Description +Example\InsetSpace ~ +2: Now let X.shape be (10,20,30,40,50) and suppose +\begin_inset Formula $\textrm{ind}_{1}$ +\end_inset + + and +\begin_inset Formula $\textrm{ind}_{2}$ +\end_inset + + are broadcastable to the shape (2,3,4). + Then X[:,ind +\begin_inset Formula $_{1}$ +\end_inset + +,ind +\begin_inset Formula $_{2}$ +\end_inset + +] has shape (10,2,3,4,40,50) because the (20,30)-shaped subspace from X + has been replaced with the (2,3,4) subspace from the indices. + However, X[:,ind +\begin_inset Formula $_{1}$ +\end_inset + +,:,ind +\begin_inset Formula $_{2}$ +\end_inset + +,:] has shape (2,3,4,10,30,50) because there is no unambiguous place to + drop in the indexing subspace, thus it is tacked-on to the beginning. + It is always possible to use .transpose() to move the sups pace anywhere + desired. + This example cannot be replicated using take. + +\end_layout + +\end_deeper +\begin_layout Subsubsection +Boolean +\end_layout + +\begin_layout Standard +This advanced selection occurs when obj is an array object of Boolean type + (such as may be returned from comparison operators). + It is always equivalent to (but faster than) X[obj.nonzero()] where as described + above obj.nonzero() returns a tuple (of length obj.ndim) of integer index + arrays showing the True elements of obj. + +\end_layout + +\begin_layout Standard +The special case when obj.ndim == X.ndim is worth mentioning. + In this case X[obj] returns a 1-dimensional array filled with the elements + of X corresponding to the True values of obj. + It The search order will be C-style (last index varies the fastest). + If obj has True values at entries that are outside of the bounds of X, + then an index error will be raised. +\end_layout + +\begin_layout Standard +You can also use Boolean arrays as element of the selection tuple. + In such instances, they will always be interpreted as nonzero(obj) and + the equivalent integer indexing will be done. + In general you can think of indexing with Boolean arrays as indexing with + nonzero(<Boolean>). +\end_layout + +\begin_layout Warning +the definition of advanced selection means that X[(1,2,3),] is fundamentally + different than X[(1,2,3)]. + The latter is equivalent to X[1,2,3] which will trigger basic selection + while the former will trigger advanced selection. + Be sure to understand why this is True. + You should also recognize that x[[1,2,3]] will trigger advanced selection, + but X[[1,2,slice(None)]] will trigger basic selection. +\end_layout + +\begin_layout Subsection +Flat Iterator indexing +\end_layout + +\begin_layout Standard +As mentioned previously, X.flat returns an iterator that will iterate over + the entire array (in C-contiguous style with the last index varying the + fastest). + This iterator object can also be indexed using basic slicing or advanced + indexing as long as the selection object is not a tuple. + This should be clear from the fact that X.flat is a 1-dimensional view. + X.flat can be used for integer indexing using 1-dimensional C-style-flat + indices. + The shape of any returned array is therefore the shape of the integer indexing +\begin_inset LatexCommand index +name "indexing|)" + +\end_inset + + object +\begin_inset LatexCommand index +name "ndarray|)" + +\end_inset + +. + +\end_layout + +\begin_layout Chapter +Basic Routines +\end_layout + +\begin_layout Quotation +Do not pray for tasks equal to your powers; pray for powers equal to your + tasks. + Then the doing of your work shall be no miracle, but you shall be the miracle. +\end_layout + +\begin_layout Right Address +--- +\emph on +Phillips Brooks +\end_layout + +\begin_layout Quote +Education isn't how much you have committed to memory, or even how much + you know. + It's being able to differentiate between what you do know and what you + don't. +\end_layout + +\begin_layout Right Address +--- +\emph on +Anatole France +\end_layout + +\begin_layout Section +Creating arrays +\end_layout + +\begin_layout Description +array +\begin_inset LatexCommand index +name "array" + +\end_inset + + (object=, dtype=None, copy=True, order=None, subok=False, ndmin=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Create a new ndarray of data type, dtype (or determined from object if + dtype is None). + The shape of the new array will be determined from object. + If copy is True, then ensure a copy of the object is made. + If copy is False, then the returned object is a copy of the array only + if dtype is not equivalent to the data type of object. + If order is 'Fortran' then the resulting array will be in Fortran order, + otherwise it is in C order. + If subok (subclasses are O.K.) is True then pass through subclasses of the + array object if possible. + If subok is False then only ndarray objects may be returned. + The ndmin parameter specifies that the returned array must have at least + the given number of dimensions. + +\end_layout + +\begin_layout Description +asarray +\begin_inset LatexCommand index +name "asarray" + +\end_inset + + (object=, dtype=None, order=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Exactly the same as array(...) except the default copy argument is False, + and subok is always False. + Using this function always returns the base class ndarray. + +\end_layout + +\begin_layout Description +asanyarray +\begin_inset LatexCommand index +name "asanyarray" + +\end_inset + + (object, dtype=None, order=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Thin wrapper around array(...) with subok=1. + You should use this routine if you are only making use of the array attributes, + and believe the calculations that will follow would work with any subclass + of the array. + Use of this routine increases the chance that array subclasses will interact + seamlessly with your function --- returning the same subclasses. + +\end_layout + +\begin_layout Description +require +\begin_inset LatexCommand index +name "require" + +\end_inset + + (object, dtype=None, requirements=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Require a Python object to be an ndarray (or a sub-class) of the given + data-type if it can be cast safely, otherwise raise an error. + The requirements, if given, are a sequence containing the requested combination + of the flags 'C_CONTIGUOUS' ('C'), 'F_CONTIGUOUS' ('F'), 'ALIGNED' ('A'), + 'WRITEABLE' ('W'), 'OWNDATA' ('O'), and the special directive 'ENSUREARRAY' + ('E'). + These strings dictate which flags should be set on the return array (note + only one of 'F_CONTIGUOUS' or 'C_CONTIGUOUS' should be used and 'F_CONTIGUOUS' + over-rides 'C_CONTIGUOUS'). + The special directive 'ENSUREARRAY' makes sure that a base-class ndarray + is returned instead of allowing sub-classes to pass through. + This function is particularly useful in a Python interface to C-code (say + called using ctypes +\begin_inset LatexCommand index +name "ctypes" + +\end_inset + +). + +\end_layout + +\begin_layout Description +arange +\begin_inset LatexCommand index +name "arange" + +\end_inset + + (start=, stop=None, step=1, dtype=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Function similar to Python's built-in range() function except it returns + an ndarray object. + Return a 1-d array of data type, dtype (or determined from the start, stop, + and step objects if None), that starts at start, ends +\emph on +before +\emph default + stop and is incremented by step. + The returned array has length +\begin_inset Formula $n$ +\end_inset + + where +\begin_inset Formula \[ +n=\left\lceil \frac{\textrm{stop}-\textrm{start}}{\textrm{step}}\right\rceil \] + +\end_inset + + with element +\begin_inset Formula $i$ +\end_inset + + equal to +\begin_inset Formula $\textrm{start}+i\cdot\textrm{step}.$ +\end_inset + + If stop is None, then the first argument is interpreted as stop and start + is 0. + +\end_layout + +\begin_layout Note +By definition of the ceiling function (denoted by +\begin_inset Formula $\left\lceil x\right\rceil $ +\end_inset + +), we know that +\begin_inset Formula $x\leq\left\lceil x\right\rceil <x+1$ +\end_inset + +, therefore this definition of the length of arange guarantees that +\begin_inset Formula $\textrm{start}+n\cdot\textrm{step}\geq\textrm{stop}$ +\end_inset + + as well as +\begin_inset Formula $\textrm{start}+(n-1)\cdot\textrm{step}<\textrm{stop}$ +\end_inset + +. + +\end_layout + +\begin_layout Description +isfortran +\begin_inset LatexCommand index +name "isfortran" + +\end_inset + + (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to +\family typewriter +arr.flags.fnc +\family default + and therefore returns True only if arr is Fortran-contiguous but not also + C-contiguous. +\end_layout + +\begin_layout Description +empty +\begin_inset LatexCommand index +name "empty" + +\end_inset + + (shape=, dtype=int, order='C') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an uninitialized array of data type, dtype, and given shape. + The memory layout defaults to C-style contiguous, but can be made Fortran-style + contiguous with a 'Fortran' order keyword. +\end_layout + +\begin_layout Description +empty_like +\begin_inset LatexCommand index +name "empty\\_like" + +\end_inset + + (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Syntactic sugar for empty(a.shape, a.dtype, isfortran(arr)) +\end_layout + +\begin_layout Description +zeros +\begin_inset LatexCommand index +name "zeros" + +\end_inset + + (shape=, dtype=int, order='C') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an array of data type dtype and given shape filled with zeros. + The memory layout may be altered from the default C-style contiguous with + the order keyword. +\end_layout + +\begin_layout Description +zeros_like +\begin_inset LatexCommand index +name "zeros\\_like" + +\end_inset + + (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Syntactic sugar for zeros(a.shape, a.dtype, isfortran(arr)) +\end_layout + +\begin_layout Description +ones +\begin_inset LatexCommand index +name "ones" + +\end_inset + + (shape=, dtype=int, order='C') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Syntactic sugar for a = zeros(shape, dtype, order); a+= 1. + +\end_layout + +\begin_layout Description +fromstring +\begin_inset LatexCommand index +name "fromstring" + +\end_inset + + (string=,dtype=int, count=-1, sep='') +\end_layout + +\begin_layout Description +\InsetSpace ~ + If sep is '', then return a new 1-d array with data-type descriptor given + by dtype and with memory initialized (copied) from the raw binary data + in string. + If count is non-negative, the new array will have count elements (with + a +\family typewriter +ValueError +\family default + raised if count requires more data than the string offers), otherwise the + size of the string must be a multiple of the itemsize implied by dtype, + and count will be the length of the string divided by the itemsize. + +\end_layout + +\begin_layout Description +\InsetSpace ~ + If sep is not '', then interpret the string in ASCII mode with the provided + separator and convert the string to an array of numbers. + Any additional white-space will be ignored. +\end_layout + +\begin_layout Description +fromfile +\begin_inset LatexCommand index +name "fromfile" + +\end_inset + + (file=, dtype=int, count=-1, sep='') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a 1-d array of data type, dtype, from a file (open file object or + string with the name of a file to read). + The file will be read in binary mode if sep is the empty string. + Otherwise, the file will be read in text mode with sep providing the separator + string between the entries. + If count is -1, then the size will be determined from the file, otherwise, + up to count items will be read from the file. + If fewer than count items are read, then a RunTimeWarning is issued indicating + the number of items read. +\end_layout + +\begin_layout Description +frombuffer +\begin_inset LatexCommand index +name "frombuffer" + +\end_inset + + (buffer, dtype=intp, count=-1, offset=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Very similar to (binary-mode) fromstring in interpretation of the arguments, + except buffer can be any object exposing the buffer interface (or any object + with a __buffer__ attribute that returns a buffer exposing the buffer protocol). + The new array shares memory with the buffer object. + The new array will be read-only if the buffer does not expose a writeable + buffer. + +\end_layout + +\begin_layout Description +fromiter +\begin_inset LatexCommand index +name "fromiter" + +\end_inset + + (iterator_or_generator, dtype=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct an array from an iterator or a generator. + Only handles 1-dimensional cases. + By default the data-type is determined from the objects returned from the + iterator. + +\end_layout + +\begin_layout Description +load +\begin_inset LatexCommand index +name "load" + +\end_inset + + (file) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Load a NumPy binary file (.npy), a NumPy binary zipfile (.npz), or a pickled + Python object from an open file. + If file is a string, then open a file with that name first. + Which kind of file should be loaded is determined by the magic bytes at + the front of the file (not by filename extension). + See +\shape italic +save +\shape default + and +\shape italic +savez +\shape default + for functions which write .npy and .npz files from NumPy arrays. + If file is a binary zipfile, then an instance of NpzObj is returned. + This object is a simple wrapper around the zip-file which allows extraction + of the arrays stored within it. + The .files attribute of the NpzObj returns a list of all arrays in the archive. + These arrays are accessible through a dictionary-like interface (obj['name']) + or through attribute lookup through the .f attribute of the returned object + (obj.f.name). + If the file is a NumPy binary file (.npy), then the array itself is returned + from this function. + If the file contains a pickled object, then that object is returned. + +\end_layout + +\begin_layout Description +loads +\begin_inset LatexCommand index +name "loads" + +\end_inset + + (str) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Load a pickled array from a string. + Equivalent to cPickle.loads(str). + This function will likely be deprecated in the future. + Use cPickle instead. +\end_layout + +\begin_layout Description +save +\begin_inset LatexCommand index +name "save" + +\end_inset + + (file, arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Save the array into a file which can be a string or an open file-like object. + If the file is given as a string, then it will have .npy appended if it + does not already end with that extension. + The .npy file format is NumPy-specific and is documented in the numpy.lib.format + module. + It only stores a single array. + +\end_layout + +\begin_layout Description +savez +\begin_inset LatexCommand index +name "savez" + +\end_inset + + (file, *args, **kwds) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Save a sequence of arrays into a NumPy binary zipfile (.npz). + An .npz file is a regular zip-file containing multiple .npy files. + If keywords are given, then the keyword names are used as filenames (with + the .npy extension added) in the zip-file with the corresponding values + being converted to arrays and stored in the specified filename. + Any non-keyword arguments that are passed in results in the names arr_0, + arr_1, etc. + being used in the zip-file (if a keyword by one of those names also exists, + then a ValueError is raised). + +\end_layout + +\begin_layout Description +loadtxt +\end_layout + +\begin_layout Description +savetxt +\end_layout + +\begin_layout Description +DataSource +\end_layout + +\begin_layout Description +indices +\begin_inset LatexCommand index +name "indices" + +\end_inset + + (dimensions, dtype=intp) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an array of dtype representing +\begin_inset Formula $n$ +\end_inset + +(=len(dimensions)) grids of indices each with variation in a single direction. + The returned array has shape ( +\begin_inset Formula $n$ +\end_inset + +,)+dimensions. + Compare with mgrid. + +\end_layout + +\begin_layout MyCode +>>> indices((2,3)) +\newline +array([[[0, 0, 0], +\newline + [1, 1, 1]], +\newline + +\newline + [[0, 1, 2], +\newline + + [0, 1, 2]]]) +\end_layout + +\begin_layout Description +fromfunction +\begin_inset LatexCommand index +name "fromfunction" + +\end_inset + + (function, dimensions, **kwargs) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct an array from a function called on a tuple of index grids. + The function should be able to take array arguments and process them like + ufuncs (use vectorize if it doesn't). + The function should accept as many arguments as there are dimensions which + is a sequence of numbers indicating the length of the desired output for + each axis. + Keyword arguments to function may also be passed in as keywords to fromfunction. +\end_layout + +\begin_layout MyCode +>>> print fromfunction(lambda i,j: i+j, (2,3)) +\newline +[[ 0. + 1. + 2.] +\newline + [ 1. + 2. + 3.]] +\end_layout + +\begin_layout Description +identity +\begin_inset LatexCommand index +name "identity" + +\end_inset + + (n, dtype=intp) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a 2-d array of shape (n,n) and data type, dtype with ones along + the main diagonal. + +\end_layout + +\begin_layout Description +where +\begin_inset LatexCommand index +name "where" + +\end_inset + + (condition[, x, y]) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns an array shaped like condition, that has the elements of x and + y respectively where condition is respectively true or false. + If x and y are not given, then it is equivalent to nonzero(condition). +\end_layout + +\begin_layout Description +flatnonzero +\begin_inset LatexCommand index +name "flatnonzero" + +\end_inset + + (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return indices that are non-zero in a flattened version of arr. + Equivalent to a.ravel().nonzero()[0]. +\end_layout + +\begin_layout Description +putmask +\begin_inset LatexCommand index +name "putmask" + +\end_inset + + (arr=, mask=, values=) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Performs the equivalent of +\end_layout + +\begin_layout LyX-Code +for n, obj in enumerate( +\series bold +mask +\series default +.flat): +\end_layout + +\begin_layout LyX-Code + if obj: +\end_layout + +\begin_layout LyX-Code + self.flat[n] = +\series bold +values +\series default +[n] +\end_layout + +\begin_layout Description +\InsetSpace ~ + The values array is repeated if it is too short. + In particular, this means that indexing on the values array is modular + it's length, which might be surprising you are expecting putmask to work + the same as arr[mask]=values. +\end_layout + +\begin_layout Description +lexsort +\begin_inset LatexCommand index +name "lexsort" + +\end_inset + + (keys=, axis=-1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an array of indices similar to argsort except sorting is done using + all of the provided keys. + First a sort is computed using key[0], then the indices are further altered + by sorting on key[1]. + This is repeated until sorting has been performed on all of the keys. + This is a useful function for multiple-field sorting. +\end_layout + +\begin_layout MyCode +>>> a = [1,2,1,3,1,5]; b = [0,4,5,6,2,3] +\newline +>>> ind = lexsort((b,a)) +\newline +>>> print + take(a,ind) +\newline +[1 1 1 2 3 5] +\newline +>>> print take(b,ind) +\newline +[0 2 5 4 6 3] +\end_layout + +\begin_layout Description +\InsetSpace ~ + Notice the order the keys had to be used in order to get a lexicographical + sorting order. + To clarify, suppose three equal-length sequences are fields of an underlying + data-type: (f1,f2,f3). + If we want to sort first on f1 and then on f2 and then on f3, the indices + that would accomplish that sort are obtained as lexsort((f3,f2,f1)). +\end_layout + +\begin_layout Section +Operations on two or more arrays +\end_layout + +\begin_layout Description +concatenate +\begin_inset LatexCommand index +name "concatenate" + +\end_inset + + (seq=, axis=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct a new array from elements of the sequence object seq concatenated + along the given axis. + The elements of the sequence object must have compatible types and be the + same shape. + If axis is None, then flatten each element of seq before concatenating + together to construct a 1-d array. +\end_layout + +\begin_layout Description +correlate +\begin_inset LatexCommand index +name "correlate" + +\end_inset + + (x, y, mode='valid') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute the 1-d cross correlation of x and y keeping portions determined + by mode which may be 'valid' (0), 'same' (1), or 'full' (2). + The 'full' cross-correlation between two 1-d arrays is computed as +\begin_inset Formula \[ +z\left[n\right]=\sum_{i=\max\left(n-M,0\right)}^{\min\left(n,K\right)}x\left[i\right]y\left[n+i\right],\] + +\end_inset + +for +\begin_inset Formula $n=0\ldots K+M$ +\end_inset + + where +\begin_inset Formula $K$ +\end_inset + +=len( +\begin_inset Formula $x$ +\end_inset + +)-1 and +\begin_inset Formula $M$ +\end_inset + +=len( +\begin_inset Formula $y$ +\end_inset + +)-1, and we assume +\begin_inset Formula $K\geq M$ +\end_inset + + (without loss of generality because we can interchange the roles of +\begin_inset Formula $x$ +\end_inset + + and +\begin_inset Formula $y$ +\end_inset + + without effect). + For this formula to work, we assume that +\begin_inset Formula $x[i]=0$ +\end_inset + + when +\begin_inset Formula $i\notin\left[0,K-1\right]$ +\end_inset + + and +\begin_inset Formula $y[j]=0$ +\end_inset + + when +\begin_inset Formula $j\neq[0,M-1]$ +\end_inset + +. + +\end_layout + +\begin_layout Description +\InsetSpace ~ + If mode is 'same' then only the +\begin_inset Formula $K$ +\end_inset + + middle values are returned starting at +\begin_inset Formula $n=\left\lfloor \frac{M-1}{2}\right\rfloor $ +\end_inset + +. + If the flag has a value of 'valid' then only the middle +\begin_inset Formula $K-M+1=\left(K+1\right)-\left(M+1\right)+1$ +\end_inset + + output values are returned starting at +\begin_inset Formula $n=M.$ +\end_inset + + +\end_layout + +\begin_layout Description +convolve +\begin_inset LatexCommand index +name "convolve" + +\end_inset + + (x, y, mode='valid') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convolution is very similar to correlation except it is defined with one + sequence reversed: +\begin_inset Formula \[ +z\left[n\right]=\sum_{i}x[i]y[n-i].\] + +\end_inset + + The mode keyword has the same effect as it does for correlation. + Convolution ('full') between two 1-d arrays implements polynomial multiplicatio +n where the array entries are viewed as coefficients for polynomials. +\end_layout + +\begin_deeper +\begin_layout Description +Example: Consider that +\begin_inset Formula $(x^{3}+4x^{2}+2)$ +\end_inset + + +\begin_inset Formula $\left(x^{4}+3x+1\right)$ +\end_inset + += +\begin_inset Formula $x^{7}+4x^{6}+5x^{4}+13x^{3}+4x^{2}+6x+2.$ +\end_inset + + This can be determined by using the code +\family typewriter +convolve([1,4,0,2], [1,0,0,3,1]) +\family default + which returns +\family typewriter +[1,4,0,5,13,4,6,2]. + +\family default + Notice the one-to-one alignment between the elements of the arrays and + the coefficients on powers of +\begin_inset Formula $x$ +\end_inset + + in the polynomial. + +\end_layout + +\end_deeper +\begin_layout Description +outer +\begin_inset LatexCommand index +name "outer" + +\end_inset + + (a, b) +\end_layout + +\begin_layout Description +\InsetSpace ~ + compute an outerproduct which is syntactic sugar for a.ravel() [:,newaxis] + * b.ravel() [newaxis,:] (after first converting a and b to ndarrays). +\end_layout + +\begin_layout MyCode +>>> print outer([1,2,3],[10,100,1000]) +\newline +[[ 10 100 1000] +\newline + [ 20 200 2000] +\newline + + [ 30 300 3000]] +\end_layout + +\begin_layout Description +inner +\begin_inset LatexCommand index +name "inner" + +\end_inset + + (a, b) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Computes the inner product between two arrays. + This is an array that has shape a.shape[:-1] + b.shape[:-1] with elements + computed as the sum of the product of the elements from the last dimensions + of a and b. + In particular, let +\begin_inset Formula $I$ +\end_inset + + and +\begin_inset Formula $J$ +\end_inset + + be the super +\begin_inset Foot +status open + +\begin_layout Standard +A super index is 0 or more integer indices used to index into an N-dimensional + array. + How many indices a super index represents should be implied by context. +\end_layout + +\end_inset + + indices selecting the 1-dimensional arrays +\begin_inset Formula $a[I,:]$ +\end_inset + + and +\begin_inset Formula $b[J,:]$ +\end_inset + +, then the resulting array, +\begin_inset Formula $r$ +\end_inset + +, is +\begin_inset Formula \[ +r[I,J]=\sum_{k}a[I,k]b[J,k].\] + +\end_inset + + +\end_layout + +\begin_layout Description +dot +\begin_inset LatexCommand index +name "dot" + +\end_inset + + (a, b) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Computes the dot (matrix) product between two arrays. + The product-sum is over the last dimension of +\begin_inset Formula $a$ +\end_inset + + and the second-to-last dimension of +\begin_inset Formula $b$ +\end_inset + +. + Specifically, if +\begin_inset Formula $I$ +\end_inset + + and +\begin_inset Formula $J$ +\end_inset + + are super indices for +\begin_inset Formula $a[I,:]$ +\end_inset + + and +\begin_inset Formula $b[J,:,j]$ +\end_inset + + so that +\begin_inset Formula $j$ +\end_inset + + is the index of the last dimension of +\begin_inset Formula $b$ +\end_inset + +. + Then, the shape of the resulting array is a.shape[:-1] + b.shape[:-2] + (b.shape[- +1],) with elements. + +\begin_inset Formula \[ +r[I,J,j]=\sum_{k}a[I,k]b[J,k,j],\] + +\end_inset + + +\end_layout + +\begin_layout Description +\begin_inset LatexCommand index +name "vdot" + +\end_inset + +vdot (a, b) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Computes the dot product between two arrays (flattened into one-dimensional + vectors) after conjugating the first vector. + This is an inner-product following the physicists convention of conjugating + the first argument. +\begin_inset Formula \[ +r=\sum_{k}\overline{\textrm{a.flat}[k]}\textrm{b.flat}[k].\] + +\end_inset + + +\end_layout + +\begin_layout Description +tensordot +\begin_inset LatexCommand index +name "tensordot" + +\end_inset + + (a, b, axes=(-1,0)) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Computes a dot-product between two arrays where the sum is taken over the + axes specified by the 2-sequence which can have either scalar or sequence + entries. + The axes specified are summed over and the remaining axes are used to construct + the result. + So, for example, if +\begin_inset Formula $a$ +\end_inset + + is +\begin_inset Formula $3\times4\times5$ +\end_inset + + and +\begin_inset Formula $b$ +\end_inset + + is +\begin_inset Formula $4\times3\times2$ +\end_inset + + then if axes=([1,0],[0,1]) (or axes=([0,1],[1,0])) the result will be +\begin_inset Formula $5\times2$ +\end_inset + +. + Let +\begin_inset Formula $I$ +\end_inset + + represent the indices of the un-summed axes in +\begin_inset Formula $a$ +\end_inset + +, let +\begin_inset Formula $J$ +\end_inset + + represent the indices of the un-summed axes in +\begin_inset Formula $b$ +\end_inset + + and let +\begin_inset Formula $K$ +\end_inset + + represent the the indices of the axes summed over in both +\begin_inset Formula $a$ +\end_inset + + and +\begin_inset Formula $b$ +\end_inset + +. + Also, let +\begin_inset Formula $a_{t}$ +\end_inset + + represent a transposed version of +\begin_inset Formula $a$ +\end_inset + + where the axes to be summed over are pushed to the end, and let +\begin_inset Formula $b_{t}$ +\end_inset + + represent a transposed version of +\begin_inset Formula $b$ +\end_inset + + where the axes to be summed over are pushed to the front. + Then, using +\begin_inset Formula $\sum_{K}$ +\end_inset + + to represent a multi-index sum, the result can be written as +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +r[I,J]=\sum_{K}a_{t}[I,K]b_{t}[K,J]\] + +\end_inset + + +\end_layout + +\begin_layout Description +cross +\begin_inset LatexCommand index +name "cross" + +\end_inset + + (a, b, axisa=-1, axisb=-1, axisc=-1, axis=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns the cross product of two (arrays of) vectors. + The cross product is performed over the axes of the input arrays indicated + by the axisa, and axisb arguments. + For both arrays, the axis used must have dimension either 2 or 3. + If both axes used have dimension 2, then only the z-component of the equivalent + 3-d cross product is returned. + Otherwise, the entire vector is returned. + The axisc argument gives the axis of the vectors in the returned cross-product + result. + If axis is not None, then it is assumed that axisa=axisb=axisc=axis (regardless + of what else is specified). + +\end_layout + +\begin_layout Description +allclose +\begin_inset LatexCommand index +name "allclose" + +\end_inset + + (a, b, rtol= +\begin_inset Formula $10^{-5}$ +\end_inset + +, atol= +\begin_inset Formula $10^{-8}$ +\end_inset + +) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns true if all components of a and b are equal subject to the given + relative and absolute tolerances. + This returns true if every element of a and b satisfy +\begin_inset Formula \[ +\left|a-b\right|<\textrm{atol}+\textrm{rtol}\left|b\right|.\] + +\end_inset + + +\end_layout + +\begin_layout Section +Printing arrays +\end_layout + +\begin_layout Description +array2string +\begin_inset LatexCommand index +name "array2string" + +\end_inset + + (a) +\end_layout + +\begin_layout Description +\InsetSpace ~ + The default printing mechanism uses this function to produce a string from + an array. + +\end_layout + +\begin_layout Description +set_printoptions +\begin_inset LatexCommand index +name "set\\_printoptions" + +\end_inset + + (precision=None, theshold=None, edgeitems=None, linewidth=None, suppress=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Set options associated with representing an array. +\end_layout + +\begin_deeper +\begin_layout Description +precision the default number of digits of precision for floating point output + (default 8); +\end_layout + +\begin_layout Description +threshold total number of array elements which triggers printing only the + +\begin_inset Quotes eld +\end_inset + +ends +\begin_inset Quotes erd +\end_inset + + of the array rather than a full representation (default 1000); +\end_layout + +\begin_layout Description +edgeitems number of array elements in summary at beginning and end of each + dimension (default 3); +\end_layout + +\begin_layout Description +linewidth the number of characters per line (default 75); +\end_layout + +\begin_layout Description +suppress Boolean value indicating whether or not to suppress printing of + small floating point values using scientific notation (default False). +\end_layout + +\end_deeper +\begin_layout Description +get_printoptions +\begin_inset LatexCommand index +name "get\\_printoptions" + +\end_inset + + () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns the values of precision, threshold, edgeitems, linewidth, and suppress + that control printing of arrays. +\end_layout + +\begin_layout Description +set_string_function +\begin_inset LatexCommand index +name "set\\_string\\_function" + +\end_inset + + (func, repr=1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Set the function to use in response to str(array) or repr(array). + By default this function is array2string. + The function passed in must take an array argument and return a string. + If func is None, then the print function is reset to a simple internal + function. + +\end_layout + +\begin_layout Section +Functions redundant with methods +\end_layout + +\begin_layout Standard +Several functions are available primarily for purposes of backward compatibility + with old Numeric, and are therefore redundant. + The functions are all simple wrappers for asarray(a).<function>(*args, **kwds), + or are replaceable by attribute access. + The following list documents them. + It is not recommended that these functions be used in new programs, but + there are no plans for removing them as in functional form they work with + arbitrary sequences which is sometimes desirable. + The functions that mirror methods and attributes are: +\series bold +take +\series default + +\begin_inset LatexCommand index +name "take" + +\end_inset + +, +\series bold +reshape +\series default + +\begin_inset LatexCommand index +name "reshape" + +\end_inset + +, +\series bold +squeeze +\series default + +\begin_inset LatexCommand index +name "squeeze" + +\end_inset + +, +\series bold +choose +\series default + +\begin_inset LatexCommand index +name "choose" + +\end_inset + +, +\series bold +repeat +\series default + +\begin_inset LatexCommand index +name "repeat" + +\end_inset + +, +\series bold +put +\series default + +\begin_inset LatexCommand index +name "put" + +\end_inset + +, +\series bold +swapaxes +\series default + +\begin_inset LatexCommand index +name "swapaxes" + +\end_inset + +, +\series bold +transpose +\series default + +\begin_inset LatexCommand index +name "transpose" + +\end_inset + +, +\series bold +real +\series default + +\begin_inset LatexCommand index +name "real" + +\end_inset + +, +\series bold +imag +\series default + +\begin_inset LatexCommand index +name "imag" + +\end_inset + +, +\series bold +sort +\series default + +\begin_inset LatexCommand index +name "sort" + +\end_inset + +, +\series bold +argsort +\series default + +\begin_inset LatexCommand index +name "argsort" + +\end_inset + +, +\series bold +amax +\begin_inset LatexCommand index +name "amax" + +\end_inset + +, argmax +\series default + +\begin_inset LatexCommand index +name "argmax" + +\end_inset + +, +\series bold +amin +\begin_inset LatexCommand index +name "amin" + +\end_inset + + +\series default +, +\series bold +argmin +\series default + +\begin_inset LatexCommand index +name "argmin" + +\end_inset + +, +\series bold +ptp +\series default + +\begin_inset LatexCommand index +name "ptp" + +\end_inset + +, +\series bold +alen +\series default + +\begin_inset LatexCommand index +name "alen" + +\end_inset + +, +\series bold +searchsorted +\series default + +\begin_inset LatexCommand index +name "searchsorted" + +\end_inset + +, +\series bold +diagonal +\series default + +\begin_inset LatexCommand index +name "diagonal" + +\end_inset + +, +\series bold +trace +\series default + +\begin_inset LatexCommand index +name "trace" + +\end_inset + +, +\series bold +ravel +\series default + +\begin_inset LatexCommand index +name "ravel" + +\end_inset + +, +\series bold +nonzero +\series default + +\begin_inset LatexCommand index +name "nonzero" + +\end_inset + +, +\series bold +shape +\series default + +\begin_inset LatexCommand index +name "shape" + +\end_inset + +, +\series bold +compress +\series default + +\begin_inset LatexCommand index +name "compress" + +\end_inset + +, +\series bold +clip +\series default + +\begin_inset LatexCommand index +name "clip" + +\end_inset + +, +\series bold +std +\series default + +\begin_inset LatexCommand index +name "std" + +\end_inset + +, +\series bold +var +\series default + +\begin_inset LatexCommand index +name "var" + +\end_inset + +, +\series bold +mean +\series default + +\begin_inset LatexCommand index +name "mean" + +\end_inset + +, +\series bold +sum +\series default + +\begin_inset LatexCommand index +name "sum" + +\end_inset + +, +\series bold +cumsum +\series default + +\begin_inset LatexCommand index +name "cumsum" + +\end_inset + +, +\series bold +product +\series default + +\begin_inset LatexCommand index +name "product" + +\end_inset + +, +\series bold +cumproduct +\series default + +\begin_inset LatexCommand index +name "cumproduct" + +\end_inset + +, +\series bold +sometrue +\begin_inset LatexCommand index +name "sometrue" + +\end_inset + + +\series default + (method is .any), +\series bold +alltrue +\begin_inset LatexCommand index +name "alltrue" + +\end_inset + + +\series default + (method is .all), +\series bold +around +\begin_inset LatexCommand index +name "around" + +\end_inset + + +\series default + (method is .round), +\series bold +rank +\begin_inset LatexCommand index +name "rank" + +\end_inset + + +\series default + (attribute is .ndim), +\series bold +shape +\series default + +\begin_inset LatexCommand index +name "shape" + +\end_inset + +, +\series bold +size +\begin_inset LatexCommand index +name "size" + +\end_inset + + +\series default + (.size or .shape[axis]), and +\series bold +copy +\series default + +\begin_inset LatexCommand index +name "copy" + +\end_inset + +. + +\end_layout + +\begin_layout Section +Dealing with data types +\end_layout + +\begin_layout Description +dtype (obj, align=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a data-type object from any object. + See Chapter +\begin_inset LatexCommand ref +reference "cha:Data-descriptor-objects" + +\end_inset + + for a more detailed explanation of what can be interpreted as a data-type + object and the meaning of the align keyword. + +\end_layout + +\begin_layout Description +maximum_sctype (arg) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns the array-scalar type of highest precision of the same general + kind as arg which can be any recognized form for describing a data-type. +\end_layout + +\begin_layout Description +issctype (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns True if obj is an array data type (or a recognized alias for one) +\end_layout + +\begin_layout Description +obj2sctype (obj, default=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns the array type object corresponding to obj which can be an array + type already, a python type object, an actual array, or any recognized + alias for an array type object. + If no suitable data type object can be determined, return default. +\end_layout + +\begin_layout Description +sctype2char (sctype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the typecode character associated with an array-scalar type dtype. + The first argument is first converted to a dtype if it needs to be. + +\end_layout + +\begin_layout Tip +the type attribute of data-type objects are actual Python type objects subclasse +d in a hierarchy of types. + This can often be useful to check data types generically. + For example, issubclass(dtype.type, integer) can check to see if the data + type is one of the 10 different integer types. + The issubclass function, however, raises an error if either argument is + not an actual type object. + NumPy defines _(arg1, arg2) that will return false instead of raise an + error. + Alternatively, dtype.kind is a character describing the class of the data-type + so dtype.kind in 'iu' would also check to see if the data-type is an integer + type. +\end_layout + +\begin_layout Description +can_cast (from=d1, to=d2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return Boolean value indicating whether or not data type d1 can be cast + to data type d2 safely (without losing precision or information). + +\end_layout + +\begin_layout Chapter +Additional Convenience Routines +\end_layout + +\begin_layout Quotation +A committee is twelve men doing the work of one. +\end_layout + +\begin_layout Right Address +--- +\emph on +John F. + Kennedy +\end_layout + +\begin_layout Quotation +Your mind can only hold one thought at a time. + Make it a positive and constructive one. +\end_layout + +\begin_layout Right Address +--- +\emph on +H. + Jackson Brown Jr. + +\end_layout + +\begin_layout Section +Shape functions +\end_layout + +\begin_layout Description +atleast_1d +\begin_inset LatexCommand index +name "atleast\\_1d" + +\end_inset + + (a1,a2,...,an) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Force a sequence of arrays (including array scalars) to each be at least + 1-d. + +\end_layout + +\begin_layout Description +atleast_2d +\begin_inset LatexCommand index +name "atleast\\_2d" + +\end_inset + + (a1,a2,...,an) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Force a sequence of arrays (including array scalars) to each be at least + 2-d. + Dimensions of length 1 are pre-pended to reach a two-dimensional array. +\end_layout + +\begin_layout Description +atleast_3d +\begin_inset LatexCommand index +name "atleast\\_3d" + +\end_inset + + (a1,a2,...,an) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Force a sequence of arrays (including array_scalars) to each be at least + 3-d. + Dimensions of length 1 are pre-pended to reach a two-dimensional array. +\end_layout + +\begin_layout Description +roll +\begin_inset LatexCommand index +name "roll" + +\end_inset + + (arr, shift, axis=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a new array with the contents of arr shifted (rolled) by the amount + given in the integer argument shift along the axis specified. + If axis is None, then the shift takes place in the ravelled array (but + the returned array has the same shape as arr). + Elements that shift outside the array are rolled back into the array from + the opposite side. + +\end_layout + +\begin_layout Description +rollaxis +\begin_inset LatexCommand index +name "rollaxis" + +\end_inset + + (arr, axis, start) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return arr transposed so that the provided axis is inserted into the shape + before start with the other dimensions rolled. + Thus, if arr.shape is (i,j,k,l) then rollaxis(arr, 2, 0) has shape (k,i,j,l) + and rollaxis(arr, 1, 3) has shape (i,k,j,l). +\end_layout + +\begin_layout Description +vstack +\begin_inset LatexCommand index +name "vstack" + +\end_inset + + (seq) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Stack a sequence of arrays along the first axis (row wise). + Arrays in seq must have the same shape along all dimensions but the first. + Rebuilds array divided by vsplit. + All 1-d arrays will be stacked row-wise. +\end_layout + +\begin_layout Description +hstack +\begin_inset LatexCommand index +name "hstack" + +\end_inset + + (seq) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Stack a sequence of arrays along the second axis (column wise). + Arrays in seq must have the same shape along all dimensions but the second. + Rebuilds array divided by hsplit. + Notice that 1-d arrays will be appended into a new 1-d array. + Use column_stack to get a 2-d array from 1-d arrays. + If some arrays are already 2-d, then the 1-d arrays need to have a dimension + added to the end ( +\emph on +e.g. + +\emph default + +\family typewriter +y[:,newaxis] +\family default +) in order to stack correctly. + +\end_layout + +\begin_layout Description +column_stack +\begin_inset LatexCommand index +name "column\\_stack" + +\end_inset + + (seq) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Stack a sequence of arrays as columns into a 2-d array. + 1-d arrays are converted to 2-d arrays and transposed. + All arrays must have shapes so that the resulting array is well defined. + Compare with +\series bold +hstack +\series default +. +\end_layout + +\begin_layout Description +row_stack +\begin_inset LatexCommand index +name "row\\_stack" + +\end_inset + + (seq) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Stack a sequence of 1-d arrays as rows into a 2-d array (alias for +\series bold +vstack +\series default +). + +\end_layout + +\begin_layout Description +dstack +\begin_inset LatexCommand index +name "dstack" + +\end_inset + + (seq) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Stack a sequence of arrays along the third axis (depth wise). + Arrays in seq must have the same shape along all dimensions but the third. + Rebuilds array divided by vsplit. +\end_layout + +\begin_layout Description +array_split +\begin_inset LatexCommand index +name "array\\_split" + +\end_inset + + (ary, i_or_s, axis=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Divide ary into a list of sub-arrays along the specified axis. + The i_or_s argument stands for indices_or_sections. + If i_or_s is an integer, ary is divided into that many equally-sized arrays. + If it is impossible to make an even split, each of the leading arrays in + the returned list have one additional member. + If i_or_s is a list of sorted integer, its entries define the indexes where + ary is split. + An empty list for i_or_s results in a single sub-array equal to the original + array. +\end_layout + +\begin_layout Description +split +\begin_inset LatexCommand index +name "split" + +\end_inset + + (ary, i_or_s, axis=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + The same as array_split() except if i_or_s is an integer and it is impossible + to make an even split, an error is raised. +\end_layout + +\begin_layout Description +hsplit +\begin_inset LatexCommand index +name "hsplit" + +\end_inset + + (ary, i_or_s) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Split a single array into multiple columns of sub-arrays (along the first + axis if 1-d or along the second second if >1-d). + Only works on arrays of 1 or more dimension. + +\end_layout + +\begin_layout Description +vsplit +\begin_inset LatexCommand index +name "vsplit" + +\end_inset + + () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Split a single array into multiple rows of sub-arrays (along the first + axis). + Only works on arrays of 2 or more dimensions. +\end_layout + +\begin_layout Description +dsplit +\begin_inset LatexCommand index +name "dsplit" + +\end_inset + + () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Split a single array into multiple sub-arrays along the third axis (depth). + Only works on arrays of 3 or more dimensions. +\end_layout + +\begin_layout Description +apply_along_axis +\begin_inset LatexCommand index +name "apply\\_along\\_axis" + +\end_inset + + (func1d, axis, arr, *args) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Execute func1d(arr[sel_i], *args) where func1d takes 1-d arrays and arr + is an N-d array, where sel_i is a selection object sufficient to select + a 1-d sub-array along the given axis. + The function is executed for all 1-d arrays along axis in arr. + +\end_layout + +\begin_layout Description +apply_over_axes +\begin_inset LatexCommand index +name "apply\\_over\\_axes" + +\end_inset + + (func, a, axes) +\end_layout + +\begin_layout Description +\InsetSpace ~ + For each axis in the axes sequence, call func as +\family typewriter +res=func(a, axis) +\family default +. + If res is the same shape as a then set +\family typewriter +a=res +\family default + and continue. + if +\family typewriter +res.ndim = a.ndim -1 +\family default +, then insert a dimension before axis and continue. + +\end_layout + +\begin_layout Description +expand_dims +\begin_inset LatexCommand index +name "expand\\_dims" + +\end_inset + + (a, axis) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Expand the shape of array a by including newaxis +\series bold +before +\series default + the given axis. +\end_layout + +\begin_layout Description +resize +\begin_inset LatexCommand index +name "resize" + +\end_inset + + (a, new_shape) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns a new array with the specified shape which can be any size. + The new array is filled with repeated copies of a. + This function is similar in spirit to a.resize(new_shape) except that it + fills in the new array with repeated copies and returns a new array. + +\end_layout + +\begin_layout Description +kron +\begin_inset LatexCommand index +name "kron" + +\end_inset + + (a, b) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a composite array with blocks from +\emph on +b +\emph default + scaled by elements of +\emph on +a +\emph default +. + The number of dimensions of +\emph on +a +\emph default + and +\emph on +b +\emph default + should be the same. + If not, then the input with fewer dimensions is pre-pended with ones (broadcast +) to the same shape as the input with more dimensions. + The return array has this same number of dimensions with shape given by + the product of the shape of +\emph on +a +\emph default + and the shape of +\emph on +b +\emph default +. + If either a or b is a scalar then this function is equivalent to multiply(a,b). + +\end_layout + +\begin_layout Description +\InsetSpace ~ + For example, if +\emph on +a +\emph default + and +\emph on +b +\emph default + are is 1-d the result is +\begin_inset Formula \[ +\left[\begin{array}{cccc} +a[0]*b & a[1]*b & \cdots & a[-1]*b\end{array}\right]\] + +\end_inset + + while if +\emph on +a +\emph default + and +\emph on +b +\emph default + are 2-d, the result is +\begin_inset Formula \[ +\left[\begin{array}{cccc} +a[0,0]*b & a[0,1]*b & \cdots & a[0,-1]*b\\ +a[1,0]*b & a[1,1]*b & \cdots & a[1,-1]*b\\ +\vdots & \vdots & \ddots & \vdots\\ +a[-1,0]*b & a[-1,1]*b & \cdots & a[-1,-1]*b\end{array}\right]\] + +\end_inset + + +\end_layout + +\begin_deeper +\begin_layout Description +Example: +\end_layout + +\end_deeper +\begin_layout MyCode +>>> kron([1,10,100],[5,6,7]) +\newline +array([ 5, 6, 7, 50, 60, 70, 500, 600, + 700]) +\newline +>>> kron([[1,10],[100,1000]],[[2,3],[4,5]]) +\newline +array([[ 2, 3, 20, + 30], +\newline + [ 4, 5, 40, 50], +\newline + [ 200, 300, 2000, 3000], +\newline + + [ 400, 500, 4000, 5000]]) +\end_layout + +\begin_layout Description +tile +\begin_inset LatexCommand index +name "tile" + +\end_inset + + (a, reps) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Tile an +\begin_inset Formula $N$ +\end_inset + +-dimensional array using the shape information in reps to create a larger + +\begin_inset Formula $N$ +\end_inset + +-dimensional array. + This is equivalent to kron(ones(reps, a.dtype), a). + The number of dimensions of a and the length of shape should be the same + or else 1's will be pre-pended to make them the same. + +\end_layout + +\begin_deeper +\begin_layout Description +Example: +\end_layout + +\end_deeper +\begin_layout MyCode +>>> tile([5,6,7],(1,2,3)) +\newline +array([[[5, 6, 7, 5, 6, 7, 5, 6, 7], +\newline + [5, + 6, 7, 5, 6, 7, 5, 6, 7]]]) +\end_layout + +\begin_layout Section +Basic functions +\end_layout + +\begin_layout Description +average +\begin_inset LatexCommand index +name "average" + +\end_inset + + (a, axis=None, weights=None, returned=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Computes the average along the indicated axis. + If axis is None, average over the entire array. + Inputs can be integer or floating types; result is type float. + If weights are given, the result is sum(a*weights)/sum(weights). + Therefore, weights must have shape equal to a.shape or be 1-d with length + a.shape[axis]. + Integer weights are converted to float. + If returned is True, then return a tuple showing both the result and the + sum of the weights (or count of the values). + The shape of these two results will be the same. + +\end_layout + +\begin_layout Description +cov +\begin_inset LatexCommand index +name "cov" + +\end_inset + + (x, y=None, rowvar=1, bias=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute the covariance matrix of data in x. + If x is a vector and y is None, then this function is equivalent to asarray(x).v +ar(). + Otherwise, x is interpreted as observations of several random variables. + If rowvar is True (default), then the variables are in the rows and the + observations of the variables are in the columns. + Otherwise, the variables are in the columns and the observations are in + the rows. + If y is given then it is treated as another variable or set of variables + to be added to x. + By default, a so-called unbiased estimate of the covariance matrix is made. + If bias is non-zero, then a biased normalization factor (with better mean-squar +e error performance) is used instead. + If +\begin_inset Formula $\mathbf{X}$ +\end_inset + + is a random vector, then the covariance matrix is defined as +\begin_inset Formula \[ +\mathbf{C}=E\left[\left(\mathbf{X}-E\mathbf{X}\right)\left(\mathbf{X}-E\mathbf{X}\right)^{H}\right].\] + +\end_inset + + It can be approximated as +\begin_inset Formula \[ +\mathbf{C}\approx\frac{1}{P}\sum_{i=0}^{N-1}\left(\mathbf{x}_{i}-\bar{\mathbf{x}}\right)\left(\mathbf{x}_{i}-\bar{\mathbf{x}}\right)^{H}\] + +\end_inset + + where +\begin_inset Formula $\mathbf{x}_{i}$ +\end_inset + + is an observation of +\begin_inset Formula $\mathbf{X}$ +\end_inset + + (as a column-vector), +\begin_inset Formula $N$ +\end_inset + + is the number of observations made and +\begin_inset Formula $P=N-1$ +\end_inset + + for an unbiased estimate or +\begin_inset Formula $P=N$ +\end_inset + + for a biased (but lower mean-squared error) estimate. + +\end_layout + +\begin_layout Description +corrcoef +\begin_inset LatexCommand index +name "corrcoef" + +\end_inset + + (x, y=None, rowvar=1, bias=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Estimate the correlation coefficient of x. + By default, each row of x contains a random variable with observations + of the random variable in the columns of x. + (If rowvar is False, the each column is a random variable with observations + in the rows). + The y argument can be used to append additional variables to x. + The +\begin_inset Formula $i^{\textrm{th}}$ +\end_inset + + row and +\begin_inset Formula $j^{\textrm{th}}$ +\end_inset + + column of the correlation coefficient matrix is defined as +\begin_inset Formula \[ +\rho_{ij}=\frac{C_{ij}}{\sqrt{C_{ii}C_{jj}}}\] + +\end_inset + + where +\begin_inset Formula $\mathbf{C}$ +\end_inset + + is the covariance matrix. + The rowvar and bias arguments are passed on to the cov function to estimate + +\begin_inset Formula $\mathbf{C}.$ +\end_inset + + +\end_layout + +\begin_layout Description +msort +\begin_inset LatexCommand index +name "msort" + +\end_inset + + (a) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a new array, sorted along the first axis. + Equivalent to b=a.copy(); b.sort(0) +\end_layout + +\begin_layout Description +median +\begin_inset LatexCommand index +name "median" + +\end_inset + + (m) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns the median of m along its first dimension. +\end_layout + +\begin_layout Description +bincount +\begin_inset LatexCommand index +name "bincount" + +\end_inset + + (list=, weights=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + The list argument is a 1-d integer array. + Let +\begin_inset Formula $r$ +\end_inset + + be the returned 1-d array whose length is (list.max()+1). + If weights is None, then +\begin_inset Formula $r[i]$ +\end_inset + + is the number of occurrences of +\begin_inset Formula $i$ +\end_inset + + in list. + If weight is present, then the +\begin_inset Formula $i^{\textrm{th}}$ +\end_inset + + element is +\begin_inset Formula \[ +r[i]=\sum_{j:\textrm{list}\left[j\right]=i}\textrm{weights}[j].\] + +\end_inset + + Notice that if weights is None, it is equivalent to a weights array of + all 1. + The length of weights must be the same as the length of list. + +\end_layout + +\begin_layout Description +digitize +\begin_inset LatexCommand index +name "digitize" + +\end_inset + + (x=,bins=) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an array of integers the same length as x with values +\begin_inset Formula $i$ +\end_inset + + such that +\begin_inset Formula $\textrm{bins}\left[i-1\right]\leq x<\textrm{bins}\left[i\right]$ +\end_inset + + if bins is monotonically increasing, or +\begin_inset Formula $\textrm{bins}[i]\leq x<\textrm{bins}[i-1]$ +\end_inset + + if bins is monotonically decreasing. + When +\begin_inset Formula $x$ +\end_inset + + is beyond the bounds of bins, return either +\begin_inset Formula $i=0$ +\end_inset + + or +\begin_inset Formula $i=$ +\end_inset + +len(bins) as appropriate. +\end_layout + +\begin_layout Description +histogram +\begin_inset LatexCommand index +name "histogram" + +\end_inset + + (x=, bins=None, range=None, normed=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct a histogram for the data in x (treated as one-dimensional array + of type float). + If bins is not a sequence, then bins should be the number of bins which + will be constructed ranging from range[0] to range[1] or x.min() to x.max() + if range is None. + If normed is True, then the histogram will be normalized and comparable + with a probability density function, otherwise it will be a count of the + number of items in each bin. + The return value is the tuple (n, bins) where n is the histogram. +\end_layout + +\begin_layout Description +histogram2d +\begin_inset LatexCommand index +name "histogram2d" + +\end_inset + + (x, y, bins=10, range=None, normed=False) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute the two-dimensional histogram for a dataset (x,y) given the bins. + Returns (histogram, xedges, yedges). + The bins argument can be either the number of bins or a sequence of the + bin edges if the x and y directions should have the same bins. + If the bins argument is a sequence of length 2, then separate bin edges + will be computed. + The first element can be either the number of bins or the bin edges for + the x-direction. + The second element is interpreted as the number of bins or the bin edges + for the y-direction. + The returned histogram array, H, is a count of the number of samples in + each bin. + The array is oriented such that H[i,j] is the number of samples falling + into binx[j] and biny[i] (notice the association x<->j and y<->i). + Setting normed to True returns a density rather than a bin-count. + The range argument allows specifying lower and upper bin edges (in a sequence + of length 2 with 2-length sequences in each entry). + The default is [[x.min(), x.max()],[y.min(), y.max()]]. + +\end_layout + +\begin_layout Description +histogramdd +\begin_inset LatexCommand index +name "histogramdd" + +\end_inset + + (sample, bins=10, range=None, normed=False) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute the +\begin_inset Formula $D$ +\end_inset + +-dimensional histogram for a (vector) dataset contained in sample give the + bins. + The dataset is a sequence of +\begin_inset Formula $D$ +\end_inset + + arrays or an +\begin_inset Formula $N\times D$ +\end_inset + + array where +\begin_inset Formula $N$ +\end_inset + + is the number of samples and +\begin_inset Formula $D$ +\end_inset + + is the number of dimensions. + Returns (histogram, edges) where histogram is a +\begin_inset Formula $D$ +\end_inset + +-dimensional array of shape given by the number of bins selected in each + axis containing the number of counts that a point in the sample data fell + into the volume bin specified. + The edges sequence has +\begin_inset Formula $D$ +\end_inset + +-entries to specify the edge boundaries for each dimension. + The bins argument is a sequence of edge arrays or a sequence of the number + of bins. + If a scalar is given, it is assumed to be the number of bins for all dimensions. + The range is a length- +\begin_inset Formula $D$ +\end_inset + + sequence containing lower and upper bin edges which default to the min + and maximum of the respective datasets. + If normed is True, then a density rather than a bin-count is returned. + +\end_layout + +\begin_layout Description +logspace +\begin_inset LatexCommand index +name "logspace" + +\end_inset + + (start, stop, num=50, endpoint=True,base=10.0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evenly spaced samples on a logarithmic scale. + Returns num evenly spaced (in logspace) samples from base**start to base**stop. + If endpoint is True, then the last sample is base**stop. +\end_layout + +\begin_layout Description +linspace +\begin_inset LatexCommand index +name "linspace" + +\end_inset + + (start, stop, num=50, endpoint=True, retstep=False): +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evenly spaced samples. + Returns num evenly spaced samples from start to stop. + If endpoint is True, then the last sample is stop. + If retstep is True, then return the computed step size. +\end_layout + +\begin_layout Description +meshgrid +\begin_inset LatexCommand index +name "meshgrid" + +\end_inset + + (x, y) +\end_layout + +\begin_layout Description +\InsetSpace ~ + For 1-d arrays x, y with lengths Nx=len(x) and Ny = len(y), return X, Y + where X and Y are (Ny, Nx) shaped arrays with the elements of x and y repeated + to fill the array. + +\end_layout + +\begin_layout MyCode +>>> X,Y = meshgrid([1,2,3], [4,5,6,7]); print X; print Y +\newline +[[1 2 3] +\newline + [1 2 3] +\newline + + [1 2 3] +\newline + [1 2 3]] +\newline +[[4 4 4] +\newline + [5 5 5] +\newline + [6 6 6] +\newline + [7 7 7]] +\end_layout + +\begin_layout Description +select +\begin_inset LatexCommand index +name "select" + +\end_inset + + (condlist, choicelist, default=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns an array comprised from different elements of choicelist depending + on the list of conditions. + The condlist argument is a list of Boolean condition arrays. + The choicelist argument is a list of choice arrays (of the same size as + the arrays in condlist). + The result has the same size as the arrays in choicelist. + If condlist is [ +\begin_inset Formula $c_{0},\ldots,c_{N-1}$ +\end_inset + +], then choicelist must be of length +\begin_inset Formula $N$ +\end_inset + +. + The elements of choicelist can then be represented as [ +\begin_inset Formula $v_{0},\ldots,v_{N-1}$ +\end_inset + +]. + The default choice if none of the conditions are met is given as the default + argument. + The conditions are tested in order and the first one satisfied is used + to select the choice. + In other words, the elements of the output array are found from the following + tree (evaluated on an element-by-element basis) +\end_layout + +\begin_layout LyX-Code + +\series bold +if +\series default + +\begin_inset Formula $c_{0}$ +\end_inset + +: +\begin_inset Formula $v_{0}$ +\end_inset + + +\newline + +\series bold +elif +\series default + +\begin_inset Formula $c_{1}$ +\end_inset + +: +\begin_inset Formula $v_{1}$ +\end_inset + + +\newline +... +\newline + +\series bold +elif +\series default + +\begin_inset Formula $c_{N-1}$ +\end_inset + +: +\begin_inset Formula $v_{N-1}$ +\end_inset + + +\newline + +\series bold +else +\series default +: default +\end_layout + +\begin_layout Description +piecewise +\begin_inset LatexCommand index +name "piecewise" + +\end_inset + + (x, condlist, funclist, *args, **kw) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute a piecewise-defined function. + A piecewise defined function is +\begin_inset Formula \[ +f\left(x\right)=\left\{ \begin{array}{cc} +f_{1}\left(x\right) & x\in S_{1},\\ +f_{2}\left(x\right) & x\in S_{2},\\ +\vdots & \vdots\\ +f_{n}\left(x\right) & x\in S_{n}.\end{array}\right.\] + +\end_inset + +where +\begin_inset Formula $S_{1}$ +\end_inset + + are sets. + Thus, the function is defined differently over different sub-domains of + the input. + Such a function can be computed using +\family typewriter +select +\family default + but such an implementation means calling each +\begin_inset Formula $f_{i}$ +\end_inset + + over the entire region of +\begin_inset Formula $x.$ +\end_inset + + The piecewise call guarantees that each function +\begin_inset Formula $f_{i}$ +\end_inset + + will only be called over those values of +\begin_inset Formula $x$ +\end_inset + + in +\begin_inset Formula $S_{i}.$ +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Arguments: x is the array of values over which to call the function; condlist + is a sequence of Boolean (indicator) arrays (or a single Boolean array) + of the same shape as +\begin_inset Formula $x$ +\end_inset + + that defines the sets (True indicates that element of +\begin_inset Formula $x$ +\end_inset + + is in the set). + If needed, to match the length of funclist, an +\begin_inset Quotes eld +\end_inset + +otherwise +\begin_inset Quotes erd +\end_inset + + set will be added to condlist. + This otherwise set is defined as +\begin_inset Formula $S_{n}=\overline{\bigcup S_{i}}.$ +\end_inset + + The argument funclist is a list of functions to be called (or items to + be inserted) corresponding to the conditions. + Each of these functions can take extra arguments and key-word arguments + which are passed in as *args, and **kw using standard Python syntax. + Each of these functions should return vector output for vector input. + If the function is a scalar, then it will simply be inserted where appropriate + into the output. + It is the equivalent of a constant function. + +\end_layout + +\begin_deeper +\begin_layout Description +Example: Suppose we want to compute +\begin_inset Formula $f\left(x\right)=x^{2}\Pi\left(\frac{x}{3}\right)+u\left(x-5\right)$ +\end_inset + + where +\begin_inset Formula $\Pi\left(x\right)=1$ +\end_inset + + only when +\begin_inset Formula $\left|x\right|\leq1$ +\end_inset + + and +\begin_inset Formula $u\left(x\right)=1$ +\end_inset + + only when +\begin_inset Formula $x\geq0.$ +\end_inset + + This could be done using the code: +\end_layout + +\end_deeper +\begin_layout MyCode +>>> f1 = lambda x: x*x +\newline +>>> x = r_[-4:6:20j] +\newline +>>> y = piecewise(x,abs(x)<=3,[f1,0])+ +piecewise(x,x>=0,[1,0]) +\newline +>>> set_printoptions(precision=4); print y +\newline +[ 0. + 0. + 8.687 5.8615 3.59 1.8726 0.7091 0.0997 +\newline + 1.0443 1.5429 2.5956 4.2022 + 6.3629 9.0776 1. + 1. + 1. +\newline + 1. + 1. + 1. + ] +\end_layout + +\begin_layout Description +trim_zeros +\begin_inset LatexCommand index +name "trim\\_zeros" + +\end_inset + + (filt, trim='fb'): +\end_layout + +\begin_layout Description +\InsetSpace ~ + Trim the leading ('f' in trim) and trailing ('b' in trim) zeros from a + sequence according to the trim keyword. + +\end_layout + +\begin_layout Description +trapz +\begin_inset LatexCommand index +name "trapz" + +\end_inset + + (y, x=None, dx=1.0, axis=-1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + If +\begin_inset Formula $\mathbf{y}$ +\end_inset + + contains samples of a function: +\begin_inset Formula $y_{i}=f\left(x_{i}\right)$ +\end_inset + + then trapz can be used to approximate the integral of the function using + the trapezoidal rule. + If the sampling is not evenly spaced use +\begin_inset Formula $\mathbf{x}$ +\end_inset + + to pass in the sample positions. + Otherwise, only the sample-spacing is needed in dx. + The trapz function can work with many functions at a time stored in an + +\begin_inset Formula $N$ +\end_inset + +-dimensional array. + The axis argument controls which axis defines the sampling axis (the other + dimensions are different functions). + The number of dimensions of the returned result is +\begin_inset Formula $y$ +\end_inset + +.ndim - 1. +\end_layout + +\begin_layout Description +diff +\begin_inset LatexCommand index +name "diff" + +\end_inset + + (x, n=1, axis=-1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Calculates the +\begin_inset Formula $n^{\textrm{th}}$ +\end_inset + + order, discrete difference along the given axis. +\end_layout + +\begin_layout Description +gradient +\begin_inset LatexCommand index +name "gradient" + +\end_inset + + (f, *varargs) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Calculate the gradient of an N-d scalar function, f. + Uses central differences on the interior and first differences on boundaries + to give the same shape for each component of the gradient. + The varargs variable can contain 0, 1, or N scalars corresponding to the + sample distances in each direction (default 1.0). + If f is N-d, then N arrays are returned each of the same shape as f, giving + the derivative of f with respect to each dimension. + +\end_layout + +\begin_layout Description +angle +\begin_inset LatexCommand index +name "angle" + +\end_inset + + (z, deg=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the angle of a complex number z (in degrees if deg is True). +\end_layout + +\begin_layout Description +unwrap +\begin_inset LatexCommand index +name "unwrap" + +\end_inset + + (p, discont=pi, axis=-1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Unwraps radian phase p by changing absolute jumps greater than discont + to their +\begin_inset Formula $2\pi$ +\end_inset + + complement along the given axis. + +\end_layout + +\begin_layout Description +sort_complex +\begin_inset LatexCommand index +name "sort\\_complex" + +\end_inset + + (x) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This is syntactic sugar for asarray(x).sort().astype(<cmplx_type>) where + cmplx_type is csingle if x.dtype is integral with fewer bits than intp, + clongfloat if x.dtype.type is longfloat, and cdouble for all other types. + The sorting is done by comparing the real part of the array, and then the + imaginary part if the real parts are the same. + +\end_layout + +\begin_layout Description +disp +\begin_inset LatexCommand index +name "disp" + +\end_inset + + (mesg, device=None, linefeed=1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Display a message to device (defaults to sys.stdout) with or without a closing + linefeed. +\end_layout + +\begin_layout Description +unique +\begin_inset LatexCommand index +name "unique" + +\end_inset + + (seq) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns unique items in the 1-dimensional seq. +\end_layout + +\begin_layout Description +extract +\begin_inset LatexCommand index +name "extract" + +\end_inset + + (condition, arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equivalent to arr.compress(condition.flat) and arr.flat[bool_(condition.flat)] + which extracts the elements of (flattened) arr according to the elements + of (flattened) condition that are True. + +\end_layout + +\begin_layout Description +place +\begin_inset LatexCommand index +name "place" + +\end_inset + + (arr, mask, vals) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Inverse of extract. + Equivalent to arr[abool(mask)] = vals but it uses a different algorithm. + +\end_layout + +\begin_layout Description +delete +\begin_inset LatexCommand index +name "delete" + +\end_inset + + (arr, indices, axis=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a new array with the sub-arrays indicated by indices along axis + removed. + If axis is None, then first ravel the array and set axis to -1. + The indices argument describes which sub-arrays along the given axis should + be removed. + It can be an integer, a slice object, or a sequence of integers. + A new array is created with the corresponding sub-arrays are removed. + +\end_layout + +\begin_layout Description +insert +\begin_inset LatexCommand index +name "insert" + +\end_inset + + (arr, indices, values, axis=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Create a new array with values inserted into arr before indices. + If axis is None, then first ravel the array and set axis to -1. + The indices argument describes which indices along the provided axis the + values should be inserted before. + It can be an integer, a slice object, or a sequence of integers. + The values argument must be broadcastable to the shape implied by where + they will be inserted. + +\end_layout + +\begin_layout Description +append +\begin_inset LatexCommand index +name "append" + +\end_inset + + (arr, values, axis=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a new array with values appended to the end of the array along axis. + +\end_layout + +\begin_layout Description +nansum +\begin_inset LatexCommand index +name "nansum" + +\end_inset + + (x, axis=None) +\end_layout + +\begin_layout Description +nanmax +\begin_inset LatexCommand index +name "nanmax" + +\end_inset + + (x, axis=None) +\end_layout + +\begin_layout Description +nanargmax +\begin_inset LatexCommand index +name "nanargmax" + +\end_inset + + (x, axis=None) +\end_layout + +\begin_layout Description +nanargmin +\begin_inset LatexCommand index +name "nanargmin" + +\end_inset + + (x, axis=None) +\end_layout + +\begin_layout Description +nanmin +\begin_inset LatexCommand index +name "nanmin" + +\end_inset + + (x, axis=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + These functions perform their respective operations over the given axis + (or the entire array if axis is None), after replacing any nans with appropriat +e values so as not to affect the calculation. + +\end_layout + +\begin_layout Description +vectorize +\begin_inset LatexCommand index +name "vectorize" + +\end_inset + + (pyfunc, otypes=None, doc=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This creates a class whose instances have a call method that invokes a + ufunc that has been dynamically built to call the python function pyfunc + internally. + The output types can be controlled by the otypes argument. + If it is None, then the output types will be determined upon first call + to the function using the provided inputs. + This can be reset, by re-setting the otypes attribute to +\begin_inset Quotes eld +\end_inset + + +\begin_inset Quotes erd +\end_inset + +. + The normal rules of array broadcasting are followed by the returned object. +\end_layout + +\begin_layout MyCode +>>> def myfunc(a,b): +\newline +... + if (a>b): return a +\newline +... + else: return b-1 +\newline +>>> vecfunc = vectorize(myfunc) +\newline +>>> vecfunc([[1,2,3],[5,6,9] +],[7,4,5]) +\newline +array([[6, 3, 4], +\newline + [6, 6, 9]]) +\end_layout + +\begin_layout Description +asarray_chkfinite +\begin_inset LatexCommand index +name "asarray\\_chkfinite" + +\end_inset + + (x) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Like asarray(x) except an error is raised if any of the values in x are + not finite. + +\end_layout + +\begin_layout Description +round_ +\begin_inset LatexCommand index +name "round\\_" + +\end_inset + + (x, decimals=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an array with all the elements of x rounded to decimals places. + Returns x if array is not floating point and rounds both the real and imaginary + parts separately if array is complex. + Rounds in the same way as standard python except for half-way values are + rounded to the nearest +\emph on +even +\emph default + number. +\end_layout + +\begin_layout Description +packbits (array, axis=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Pack an integer array of logical data (zero/non-zero) into bits of a uint8 + data-type along the dimension given by axis. + This dimension is shrunk by a factor of 8 (rounded up). + Each element in the input is converted to a bit in the output which is + set to 1 or 0 depending on whether the input is non-zero or not. + Thus, every 8-element chunk of the input is converted to a single byte + in the output. + If axis is None, then the bit-packing is done on the entire array as if + it were raveled. +\end_layout + +\begin_layout Description +unpackbits (array, axis=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Unpack bits of an array of uint8 data-type into a single uint8 byte for + each bit along the dimension given by axis. + This dimension is thus expanded 8-fold, but otherwise the output has the + same shape as the input. + If axis is None, then the input is treated as a 1-d array and expanded + 8-fold so that each bit of the input is given an output byte. + +\end_layout + +\begin_layout Description +add_docstring +\begin_inset LatexCommand index +name "add\\_docstring" + +\end_inset + + (obj, doc) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Adds a docstring to a built-in object, obj, that does not have a docstring + defined already. + The obj can be a built-in function-or-method, a typeobject, a method descriptor +, a getset descriptor, or a member descriptor. + This is useful for improving the documentation of objects defined in C-compiled + code without re-compiling. + If the object already has a docstring, a RuntimeError is raised. + If the object is not a supported type the code can add a docstring to, + a TypeError is raised. + +\end_layout + +\begin_layout Description +add_newdoc +\begin_inset LatexCommand index +name "add\\_newdoc" + +\end_inset + + (place, obj, doc) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Adds a docstring to the +\emph on +obj +\emph default + imported from +\emph on +place +\emph default + using exec 'from %s import %s' % (place, obj). + Thus, both place and obj should be strings. + If doc is a string, then a single docstring is added to obj from place. + If doc is a 2-tuple, then obj must be an object with attributes that need + to be commented. + The first element of the doc tuple is the attribute to be commented on + and the second element is the actual docstring. + If doc is a list, then it must be composed of elements that are 2-tuples + indicating that obj has several attributes that need to be documented. + +\end_layout + +\begin_layout Section +Polynomial functions +\end_layout + +\begin_layout Standard +There are two interfaces for dealing with polynomials +\begin_inset LatexCommand index +name "polynomials" + +\end_inset + +: a class-based interface, and a collection of functions to deal with a + polynomials represented as a simple list of coefficients. + This latter representation results from the is a one-to-one correspondence + between a length- +\begin_inset Formula $\left(n+1\right)$ +\end_inset + + sequence of coefficients +\begin_inset Formula $a_{n}\equiv a[n]$ +\end_inset + + and an +\begin_inset Formula $n^{\textrm{th}}$ +\end_inset + + order polynomial: +\begin_inset Formula \[ +p\left(x\right)=a_{0}x^{n}+a_{1}x^{n-1}+\cdots+a_{n-1}x+a_{n}.\] + +\end_inset + + Most of the functions below operate on and return a simple sequence of + coefficients representing a polynomial. + There is, however, a simple polynomial class that provides some utility + for doing simple algebra on polynomials. + +\end_layout + +\begin_layout Description +poly1d +\begin_inset LatexCommand index +name "poly1d" + +\end_inset + + (c_or_r, r=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This construction returns an instance of a simple polynomial class. + It can take either a list of coefficients on polynomial powers, or a sequence + of roots (if r=1). + The returned polynomial can be added, subtracted, multiplied, divided, + and taken to integer powers, resulting in new polynomials. + +\end_layout + +\begin_deeper +\begin_layout Description +.r roots of the polynomial +\end_layout + +\begin_layout Description +.o order of the polynomial +\end_layout + +\begin_layout Description +.c polynomial coefficients as an array (also +\series bold +__array__() +\series default + ) +\end_layout + +\begin_layout Description +__call__(x) evaluate the polynomial at x (can be an array) +\end_layout + +\begin_layout Description +__getitem__(x) p[k] returns the coefficient on the kth power of x (backwards + from indexing the coefficient array) +\end_layout + +\end_deeper +\begin_layout MyCode +>>> p=poly1d([2,5,7]) +\newline +>>> print p +\newline +2 +\newline +2 x + 5 x + 7 +\newline +>>> print p*[1,3,1] +\newline +4 + 3 2 +\newline +2 x + 11 x + 24 x + 26 x + 7 +\newline +>>> print p([0.5,0.6,3]) +\newline +[ 10. + 10.72 40. + ] +\newline +>>> print p.r +\newline +[-1.25+1.3919j -1.25-1.3919j] +\end_layout + +\begin_layout Description +poly +\begin_inset LatexCommand index +name "poly" + +\end_inset + + (roots_or_matrix) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a sequence of coefficients representing a polynomial given the sequence + of roots as an argument. + Alternatively, if the argument is a 2-d array, then return the characteristic + polynomial of the matrix. + +\end_layout + +\begin_layout Description +roots +\begin_inset LatexCommand index +name "roots" + +\end_inset + + (poly) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the roots of the polynomial represented by coefficients in poly +\end_layout + +\begin_layout Description +polyint +\begin_inset LatexCommand index +name "polyint" + +\end_inset + + (poly, m=1, k=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an exact +\begin_inset Formula $m^{\textrm{th}}$ +\end_inset + +-order integral of the polynomial represented in poly. + If k is None, then use 0 for the integrating constants. + Otherwise, use the scalars in the sequence k as integrating constants. + Also available as .integ (m=1,k=0) method of poly1d objects. +\end_layout + +\begin_deeper +\begin_layout Description +Example: +\begin_inset Formula \begin{eqnarray*} +p\left(x\right) & = & x^{2}+3x+4\\ +\int\int p\left(x\right) & = & \frac{1}{12}x^{4}+\frac{1}{2}x^{3}+2x^{2}+k_{0}x+k_{1}\end{eqnarray*} + +\end_inset + + +\end_layout + +\end_deeper +\begin_layout MyCode +>>> print polyint([1,3,4],m=2,k=[5,3]) +\newline +[ 0.0833 0.5 2. + 5. + 3. + ] +\end_layout + +\begin_layout Description +polyder +\begin_inset LatexCommand index +name "polyder" + +\end_inset + + (poly, m) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an exact +\begin_inset Formula $m^{\textrm{th}}$ +\end_inset + +-order derivative of the polynomial represented in poly. + Also available as .deriv(m=1) method of poly1d objects. +\end_layout + +\begin_deeper +\begin_layout Description +Example: +\begin_inset Formula \begin{eqnarray*} +p\left(x\right) & = & x^{3}+2x^{2}+4x+3\\ +\frac{dp}{dx}\left(x\right) & = & 3x^{2}+4x+4\end{eqnarray*} + +\end_inset + + +\end_layout + +\end_deeper +\begin_layout MyCode +>>> polyder([1,2,4,3]) +\newline +array([3, 4, 4]) +\end_layout + +\begin_layout Description +polyadd +\begin_inset LatexCommand index +name "polyadd" + +\end_inset + + (p1, p2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Add the two polynomials represented by coefficients: +\begin_inset Formula $p_{1}\left(x\right)+p_{2}\left(x\right)$ +\end_inset + + +\end_layout + +\begin_layout Description +polysub +\begin_inset LatexCommand index +name "polysub" + +\end_inset + + (p1, p2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return coefficients for the polynomial found by subtracting the two polynomials + represented by +\begin_inset Formula $p_{1}$ +\end_inset + + and +\begin_inset Formula $p_{2}$ +\end_inset + +: +\begin_inset Formula $p_{1}\left(x\right)-p_{2}\left(x\right)$ +\end_inset + + +\end_layout + +\begin_layout Description +polymul +\begin_inset LatexCommand index +name "polymul" + +\end_inset + + (p1, p2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the coefficients for +\begin_inset Formula $p_{1}\left(x\right)p_{2}\left(x\right)$ +\end_inset + + +\end_layout + +\begin_layout Description +polydiv +\begin_inset LatexCommand index +name "polydiv" + +\end_inset + + (p1, p2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the quotient, +\begin_inset Formula $q\left(x\right)$ +\end_inset + +, and remainder, +\begin_inset Formula $r\left(x\right)$ +\end_inset + +, so that +\begin_inset Formula $p_{1}\left(x\right)=q\left(x\right)p_{2}\left(x\right)+r\left(x\right),$ +\end_inset + + with the order of +\begin_inset Formula $r\left(x\right)$ +\end_inset + + less than the order of +\begin_inset Formula $p_{2}\left(x\right).$ +\end_inset + + +\end_layout + +\begin_layout Description +polyval +\begin_inset LatexCommand index +name "polyval" + +\end_inset + + (p, y) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Evaluate the polynomial +\begin_inset Formula $p$ +\end_inset + + at +\begin_inset Formula $y$ +\end_inset + +. + The argument, +\begin_inset Formula $y$ +\end_inset + +, can be a number or an array or a polynomial object. + If x is a polynomial object, then polyval performs polynomial composition: + +\begin_inset Formula $p\left(y\left(x\right)\right),$ +\end_inset + + otherwise polyval computes the value of the polynomial at each +\begin_inset Formula $y$ +\end_inset + +. + Uses Horner's rule for evaluation, but this can still lead to numerical + instabilities for wildly fluctuating coefficients. +\end_layout + +\begin_layout Description +polyfit +\begin_inset LatexCommand index +name "polyfit" + +\end_inset + + (x,y,N) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute a best-fit polynomial in +\begin_inset Formula $x$ +\end_inset + + of order +\begin_inset Formula $N$ +\end_inset + +, to the data, +\begin_inset Formula $y$ +\end_inset + +, in the sense of minimizing averaged-squared error between the measurement + and the model. + Useful for quick line-fitting +\begin_inset LatexCommand index +name "fitting" + +\end_inset + +. + +\end_layout + +\begin_layout Section +Set Operations +\end_layout + +\begin_layout Standard +The set operations +\begin_inset LatexCommand index +name "set operations|(" + +\end_inset + + were kindly contributed by Robert Cimrman. + These set operations are based on sorting functions and all expect 1-d + sequences with unique elements with the exception of unique1d and intersect1d_n +u which will flatten N-d nested-sequences to 1-d arrays and can handle non-uniqu +e elements. + +\end_layout + +\begin_layout Description +unique1d +\begin_inset LatexCommand index +name "unique1d" + +\end_inset + + (arr, retindx=False) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the unique elements of arr as a 1-d array. + If retindx is True, then also return the indices, ind, such that arr.flat[ind] + is the set of unique values. +\end_layout + +\begin_layout Description +intersect1d +\begin_inset LatexCommand index +name "intersect1d" + +\end_inset + + (a1, a2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the (sorted) intersection of a1 and a2 which is an array containing + the elements of a1 that are also in a2. + +\end_layout + +\begin_layout Description +intersect1d_nu +\begin_inset LatexCommand index +name "intersect1d\\_nu" + +\end_inset + + (a1, a2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the (sorted) intersection of a1 and a2 but allow a1 and a2 to be + N-d arrays with non-unique elements. + Equivalent to intersect1d(unique1d(a1), unique1d(a2)). + +\end_layout + +\begin_layout Description +union1d +\begin_inset LatexCommand index +name "union1d" + +\end_inset + + (a1, a2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the (sorted) union of a1 and a2 which is an array containing elements + that are in either a1 or a2. + +\end_layout + +\begin_layout Description +setdiff1d +\begin_inset LatexCommand index +name "setdiff1d" + +\end_inset + + (a1, a2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the set-difference of a1 and a2 which is an array containing the + elements of a1 that are +\series bold +not +\series default + in a2. +\end_layout + +\begin_layout Description +setxor1d +\begin_inset LatexCommand index +name "setxor1d" + +\end_inset + + (a1, a2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the (sorted) set containing the exclusive-or of the arrays a1 and + a2. + The exclusive-or contains elements that are in a1 or in a2 as long as the + element is not in both a1 and a2. + +\end_layout + +\begin_layout Description +setmember1d +\begin_inset LatexCommand index +name "setmember1d" + +\end_inset + + (tocheck, set) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a Boolean 1-d array of the length of tocheck which is True whenever + that element is contained in set and false when it is not. + Equivalent +\begin_inset LatexCommand index +name "set operations|)" + +\end_inset + + to array([x in set for x in tocheck]). +\end_layout + +\begin_layout Section +Array construction using index tricks +\end_layout + +\begin_layout Standard +The functions and classes in this category make it simpler to construct + arrays. + +\end_layout + +\begin_layout Description +ix_ +\begin_inset LatexCommand index +name "ix\\_" + +\end_inset + + (*args) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This indexing cross function is useful for forming indexing arrays necessary + to select out the cross-product of +\begin_inset Formula $N$ +\end_inset + + 1-dimensional arrays. + Note that the default indexing does not do a cross-product (which might + be unexpected for someone coming from other programming environments). + The default indexing is more general purpose. + Using the ix_ constructor can produce the indexing arrays necessary to + select a cross-product. +\end_layout + +\begin_layout Description +mgrid [index expression] +\end_layout + +\begin_layout Description +\InsetSpace ~ + This is an instance of a class. + It can be used to construct a filled +\begin_inset Quotes eld +\end_inset + +mesh-grid +\begin_inset Quotes erd +\end_inset + + using slicing syntax. + +\end_layout + +\begin_layout Description +ogrid [index expression] +\end_layout + +\begin_layout Description +\InsetSpace ~ + This is similar to mgrid except it returns an open grid, so as to save + space and time. + The broadcasting rules will ensure that any universal function operating + on the grid will act as if the ogrid had been the result of mgrid. +\end_layout + +\begin_layout Description +r_ +\begin_inset LatexCommand index +name "r\\_" + +\end_inset + + [index expression] +\end_layout + +\begin_layout Description +\InsetSpace ~ + This is a simple way to build up arrays quickly. + There are two use cases. + 1) If the index expression contains comma separated arrays, then stack + them along their first axis. + 2) If the index expression contains slice notation or scalars then create + a 1-d array with a range indicated by the slice notation. + In other-words the slice syntax start:stop:step is equivalent to arange(start, + stop, step) inside of the brackets. + However, if step is an imaginary number (i.e. + 100j) then its integer portion is interpreted as a number-of-points desired + and the start and stop are inclusive. + In other words start:stop:step +\family typewriter +j +\family default + is interpreted as linspace(start, stop, step, endpoint=1) inside of the + brackets. + After expansion of slice notation, all comma separated sequences are concatenat +ed together. +\end_layout + +\begin_layout Description +\InsetSpace ~ + Optional character strings placed as the first element of the index expression + can be used to change the output. + The strings 'r' or 'c' result in matrix output. + If the result is 1-d and 'r' is specified a +\begin_inset Formula $1\times N$ +\end_inset + + (row) matrix is produced. + If the result is 1-d and 'c' is specified, then a +\begin_inset Formula $N\times1$ +\end_inset + + (column) matrix is produced. + If the result is 2-d then both provide the same matrix result. + +\end_layout + +\begin_layout MyCode +>>> print r_[-1:1:9j,[0]*10,5,6] +\newline +[-1. + -0.75 -0.5 -0.25 0. + 0.25 0.5 0.75 1. + 0. + 0. +\newline + 0. + 0. + 0. + 0. + 0. + 0. + 0. + 0. + 5. + 6. + ] +\newline +>>> print r_['r',1,2,5,6] +\newline +[[1 2 5 6]] +\newline +>>> print r_['c',1,2,5,6] +\newline +[[1] +\newline + [2] +\newline + + [5] +\newline + [6]] +\end_layout + +\begin_layout Description +\InsetSpace ~ + A string integer specifies which axis to stack multiple comma separated + arrays along. + +\end_layout + +\begin_layout MyCode +>>> a=arange(6).reshape(2,3) +\newline +>>> r_[a,a] +\newline +array([[0, 1, 2], +\newline + [3, 4, 5], +\newline + + [0, 1, 2], +\newline + [3, 4, 5]]) +\newline +>>> r_['-1',a,a] +\newline +array([[0, 1, 2, 0, 1, + 2], +\newline + [3, 4, 5, 3, 4, 5]]) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A string of two comma-separated integers allows indication of the minimum + number of dimensions to force each entry into as the second integer (the + axis to concatenate along is still the first integer). + +\end_layout + +\begin_layout MyCode +>>> r_['0,2',[1,2,3],[4,5,6]] +\newline +array([[1, 2, 3], +\newline + [4, 5, 6]]) +\newline +>>> r_['1,2',[1, +2,3],[4,5,6]] +\newline +array([[1, 2, 3, 4, 5, 6]]) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A string with three comma-separated integers allows specification of the + axis to concatenate along, the minimum number of dimensions to force the + entries to, and which axis should contain the start of the arrays which + are less than the specified number of dimensions. + In other words the third integer allows you to specify where the the 1's + should be placed in the shape of the arrays that have their shapes upgraded. + By default, they are placed in the front of the shape tuple. + The third argument allows you to specify where the start of the array should + be instead. + Thus, a third argument of '0' would place the 1's at the end of the array + shape. + Negative integers specify where in the new shape tuple the last dimension + of upgraded arrays should be placed, so the default is '-1'. +\end_layout + +\begin_layout MyCode +>>> r_['0,2,0', [1,2,3], [4,5,6]] +\newline +array([[1], +\newline + [2], +\newline + [3], +\newline + + [4], +\newline + [5], +\newline + [6]]) +\newline +>>> r_['1,2,0', [1,2,3], [4,5,6]] +\newline +array([[1, + 4], +\newline + [2, 5], +\newline + [3, 6]]) +\end_layout + +\begin_layout Description +c_ +\begin_inset LatexCommand index +name "c\\_" + +\end_inset + + [index_expression] +\end_layout + +\begin_layout Description +\InsetSpace ~ + This is short-hand for r_['-1,2,0', index_expression] useful because of + its common occurence. + In particular, arrays will be stacked along their last axis after being + upgraded to at least 2-d with 1's post-pended to the shape (column vectors + made out of 1-d arrays). + +\end_layout + +\begin_layout Section +Other indexing devices +\end_layout + +\begin_layout Description +index_exp +\begin_inset LatexCommand index +name "index\\_exp" + +\end_inset + + [index expression] +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a tuple of Python objects that implements the index expression and + can be modified and placed in any other index expression. + +\end_layout + +\begin_layout MyCode +>>> index_exp[2:5,...,4,::-1] +\newline +(slice(2, 5, None), Ellipsis, 4, slice(None, None, + -1)) +\end_layout + +\begin_layout Description +s_ +\begin_inset LatexCommand index +name "s\\_" + +\end_inset + + [index expression] +\end_layout + +\begin_layout Description +\InsetSpace ~ + Translate index expressions into the equivalent Python objects. + This is similar to index_expression except a tuple is not always returned. + For example: +\end_layout + +\begin_layout MyCode +>>> s_[1:10] +\newline +slice(1, 10, None) +\newline +>>> s_[1:10,-3:4:0.5] +\newline +(slice(1, 10, None), slice(-3, + 4, 0.5)) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This provides a standard way to construct index expressions to pass to + functions and methods because Python does not allow slice expressions anywhere + except for inside brackets. + +\end_layout + +\begin_layout Description +ndindex +\begin_inset LatexCommand index +name "ndindex" + +\end_inset + + (*seq) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A sequence of +\begin_inset Formula $N$ +\end_inset + + integers are passed in as separate arguments. + These integers are used as the upper boundaries of an +\begin_inset Formula $N$ +\end_inset + +-dimensional counter that starts at 0. + The object returned is an iterator that implements the counter. +\end_layout + +\begin_layout MyCode +>>> for index in ndindex(3,3,2): +\newline +... + print index, +\newline +(0, 0, 0) (0, 0, 1) (0, 1, 0) (0, 1, 1) (0, 2, 0) (0, 2, + 1) (1, 0, 0) (1, 0, 1) (1, 1, 0) (1, 1, 1) (1, 2, 0) (1, 2, 1) (2, 0, 0) + (2, 0, 1) (2, 1, 0) (2, 1, 1) (2, 2, 0) (2, 2, 1) +\end_layout + +\begin_layout Description +unravel_index +\begin_inset LatexCommand index +name "unravel\\_index" + +\end_inset + + (indx, dims) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert a flat index, indx, into an index tuple for an array of the given + shape. + Keep in mind that it may be more convenient to use indx with a.flat, then + to unravel the index. +\end_layout + +\begin_layout Section +Two-dimensional functions +\end_layout + +\begin_layout Standard +These functions all deal with or return two dimensional arrays. +\end_layout + +\begin_layout Description +eye +\begin_inset LatexCommand index +name "eye" + +\end_inset + + ( +\begin_inset Formula $N$ +\end_inset + +, +\begin_inset Formula $M$ +\end_inset + +=None, +\begin_inset Formula $k$ +\end_inset + +=0, dtype=float) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an +\begin_inset Formula $N\times M$ +\end_inset + + array of the given type with ones down the +\begin_inset Formula $k^{\textrm{th}}$ +\end_inset + + diagonal. + If +\begin_inset Formula $M$ +\end_inset + + is None, it defaults to +\begin_inset Formula $N$ +\end_inset + +. + Alternatively, if +\begin_inset Formula $M$ +\end_inset + + is a valid data type, then it becomes the data-type used. + +\end_layout + +\begin_layout Description +vander +\begin_inset LatexCommand index +name "vander" + +\end_inset + + ( +\begin_inset Formula $x$ +\end_inset + +, +\begin_inset Formula $N$ +\end_inset + +=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + The Vandermonde matrix of vector, +\begin_inset Formula $x$ +\end_inset + +. + The +\begin_inset Formula $i^{\textrm{th}}$ +\end_inset + + column of the return matrix is the +\begin_inset Formula $m_{i}^{\textrm{th}}$ +\end_inset + + power of +\begin_inset Formula $x$ +\end_inset + + where +\begin_inset Formula $m_{i}=N-i-1$ +\end_inset + +. + If +\begin_inset Formula $N$ +\end_inset + + is None, it defaults to the length of +\begin_inset Formula $x$ +\end_inset + +. + +\end_layout + +\begin_layout MyCode +>>> vander([1,2,3,4,5],3) +\newline +array([[ 1, 1, 1], +\newline + [ 4, 2, 1], +\newline + + [ 9, 3, 1], +\newline + [16, 4, 1], +\newline + [25, 5, 1]]) +\end_layout + +\begin_layout Description +diag +\begin_inset LatexCommand index +name "diag" + +\end_inset + + ( +\begin_inset Formula $v$ +\end_inset + +, +\begin_inset Formula $k$ +\end_inset + +=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the +\begin_inset Formula $k^{\textrm{th}}$ +\end_inset + + diagonal if +\begin_inset Formula $v$ +\end_inset + + is a 2-d array, or returns an array with +\begin_inset Formula $v$ +\end_inset + + as the +\begin_inset Formula $k^{\textrm{th}}$ +\end_inset + + diagonal if +\begin_inset Formula $v$ +\end_inset + + is a 1-d array. + +\end_layout + +\begin_layout MyCode +>>> diag(arange(12).reshape(4,3),k=1) +\newline +array([1, 5]) +\newline +>>> diag([1,4,5,7],k=-1) +\newline +array([ +[0, 0, 0, 0, 0], +\newline + [1, 0, 0, 0, 0], +\newline + [0, 4, 0, 0, 0], +\newline + [0, + 0, 5, 0, 0], +\newline + [0, 0, 0, 7, 0]]) +\end_layout + +\begin_layout Description +diagflat +\begin_inset LatexCommand index +name "diagflat" + +\end_inset + + ( +\begin_inset Formula $v$ +\end_inset + +, +\begin_inset Formula $k$ +\end_inset + +=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a 2-d array (of the same class as +\begin_inset Formula $v$ +\end_inset + +) by placing a flattened version of +\begin_inset Formula $v$ +\end_inset + + along the +\begin_inset Formula $k^{\textrm{th}}$ +\end_inset + + diagonal. + This differs from diag in that it only creates 2-d arrays and will work + with any object that can be converted to an array (returning that object + if it also defines an __array_wrap__ method). + +\end_layout + +\begin_layout Description +fliplr +\begin_inset LatexCommand index +name "fliplr" + +\end_inset + + (m) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the array, m, with rows preserved and columns reversed in the left-right + direction. + For m.ndim > 2, this works on the first two dimensions (equivalent to m[:,::-1]) +\end_layout + +\begin_layout Description +flipud +\begin_inset LatexCommand index +name "flipud" + +\end_inset + + (m) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the array, m, with columns preserved and rows reversed in the up-down + direction. + For m.ndim > 1, this works on the first dimension (equivalent to m[::-1]) +\end_layout + +\begin_layout Description +rot90 +\begin_inset LatexCommand index +name "rot90" + +\end_inset + + (m, k=1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Rotate the first two dimensions of an array, m, by k*90 degrees in the + counterclockwise direction. + Must have m.ndim >=2. +\end_layout + +\begin_layout Description +tri +\begin_inset LatexCommand index +name "tri" + +\end_inset + + ( +\begin_inset Formula $N$ +\end_inset + +, +\begin_inset Formula $M$ +\end_inset + += +\begin_inset Formula $N$ +\end_inset + +, k=0, dtype=aint) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct an +\begin_inset Formula $N\times M$ +\end_inset + + array where all the diagonals starting from the lower left corner up to + the +\begin_inset Formula $\textrm{k}^{\textrm{th}}$ +\end_inset + + diagonal are all ones. + +\end_layout + +\begin_layout Description +triu +\begin_inset LatexCommand index +name "triu" + +\end_inset + + (m, k=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a upper-triangular 2-d array from m with all the elements below + the +\begin_inset Formula $\textrm{k}^{\textrm{th}}$ +\end_inset + + diagonal set to 0. + +\end_layout + +\begin_layout Description +tril +\begin_inset LatexCommand index +name "tril" + +\end_inset + + (m, k=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a lower-triangular 2-d array from m with all the elements above + the +\begin_inset Formula $\textrm{k}^{\textrm{th}}$ +\end_inset + + diagonal set to 0. + +\end_layout + +\begin_layout Description +mat +\begin_inset LatexCommand index +name "mat" + +\end_inset + + (data, dtype=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct a matrix from data. + Alias for numpy.asmatrix. + The calling syntax is the same as that function. + Note that data can be a string in which case the routine uses spaces and + semi-colons to construct the matrix: +\end_layout + +\begin_layout MyCode +>>> mat('1 3 4; 5 6 9') +\newline +matrix([[1, 3, 4], +\newline + [5, 6, 9]]) +\end_layout + +\begin_layout Description +bmat +\begin_inset LatexCommand index +name "bmat" + +\end_inset + + (obj, ldict=None, gdict=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Build a matrix from sub-blocks. + This is similar to mat, except the items in the nested-sequence, or string, + should be appropriately shaped 2-d arrays. + If obj is a string, then ldict and gdict can be used to alter where the + names represented in the string are found (default is current local and + global namespace). + +\end_layout + +\begin_layout MyCode +>>> A=mat('1 2; 3 4'); B=mat('5 6; 7 8') +\newline +>>> bmat('A, B; B, A') +\newline +matrix([[1, + 2, 5, 6], +\newline + [3, 4, 7, 8], +\newline + [5, 6, 1, 2], +\newline + [7, 8, 3, 4]]) +\end_layout + +\begin_layout Section +More data type functions +\end_layout + +\begin_layout Description +issubclass_ +\begin_inset LatexCommand index +name "issubclass\\_" + +\end_inset + + (arg1, arg2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns True if arg1 is a sub-class of arg2, otherwise returns False. + Similar to the built-in issubclass except it does not raise an error if + arg1 or arg2 are not types. + +\end_layout + +\begin_layout Description +issubdtype +\begin_inset LatexCommand index +name "issubdtype" + +\end_inset + + (arg1, arg2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns True if the type-object of the data-type represented by arg1 is + a sub class of the type-object of the data-type represented by arg2. +\end_layout + +\begin_layout Description +iscomplexobj +\begin_inset LatexCommand index +name "iscomplexobj" + +\end_inset + + (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a single True or False value depending on whether or not obj would + be interpreted as an array with complex-valued data type. +\end_layout + +\begin_layout Description +isrealobj +\begin_inset LatexCommand index +name "isrealobj" + +\end_inset + + (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a single True or False value depending on whether or not obj would + be interpreted as an array with real-valued data type. +\end_layout + +\begin_layout Description +isscalar +\begin_inset LatexCommand index +name "isscalar" + +\end_inset + + (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + True if obj is a scalar (an instance of an array data type, or a standard + Python scalar type). + There is also a sequence of called ScalarType defined in NumPy, so that + this can also be tested as type(obj) in numpy.ScalarType. + +\end_layout + +\begin_layout Description +nan_to_num +\begin_inset LatexCommand index +name "nan\\_to\\_num" + +\end_inset + + (arr) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns an array with non-finite numbers changed to finite numbers. + The mapping converts +\family typewriter +nan +\family default + to 0, +\family typewriter +inf +\family default + to the maximum value for the data type and +\family typewriter +-inf +\family default + to the minimum value for the data type. +\end_layout + +\begin_layout Description +real_if_close +\begin_inset LatexCommand index +name "real\\_if\\_close" + +\end_inset + + (arr, tol=100) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a real arr if arr is complex with imaginary parts less than some + tolerance. + If tol > 1, then it represents a multiplicative factor on the value of + epsilon for the data type of arr. +\end_layout + +\begin_layout Description +cast +\begin_inset LatexCommand index +name "cast" + +\end_inset + + [dtype_or_alias] (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Cast obj to an array of the given type. + This is equivalent to array(obj, copy=0).astype(dtype_or_alias). + When one type is cast to another in this fashion, a very low-level operation + takes place. + Typically, you get what your C-compiler produces for the cast, but notice + that in the case of casting to a bool type, the value becomes either a + 0 or a 1. + +\end_layout + +\begin_layout MyCode +>>> cast[bool]([1,2,0,4,0]).astype(int) +\newline +array([1, 1, 0, 1, 0]) +\end_layout + +\begin_layout Description +asfarray +\begin_inset LatexCommand index +name "asfarray" + +\end_inset + + (a, dtype=float) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an array of inexact data type (floating or complexfloating). + +\end_layout + +\begin_layout Description +mintypecode +\begin_inset LatexCommand index +name "mintypecode" + +\end_inset + + (typechars, typeset='GDFgdf', default='d') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a minimum data type character from typeset that handles all given + typechars. + The returned type character must correspond to the data type of the smallest + size such that an array of the returned type can handle the data from an + array of type t for each t in typechars. + If the typechars does not intersect with the typeset, then default is returned. + If an element of typechars is not a string, then t=asarray(t).dtypechar + is applied. +\end_layout + +\begin_layout Description +finfo +\begin_inset LatexCommand index +name "finfo" + +\end_inset + + (dtype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This class allows exploration of the details of how a floating point number + is represented in the computer. + It can be instantiated by an inexact data type object (or an alias for + one). + Complex-valued data types are acceptable and are equivalent to their real-value +d counterparts. + The attributes of the class are +\end_layout + +\begin_deeper +\begin_layout Description +nmant The number of bits in the floating point mantissa, or fraction. +\end_layout + +\begin_layout Description +nexp The number of bits in the floating point exponent +\end_layout + +\begin_layout Description +machep Exponent of the smallest (most negative) power of 2 that when added + to 1.0 gives something different than 1.0. + +\end_layout + +\begin_layout Description +eps Floating point precision: 2**machep. +\end_layout + +\begin_layout Description +precision Number of decimal digits of precision: int(-log10(eps)) +\end_layout + +\begin_layout Description +resolution 10**(-precision) +\end_layout + +\begin_layout Description +negep Exponent of the smallest power of 2 that, subtracted from 1.0, gives + something different than 1.0. +\end_layout + +\begin_layout Description +epsneg Floating point precision: 2**negep. +\end_layout + +\begin_layout Description +minexp Smallest (most negative) power of 2 producing +\begin_inset Quotes eld +\end_inset + +normal +\begin_inset Quotes erd +\end_inset + + numbers (no leading zeros in the mantissa). + +\end_layout + +\begin_layout Description +tiny The smallest (in magnitude) usable floating point number equal to 2**minexp. +\end_layout + +\begin_layout Description +maxexp Smallest (positive) power of 2 that causes overflow. +\end_layout + +\begin_layout Description +max The largest usable floating value: (1-epsneg)* (2**maxep) +\end_layout + +\begin_layout Description +min The most negative usable floating value: -max +\end_layout + +\end_deeper +\begin_layout Description +\InsetSpace ~ + The most useful attributes are probably eps, max, min, and tiny. +\end_layout + +\begin_layout Section +Functions that behave like ufuncs +\end_layout + +\begin_layout Standard +These functions are Python functions built on top of universal functions + (ufuncs) and also take optional output arguments. + They broadcast like ufuncs but do not have ufunc attributes. +\end_layout + +\begin_layout Description +fix +\begin_inset LatexCommand index +name "fix" + +\end_inset + + (x, y=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Round x to the nearest integer towards zero. +\end_layout + +\begin_layout Description +isneginf +\begin_inset LatexCommand index +name "isneginf" + +\end_inset + + (x, y=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + True if +\begin_inset Formula $x=-\infty$ +\end_inset + +. + Should be the same as +\family typewriter +x==NumPy.NINF +\family default +. +\end_layout + +\begin_layout Description +isposinf +\begin_inset LatexCommand index +name "isposinf" + +\end_inset + + (x, y=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + True if +\begin_inset Formula $x=+\infty.$ +\end_inset + + Should be the same as +\family typewriter +x==NumPy.PINF +\family default +. +\end_layout + +\begin_layout Description +log2 +\begin_inset LatexCommand index +name "log2" + +\end_inset + + (x, y=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute the logarithm to the base 2 of +\begin_inset Formula $x.$ +\end_inset + + An optional output array may be provided. +\end_layout + +\begin_layout Section +Miscellaneous Functions +\end_layout + +\begin_layout Standard +Some miscellaneous functions are available in NumPy which are included largely + for compatibility with MLab of the old Numeric package. + One notable difference, however, is that due to a separate implementation + of the modified Bessel function, the kaiser window is available without + needing a separate library. + +\end_layout + +\begin_layout Description +sinc +\begin_inset LatexCommand index +name "sinc" + +\end_inset + + ( +\begin_inset Formula $x$ +\end_inset + +) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute the sinc function for +\begin_inset Formula $x$ +\end_inset + + which can be a scalar or array. + The sinc is defined as +\begin_inset Formula $y=\textrm{sinc}\left(x\right)=\frac{\sin\left(\pi x\right)}{\pi x}$ +\end_inset + + with the caveat that the limiting value (1.0) of the ratio is taken for + +\begin_inset Formula $x=0.$ +\end_inset + + +\end_layout + +\begin_layout Description +i0 +\begin_inset LatexCommand index +name "i0" + +\end_inset + + ( +\begin_inset Formula $x$ +\end_inset + +) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Modified Bessel function of the first kind of order 0. + Needed to compute the kaiser window. + The modified Bessel function is defined as +\begin_inset Formula \[ +I_{0}\left(x\right)=\frac{1}{\pi}\int_{0}^{\pi}e^{x\cos\theta}d\theta=\sum_{k=0}^{\infty}\frac{x^{2k}}{4^{k}\left(k!\right)^{2}}.\] + +\end_inset + + +\end_layout + +\begin_layout Description +blackman +\begin_inset LatexCommand index +name "blackman" + +\end_inset + + ( +\begin_inset Formula $M$ +\end_inset + +) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct an +\begin_inset Formula $M$ +\end_inset + +-point Blackman smoothing window which is sequence of length +\begin_inset Formula $M$ +\end_inset + + with values given for +\begin_inset Formula $n=0\ldots M-1$ +\end_inset + + by +\begin_inset Formula \[ +w\left[n\right]=0.42-0.5\cos\left(2\pi\frac{n}{M-1}\right)+0.08\cos\left(4\pi\frac{n}{M-1}\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +bartlett +\begin_inset LatexCommand index +name "bartlett" + +\end_inset + + ( +\begin_inset Formula $M$ +\end_inset + +) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct an +\begin_inset Formula $M$ +\end_inset + +-point Bartlett (triangular) smoothing window as +\begin_inset Formula \[ +w\left[n\right]=\left\{ \begin{array}{cc} +2\frac{n}{M-1} & 0\leq n\leq\frac{M-1}{2},\\ +2-2\frac{n}{M-1} & \frac{M-1}{2}<n\leq M-1.\end{array}\right.\] + +\end_inset + + +\end_layout + +\begin_layout Description +hanning +\begin_inset LatexCommand index +name "hanning" + +\end_inset + + ( +\begin_inset Formula $M$ +\end_inset + +) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct an +\begin_inset Formula $M$ +\end_inset + +-point Hanning smoothing window defined as +\begin_inset Formula \[ +w\left[n\right]=\frac{1}{2}-\frac{1}{2}\cos\left(2\pi\frac{n}{M-1}\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +hamming +\begin_inset LatexCommand index +name "hamming" + +\end_inset + + ( +\begin_inset Formula $M$ +\end_inset + +) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct an +\begin_inset Formula $M$ +\end_inset + +-point Hamming smoothing window defined for +\begin_inset Formula $n=0\ldots M-1$ +\end_inset + + as +\begin_inset Formula \[ +w\left[n\right]=0.54-0.46\cos\left(2\pi\frac{n}{M-1}\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + All of the windowing functions are smoothing windows that attempt to balance + the inherent trade off between side-lobe height (ringing) and main-lobe + width (resolution) in the frequency domain. + A rectangular window has the smallest main-lobe width but the largest side-lobe + height. + A windowing (tapering) function tries to can help trade off main-lobe width + By sacrificing a little in resolution using a windowing function These + windows can be used to smooth data using the convolve function. + Figure +\begin_inset LatexCommand ref +reference "cap:window functions" + +\end_inset + + shows the windowing functions described so far and their time- and frequency-do +main behavior. + +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status open + +\begin_layout Standard +\begin_inset Graphics + filename Figures/fig1.eps + lyxscale 48 + width 49line% + keepAspectRatio + +\end_inset + + +\hfill + +\begin_inset Graphics + filename Figures/fig2.eps + lyxscale 48 + width 49line% + keepAspectRatio + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +\begin_inset LatexCommand label +name "cap:window functions" + +\end_inset + +Blackman, Bartlett, Hanning, and Hamming windows in the time and frequency + domain showing the trade-off between main-lobe width and side-lobe height + (Figures made with matplotlib). +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The trade-off between main-lobe and side-lobe has been studied extensively. + Solutions that maximize energy in the main-lobe compared to energy in the + side-lobes can be found by finding an eigenvector which can be expensive + to compute for large window sizes. + A good approximation to these prolate-spheroidal windows is the Kaiser + window. + +\end_layout + +\begin_layout Description +kaiser +\begin_inset LatexCommand index +name "kaiser" + +\end_inset + + ( +\begin_inset Formula $M$ +\end_inset + +, +\begin_inset Formula $\beta$ +\end_inset + +) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct an +\begin_inset Formula $M$ +\end_inset + +-point Kaiser smoothing window. + The +\begin_inset Formula $\beta$ +\end_inset + + parameter controls the width of the window (and the frequency-domain side-lobe + height and main-lobe width). + The window is defined as +\begin_inset Formula \[ +w\left[n\right]=\frac{1}{I_{0}\left(\beta\right)}I_{0}\left(\beta\sqrt{1-\frac{\left(2n-M-1\right)^{2}}{\left(M-1\right)^{2}}}\right).\] + +\end_inset + + There is an empirical relationship between +\begin_inset Formula $\beta$ +\end_inset + + and the side-lobe height which can be used in FIR filter design. + To achieve a side-lobe height of +\begin_inset Formula $-\alpha$ +\end_inset + +dB, the +\begin_inset Formula $\beta$ +\end_inset + + parameter is +\begin_inset Formula \[ +\beta=\left\{ \begin{array}{cc} +0.1002\left(\alpha-8.7\right) & \alpha>50,\\ +0.5842\left(\alpha-21\right)^{0.4}+0.07886\left(\alpha-21\right) & 21\leq\alpha\leq50,\\ +0 & \alpha<21.\end{array}\right.\] + +\end_inset + + The length +\begin_inset Formula $M$ +\end_inset + + of the window determines the transition width. + To obtain a transition width of +\begin_inset Formula $\Delta\omega$ +\end_inset + +rad/s the window-length must be at least: +\begin_inset Formula \[ +M=\frac{\alpha-8}{2.285\Delta\omega}+1.\] + +\end_inset + + +\end_layout + +\begin_layout Section +Utility functions +\end_layout + +\begin_layout Description +set_numeric_ops +\begin_inset LatexCommand index +name "set\\_numeric\\_ops" + +\end_inset + + (<op1>=func1, <op2>=func2, ...) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This function can be used to alter the operations used for internal array + calculations and array special methods. + Replaceable operations (and possible entries for <opN>) are add, subtract, + multiply, divide, remainder, power, sqrt, negative, absolute, invert, left_shif +t, right_shift, bitwise_and, bitwise_or, less, less_equal, equal, not_equal, + greater, greater_equal, floor_divide, true_divide, logical_or, logical_and, + floor, ceil, maximum, and minimum. + The example code below changes, then restores, the old Numeric behavior + of remainder (which was changed because it was not consistent with Python). + +\end_layout + +\begin_layout MyCode +>>> a = array([-3.,-2,-1,0,1,2,3]) +\newline +>>> print a % -2.1 +\newline +[-0.9 -2. + -1. + 0. + -1.1 -0.1 -1.2] +\newline +>>> oldops = set_numeric_ops(remainder=fmod) +\newline +>>> print a % + -2.1 +\newline +[-0.9 -2. + -1. + 0. + 1. + 2. + 0.9] +\newline +>>> newops = set_numeric_ops(**oldops) +\newline +>>> print a % -2.1 +\newline +[-0.9 -2. + -1. + 0. + -1.1 -0.1 -1.2] +\newline +>>> print 3 % -2.1 # comparison +\newline +-1.2 +\end_layout + +\begin_layout Description +get_include +\begin_inset LatexCommand index +name "get\\_include" + +\end_inset + + () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the directory that contains the numpy include files. + The numpy.distutils automatically includes this directory in building extensions. + +\end_layout + +\begin_layout Description +get_numarray_include +\begin_inset LatexCommand index +name "get\\_numarray\\_include" + +\end_inset + + (type=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the directory that contains the numarray compatible C-API include + files. + If type is not None, then return a list containing both the numarray compatible + C-API include files and the numpy include files. + The latter form is only needed when building an extension without the use + of numpy.distutils. + +\end_layout + +\begin_layout Description +deprecate +\begin_inset LatexCommand index +name "deprecate" + +\end_inset + + (func, oldname, newname) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a deprecated function named 'oldname' that has been replaced by + 'newname'. + This new deprecated function issues a warning before calling the old function. + The name and docs of the function are also updated to be oldname instead + of the name that func has. + Example usage. + If you want to deprecate the function named 'old' in favor of a new function + named 'new' which has the same calling conention then this could be done + with the assignment +\end_layout + +\begin_deeper +\begin_layout LyX-Code +old = deprecate(new, 'old', 'new') +\end_layout + +\end_deeper +\begin_layout Chapter +Scalar objects +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand label +name "cha:Scalar-objects" + +\end_inset + + +\end_layout + +\begin_layout Quotation +Never worry about numbers. + Help one person at a time, and always start with the person nearest you. +\end_layout + +\begin_layout Right Address +--- +\emph on +Mother Teresa +\end_layout + +\begin_layout Quotation +A great many people think they are thinking when they are merely rearranging + their prejudices. +\end_layout + +\begin_layout Right Address +--- +\emph on +William James +\end_layout + +\begin_layout Standard +One +\begin_inset LatexCommand index +name "array scalars|(" + +\end_inset + + important new feature of NumPy is the addition of a new scalar object for + each of the 21 different data types that an array can have. + Do not confuse these scalar objects with the data-type objects. + There is one data-type object. + It contains a +\family typewriter +.type +\family default + attribute which points to the Python type that each element of the array + will be returned as +\begin_inset Foot +status open + +\begin_layout Standard +with the exception of object data-types which return the underlying object + and not a +\begin_inset Quotes eld +\end_inset + +scalar +\begin_inset Quotes erd +\end_inset + + type. + +\end_layout + +\end_inset + +. + The built-in data-types point have . +\family typewriter +type +\family default + attributes that point to these scalar objects. + Five (or six) of these new scalar objects are essentially equivalent to + fundamental Python types and therefore inherit from them as well as from + the generic array scalar type. + The bool_ data type is very similar to the Python BooleanType but does + not inherit from it because Python's BooleanType does not allow itself + to be inherited from, and on the C-level the size of the actual bool_ data + is not the same as a Python Boolean scalar. + Table +\begin_inset LatexCommand ref +reference "cap:Array-scalar-types" + +\end_inset + + shows which array scalars inherit from basic Python types. + +\end_layout + +\begin_layout Standard +\begin_inset Float table +wide false +sideways false +status open + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +\begin_inset LatexCommand label +name "cap:Array-scalar-types" + +\end_inset + +Array scalar types that inherit from basic Python types. + The intc array data type might also inherit from the IntType if it has + the same number of bits as the int_ array data type on your platform. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align center +\begin_inset Tabular +<lyxtabular version="3" rows="6" columns="2"> +<features> +<column alignment="center" valignment="top" leftline="true" width="0"> +<column alignment="center" valignment="top" leftline="true" rightline="true" width="0"> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +array data type +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Python type +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +int_ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +IntType +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +float_ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +FloatType +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +complex_ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +ComplexType +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +str_ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +StringType +\end_layout + +\end_inset +</cell> +</row> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +unicode_ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +UnicodeType +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +The array scalars have the same attributes and methods as arrays and live + in a hierarchy of scalar types so they can be easily classified based on + their type objects. + However, because array scalars are immutable, and attributes change intrinsic + properties of the object, the +\series bold +array scalar attributes are not settable +\series default +. +\end_layout + +\begin_layout Standard +Array scalars can be detected using the hierarchy of data types. + For example, +\family typewriter +isinstance(val, generic) +\family default + will return True if val is an array scalar object. + Alternatively, what kind of array scalar is present can be determined using + other members of the data type hierarchy. + Thus, for example +\family typewriter +isinstance(val, complexfloating) +\family default + will return True if val is a complex valued type, while +\family typewriter +isinstance(val, flexible) +\family default + will return true if val is one of the flexible itemsize array types (string, + unicode, void). + +\end_layout + +\begin_layout Warning +The bool_ type is not a subclass of the int_ type (the bool_ type is not + even a number type). + This is different than Python's default implementation of bool as a sub-class + of int. +\end_layout + +\begin_layout Section +Attributes of array scalars +\end_layout + +\begin_layout Standard +The array scalar objects have an +\family typewriter +__array_priority__ +\family default + of NPY_SCALAR_PRIORITY (-1,000,000.0). + They also do not (yet) have a ctypes attribute. + Otherwise, they share the same attributes as arrays: +\end_layout + +\begin_layout Description +flags +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns True for CONTIGUOUS, OWNDATA, FORTRAN, and ALIGNED. + Always returns False for WRITEABLE, and UPDATEIFCOPY. + +\end_layout + +\begin_layout Description +shape +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns (). +\end_layout + +\begin_layout Description +strides +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns (). +\end_layout + +\begin_layout Description +ndim +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns 0. +\end_layout + +\begin_layout Description +data +\end_layout + +\begin_layout Description +\InsetSpace ~ + A read-only buffer object of size self.itemsize, +\end_layout + +\begin_layout Description +size +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return 1. +\end_layout + +\begin_layout Description +itemsize +\end_layout + +\begin_layout Description +\InsetSpace ~ + The number of bytes this scalar requires. +\end_layout + +\begin_layout Description +base +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns None. +\end_layout + +\begin_layout Description +dtype +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns data type descriptor corresponding to this array scalar. + +\end_layout + +\begin_layout Description +real +\end_layout + +\begin_layout Description +\InsetSpace ~ + The real part of the scalar. +\end_layout + +\begin_layout Description +imag +\end_layout + +\begin_layout Description +\InsetSpace ~ + The imaginary part of the scalar (or 0 if this is real). +\end_layout + +\begin_layout Description +flat +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a 1-d iterator object (of size 1). +\end_layout + +\begin_layout Description +T +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a reference to self. +\end_layout + +\begin_layout Description +__array_interface__ +\end_layout + +\begin_layout Description +\InsetSpace ~ + The Python-side to the array interface. + +\end_layout + +\begin_layout Description +__array_struct__ +\end_layout + +\begin_layout Description +\InsetSpace ~ + The C-side to the array interface +\end_layout + +\begin_layout Description +__array_priority__ +\end_layout + +\begin_layout Description +\InsetSpace ~ + -100.0 (very low-priority). + +\end_layout + +\begin_layout Description +__array_wrap__ (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns an array scalar from an array +\end_layout + +\begin_layout Section +Methods of array scalars +\end_layout + +\begin_layout Standard +Array scalars have exactly the same methods as arrays. + The default behavior of these methods is to internally convert the scalar + to an equivalent 0-dimensional array and to call the corresponding array + method. + The exceptions to these rules are given below. + In addition, math operations on array scalars are defined so that the same + hardware flags are set and used to interpret the results as for ufunc. + Therefore the error state used for ufuncs also carries over to the math + on array scalars. +\end_layout + +\begin_layout Description +__new__ (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + The default behavior is to return a new array or array scalar by calling + array(obj) with the corresponding data type. + There are two situations when this default behavior is delayed until another + approach is tried. + First, when the array scalar type inherits from a Python type, then the + Python types new method is called first and the default method is called + only if that approach fails. + The second situation is for the +\family typewriter +void +\family default + data type where a single integer-like argument will cause a void scalar + of that size to be created and initialized to 0. + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Notice that because array(obj) is called for new, if obj is a nested sequence, + then the return object could actually be an +\family typewriter +ndarray +\family default +. + Thus, arrays of the correct type can also be created by calling the array + data type name directly: +\end_layout + +\begin_layout MyCode +>>> uint32([[5,6,7,8],[1,2,3,4]]) +\newline +array([[5, 6, 7, 8], +\newline + [1, 2, 3, 4]], + dtype=uint32) +\end_layout + +\begin_layout Description +__array__ (<None>) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns a 0-dimensional array of the given data type, or of type(self) + if argument is None. +\end_layout + +\begin_layout Description +__array_wrap__ (array) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns a scalar array object from the first-element of the array. +\end_layout + +\begin_layout Description +__squeeze__ () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns self. +\end_layout + +\begin_layout Description +byteswap (<False>) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Trying to set the first (inplace) argument to True raises a ValueError. + Otherwise, this returns a new array scalar with the data byteswapped. + +\end_layout + +\begin_layout Description +__reduce__ () +\end_layout + +\begin_layout Description +\InsetSpace ~ + This is called to pickle an array scalar. + It returns a tuple of (numpy.core.multiarray.scalar, self.dtypestr, obj or + self.tostring()) which can be used to reconstruct the scalar on unpickling. + Notice that no state is written, because the entire scalar can be constructed + from just the string. + Also, if this is an object array scalar, then the Python object being reference +d is written. +\end_layout + +\begin_layout Description +__setstate__ () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Does nothing but return None. +\end_layout + +\begin_layout Description +setflags () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Does nothing, as flags cannot be set for scalars +\begin_inset LatexCommand index +name "array scalars|)" + +\end_inset + +. +\end_layout + +\begin_layout Section +Defining New Types +\end_layout + +\begin_layout Standard +There are two ways to effectively define a new type of array. + One way is to simply subclass the ndarray and overwrite the methods of + interest. + This will work to a degree, but internally certain behaviors are fixed + by the data type of the array. + To fully customize the data type of an array you need to define a new data-type + for the array, and register it with NumPy. + This new type can only be defined in C. + How to define a new data type in C will be discussed in the next part of + the book. +\end_layout + +\begin_layout Chapter +Data-type ( +\family typewriter +dtype +\family default +) Objects +\end_layout + +\begin_layout Quotation +We cannot expect that all nations will adopt like systems, for conformity + is the jailer of freedom and the enemy of growth. +\end_layout + +\begin_layout Right Address +--- +\emph on +John F. + Kennedy +\end_layout + +\begin_layout Quotation +What information consumes is rather obvious: it consumes the attention of + its recipients. + Hence, a wealth of information creates a poverty of attention and a need + to allocate that attention efficiently among the overabundance of information + sources that might consume it. +\end_layout + +\begin_layout Right Address +--- +\emph on +Herbert Simon +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand label +name "cha:Data-descriptor-objects" + +\end_inset + +It +\begin_inset LatexCommand index +name "dtype|(" + +\end_inset + + is important not to confuse the +\begin_inset Quotes eld +\end_inset + +array-scalars +\begin_inset Quotes erd +\end_inset + + with the +\begin_inset Quotes eld +\end_inset + +data-type objects. +\begin_inset Quotes erd +\end_inset + + It is true that an array-scalar can be interpreted as a data-type object + and so can be used to refer to the data-type of an array. + However, the data-type object is a separate Python object. + Every ndarray has an associated data-type object that completely defines + the data in the array (including any named fields). + For every built-in data-type object there is an associated type object + whose instances are the array-scalars. + Because of the association between each data-type object and a type-object + of the corresponding array scalar, the array-scalar type-objects can also + be thought of as data-types. + However, for the type objects of flexible array-scalars (string, unicode_, + and void), the type-objects alone are not enough to specify the full data-type + because the length is not given. + The data-type constructor, +\series bold +numpy.dtype +\series default +, converts any object that can be considered as a data-type into a data-type + object which is the actual object an ndarray looks to in order to interpret + each element of its data region. + Whenever a data-type is required in a NumPy function or method, supplying + a dtype object is always fastest. + If the object supplied is not a dtype object, then it will be converted + to one using dtype(obj). + Therefore, understanding data-type objects is the key to understanding + how data types are really represented and understood in NumPy. +\end_layout + +\begin_layout Section +Attributes +\begin_inset LatexCommand index +name "dtype!attributes|(" + +\end_inset + + +\end_layout + +\begin_layout Description +type +\begin_inset LatexCommand index +name "dtype!attributes!type" + +\end_inset + + The +\begin_inset LatexCommand index +name "The" + +\end_inset + + type object used to instantiate a scalar of this data-type. +\end_layout + +\begin_layout Description +kind +\begin_inset LatexCommand index +name "dtype!attributes!kind" + +\end_inset + + A character code (one of 'biufcSUV') identifying the general kind of data. + +\end_layout + +\begin_layout Description +char +\begin_inset LatexCommand index +name "dtype!attributes!char" + +\end_inset + + A unique character code for each of the 21 different built-in types. + +\end_layout + +\begin_layout Description +num +\begin_inset LatexCommand index +name "dtype!attributes!num" + +\end_inset + + A unique number for each of the 21 different built-in types roughly ordered + from least-to-most precision. + +\end_layout + +\begin_layout Description +str +\begin_inset LatexCommand index +name "dtype!attributes!str" + +\end_inset + + The array-protocol typestring of this data-type object. +\end_layout + +\begin_layout Description +name +\begin_inset LatexCommand index +name "dtype!attributes!name" + +\end_inset + + A bit-width name for this data-type (un-sized flexible data-type objects + are missing the width). + +\end_layout + +\begin_layout Description +byteorder +\begin_inset LatexCommand index +name "dtype!attributes!byteorder" + +\end_inset + + A character indicating the byte-order of this data-type object ('=' : native, + '<' : little-endian, '>' : big-endian, '|' : not applicable). + All built-in data-type objects have byteorder either '=' or '|'. + +\end_layout + +\begin_layout Description +itemsize +\begin_inset LatexCommand index +name "dtype!attributes!itemsize" + +\end_inset + + The element size of this data-type object. + For 18 of the 21 types this number is fixed by the data-type. + For the flexible data-types, this number can be anything. + +\end_layout + +\begin_layout Description +alignment +\begin_inset LatexCommand index +name "dtype!attributes!alignment" + +\end_inset + + The required alignment (in bytes) of this data-type according to the compiler. + More information is available in the C-API section. + +\end_layout + +\begin_layout Description +fields +\begin_inset LatexCommand index +name "dtype!attributes!fields" + +\end_inset + + A dictionary showing any named fields that have been defined for this data-type + (or None if there are no named fields). + Fields can be assigned to any built-in data-type ( +\emph on +e.g. + +\emph default + using the tuple input to the dtype constructor). + However, fields are most useful for (subtypes of) void data-types which + can be any size. + Fields are a convenient way to keep track of fixed-size sub-parts of the + total fixed-size array-element, or record. + A field is defined in terms of another dtype object and an offset (in bytes) + into the current record. + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The fields dictionary is indexed by keys that are the names of the fields. + Each entry in the dictionary is a tuple fully describing the field: (dtype, + offset[, title]). + If present, the optional title can actually be any object (if it is string + or unicode then it will also be a key in the fields dictionary, otherwise + it's meta-data). + Notice also, that the first two elements of the tuple can be passed directly + as arguments to the getfield and setfield attributes of an ndarray. + If field names are not specified in a constructor, they default to 'f0', + 'f2', ..., 'f<n-1>'. + +\end_layout + +\begin_layout Description +names +\begin_inset LatexCommand index +name "dtype!attributes!char" + +\end_inset + + An ordered list of field names. + This can be used to walk through all of the named fields in offset order. + Notice that the defined fields do not have to +\begin_inset Quotes eld +\end_inset + +cover +\begin_inset Quotes erd +\end_inset + + the record, but the itemsize of the container data-type object must always + be at least as large as the itemsizes of the data-type objects in the defined + fields. + This attribute is None if there are no fields. +\end_layout + +\begin_layout Description +subdtype +\begin_inset LatexCommand index +name "dtype!attributes!subdtype" + +\end_inset + + Numarray introduced the concept of a fixed-length record having fields + that were themselves arrays of another data-type. + This is supported at a fundamental level in NumPy using this attribute + which maintains the simplicity of defining a field by another data-type + object. + It either returns None or a tuple (base dtype, shape) where shape is a + tuple showing the size of the C-contiguous array and the base dtype object + indicates the data-type in each element of the subarray. + If a field whose dtype object has this attribute is retrieved, then the + extra dimensions implied by the shape are tacked on to the end of the retrieved + array. + +\end_layout + +\begin_layout Description +descr +\begin_inset LatexCommand index +name "dtype!attributes!descr" + +\end_inset + + An array-interface-compliant full description of the data-type. + The format is that required by the 'descr' key in the __array_interface__. +\end_layout + +\begin_layout Description +isbuiltin +\begin_inset LatexCommand index +name "dtype!attributes!isbuiltin" + +\end_inset + + A 1 if self is one of the built-in dtype objects; a 2 if self is a user-defined + dtype object; a 0, otherwise. +\end_layout + +\begin_layout Description +isnative +\begin_inset LatexCommand index +name "dtype!attributes!isnative" + +\end_inset + + True if this data-type object has a byteorder that is native to the platform; + otherwise False. +\end_layout + +\begin_layout Description +hasobject +\begin_inset LatexCommand index +name "dtype!attributes!hasobject" + +\end_inset + + True if self contains reference-counted objects in any of it's fields or + sub data-types. + Recall that what is actually in the ndarray memory representing the Python + object is the memory address of that object (a pointer). + Special handling may be required and this attribute is useful for distinguishin +g data-types that may contain arbitrary Python objects and data-types that + won't. + +\end_layout + +\begin_layout Description +flags +\begin_inset LatexCommand index +name "dtype!attributes!flags" + +\end_inset + + Bit-flags for the data-type describing how the data-type will be interpreted. + Bit-masks are in numpy.core.multiarray as the constants ITEM_HASOBJECT, LIST_PICK +LE, ITEM_IS_POINTER, NEEDS_INIT, NEEDS_PYAPI, USE_GETITEM, USE_SETITEM. + A full explanation of these flags is in the second part of this book. + These flags are largely useful for user-defined data-types. + +\begin_inset LatexCommand index +name "dtype!attributes|)" + +\end_inset + + +\end_layout + +\begin_layout Section +Construction +\end_layout + +\begin_layout Description +dtype (obj, align=0, copy=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset LatexCommand index +name "dtype!construction|(" + +\end_inset + +Return a new data-type object from obj. + The keyword argument, align, can only be nonzero if obj is a dictionary, + or a comma-separated string. + If it is non-zero in those cases it is used to add padding as needed to + the fields to match what the compiler that compiled NumPy would do to a + similar C-struct. + The copy argument guarantees a new copy of the data-type object, otherwise, + the result may just be a reference to a built-in data-type object. +\end_layout + +\begin_layout Description +\InsetSpace ~ + Objects that can be converted to a data-type object are described in the + following list. + Because every object in this list can be converted to a data-type object + it can also be used whenever a +\family typewriter +dtype +\family default + is requested by a function or method in NumPy. + +\end_layout + +\begin_deeper +\begin_layout Description +dtype +\begin_inset LatexCommand index +name "dtype!construction!from float" + +\end_inset + +Returns itself. +\end_layout + +\begin_layout Description +None +\begin_inset LatexCommand index +name "dtype!construction!from None" + +\end_inset + +Returns the default data-type descriptor object: float. +\end_layout + +\begin_layout Description +type-object +\begin_inset LatexCommand index +name "dtype!construction!from type" + +\end_inset + +Many Python type objects can be converted to data-type objects. +\end_layout + +\begin_deeper +\begin_layout Enumerate +Array-scalar types: The type-objects of the 21 built-in array scalars all + convert to an associated data-type object. + This is true for sub-classes as well. + Not all data-type information can be supplied with a type-object. + Flexible data-types with default itemsizes of 0, for example, require an + itemsize to be useful. +\end_layout + +\begin_deeper +\begin_layout Description +Examples: int32, float64, uint16, complex128 +\end_layout + +\end_deeper +\begin_layout Enumerate +Generic types: The generic hierarchical type objects convert to corresponding + dtype objects according to the associations: (numeric, inexact, floating) + --> float; complexfloating --> cfloat; (integer, signedinteger) --> int_; + unsignedinteger --> uint; character --> string; (generic, flexible) --> + void. + +\end_layout + +\begin_layout Enumerate +Builtin types: Several python types are equivalent to a corresponding array + scalar when used to generate a dtype object: int --> int_; bool --> bool_; + float --> float_; complex --> cfloat; str --> string; unicode --> unicode_; + buffer --> void; (all others) --> object_. +\end_layout + +\begin_deeper +\begin_layout Description +Examples: object, str, float, int +\end_layout + +\end_deeper +\begin_layout Enumerate +Any type object with the dtype attribute: The attribute will be accessed + and used directly. + The attribute must return something that is convertible into a dtype object. + +\end_layout + +\end_deeper +\begin_layout Description +string +\begin_inset LatexCommand index +name "dtype!construction!from string" + +\end_inset + +Several kinds of strings can be converted. + Recognized strings can be pre-pended with '>', or '<', to specify the byteorder. +\end_layout + +\begin_deeper +\begin_layout Enumerate +One-character strings: Each built-in data-type has a character code (the + updated Numeric typecodes), that uniquely identifies it. + +\end_layout + +\begin_deeper +\begin_layout Description +Examples: 'b', 'H', 'f', 'd', 'F', 'D', Float64, Int32, UInt16 +\end_layout + +\end_deeper +\begin_layout Enumerate +Array-protocol type strings: The first character specifies the kind of data + and the remaining characters specify how many bytes of data. + The supported kinds are 'b' --> Boolean, 'i' --> (signed) integer, 'u' + --> unsigned integer, 'f' --> floating-point, 'c' --> complex-floating + point, 'S', 'a' --> string, 'U' --> unicode, 'V' --> anything (void). + +\end_layout + +\begin_deeper +\begin_layout Description +Examples: 'i4', 'f8', 'c16', 'b1', 'S10', 'a25' +\end_layout + +\end_deeper +\begin_layout Enumerate +Comma-separated field formats: numarray introduced a short-hand notation + for specifying the format of a record as a comma-separated string of basic + formats. + A basic format in this context is an optional shape specifier followed + by an array-protocol type string. + Parenthesis are required on the shape if it is greater than 1-d. + NumPy allows a modification on the format in that any string that can uniquely + identify the type can be used to specify the data-type in a field. + This data-type defines fields named 'f0', 'f2', ..., 'f<N-1>' where N (>1) + is the number of comma-separated basic formats in the string. + If the optional shape specifier is provided, then the data-type for the + corresponding field contains a subdtype attribute providing the shape. + +\end_layout + +\begin_deeper +\begin_layout Description +Examples: +\begin_inset Quotes eld +\end_inset + +i4, (2,3)f8, f4 +\begin_inset Quotes erd +\end_inset + +; +\begin_inset Quotes eld +\end_inset + +a3, 3u8, (3,4)a10 +\begin_inset Quotes erd +\end_inset + + +\end_layout + +\end_deeper +\begin_layout Enumerate +Any string in NumPy.sctypeDict.keys(): +\end_layout + +\begin_deeper +\begin_layout Description +Examples: 'uint32', 'Int16', 'Uint64', 'Float64', 'Complex64' +\end_layout + +\end_deeper +\end_deeper +\begin_layout Description +tuple +\begin_inset LatexCommand index +name "dtype!construction!from tuple" + +\end_inset + +Three kinds of tuples each of length 2 can be converted into a data-type + object: +\end_layout + +\begin_deeper +\begin_layout Enumerate +(flexible dtype, itemsize): The first argument must be an object that is + converted to a flexible data-type object (one whose element size is 0), + the second argument is an integer providing the desired itemsize. +\end_layout + +\begin_deeper +\begin_layout Description +Examples: (void, 10); (str, 35), ('U', 10) +\end_layout + +\end_deeper +\begin_layout Enumerate +(fixed dtype, shape): The first argument is any object that can be converted + into a fixed-size data-type object. + The second argument is the desired shape of this type. + If the shape parameter is 1, then the data-type object is equivalent to + fixed dtype. +\end_layout + +\begin_deeper +\begin_layout Description +Examples: (int32, (2,5)); ('S10', 1)=='S10'; ('i4, (2,3)f8, f4', (2,3)) +\end_layout + +\end_deeper +\begin_layout Enumerate +(base dtype, new dtype): Both arguments must be convertible to data-type + objects in this case. + The base dtype is the data-type object that the new data-type builds on. + This is how you could assign named fields to any built-in data-type object. + +\end_layout + +\begin_deeper +\begin_layout Description +Examples: (int32, {'real':(int16,0), 'imag':(int16,2)}); (int32, (int8, + 4)); +\newline +('i4', [('r','u1'),('g','u1'),('b','u1'),('a','u1')]) +\end_layout + +\end_deeper +\end_deeper +\begin_layout Description +list +\begin_inset LatexCommand index +name "dtype!construction!from list" + +\end_inset + +(array description interface): This style is more fully described at +\begin_inset LatexCommand url +name "this site" +target "http://numpy.scipy.org/array_interface.html" + +\end_inset + +. + It consists of a list of fields where each field is described by a tuple + of length 2 or 3. + The first element of the tuple is the field name (if this is '' then a + standard field name, 'f#', is assigned). + The field name may also be a 2-tuple of strings where the first string + is either a +\begin_inset Quotes eld +\end_inset + +title +\begin_inset Quotes erd +\end_inset + + (which may be any string or unicode string) or meta-data for the field + which can be any object, and the second string is the +\begin_inset Quotes eld +\end_inset + +name +\begin_inset Quotes erd +\end_inset + + which must be a valid Python identifier. + The second element of the tuple can be anything that can be interpreted + as a data-type. + The optional third element of the tuple contains the shape if this field + represents an array of the data-type in the second element. + This style does not accept align=1 as it is assumed that all of the memory + is accounted for by the array interface description. + See the web-page for more examples. + Note that a 3-tuple with a third argument equal to 1 is equivalent to a + 2-tuple. +\end_layout + +\begin_layout Description +Examples: [('big','>i4'), ('little','<i4')]; [('R','u1'), ('G','u1'), ('B','u1') +, ('A','u1')] +\end_layout + +\begin_layout Description +dictionary +\begin_inset LatexCommand index +name "dtype!construction!from dict" + +\end_inset + +There are two dictionary styles. + The first is a standard dictionary format while the second accepted format + allows the fields attribute of dtype objects to be interpreted as a data-type. + +\end_layout + +\begin_deeper +\begin_layout Enumerate +names and formats: This style has two required and two optional keys. + The 'names' and 'formats' keys are required. + Their respective values are equal-length lists with the field names and + the field formats. + The field names must be strings and the field formats can be any object + accepted by dtypedescr constructor. + The optional keys in the dictionary are 'offsets' and 'titles' and their + values must each be lists of the same length as the 'names' and 'formats' + lists. + The 'offsets' value is a list of integer offsets for each field, while + the 'titles' value is a list of titles for each field (None can be used + if no title is desired for that field). + The titles can be any string or unicode object and will add another entry + to the fields dictionary keyed by the title and referencing the same field + tuple which will contain the title as an additional tuple member. + +\end_layout + +\begin_deeper +\begin_layout Description +Examples: {'names': ['r','g','b','a'], 'formats': [uint8, uint8, uint8, + uint8]}; {'names':['r','b'], 'formats': ['u1', 'u1'], 'offsets': [0, 2], + 'titles': ['Red pixel', 'Blue pixel']} +\end_layout + +\end_deeper +\begin_layout Enumerate +data-type object fields: This style is patterned after the format of the + fields dictionary in a data-type object. + It contains string or unicode keys that refer to (data-type, offset) or + (data-type, offset, title) tuples. + +\end_layout + +\begin_deeper +\begin_layout Description +Examples: {'col1': ('S10', 0), 'col2': (float32, 10), 'col3': (int, 14)} +\begin_inset LatexCommand index +name "dtype!construction|)" + +\end_inset + + +\end_layout + +\end_deeper +\end_deeper +\end_deeper +\begin_layout Section +Methods +\begin_inset LatexCommand index +name "dtype!methods|(" + +\end_inset + + +\end_layout + +\begin_layout Description +newbyteorder +\begin_inset LatexCommand index +name "dtype!methods!newbyteorder" + +\end_inset + +(<'swap'>) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct a new copy of self with its byteorder changed according to the + optional argument. + All changes are also propagated to the data-type objects of all fields + and sub-arrays. + If a byteorder of '|' (meaning ignore) is encountered it is left unchanged. + The default behavior is to swap the byteorder. + Other possible arguments are 'big' ('>'), 'little' ('<'), and 'native' + ('=') which recursively forces the byteorder of self (and it's field data-type + objects and any sub-arrays) to the corresponding byteorder. + +\end_layout + +\begin_layout Description +__reduce__ +\begin_inset LatexCommand index +name "dtype!methods!\\_\\_reduce\\_\\_" + +\end_inset + + () +\end_layout + +\begin_layout Description +__setstate__ +\begin_inset LatexCommand index +name "dtype!methods!\\_\\_setstate\\_\\_" + +\end_inset + + (state) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Data-type objects can be pickled because of these two methods. + The __reduce__() method returns a 3-tuple consisting of (callable object, + args, state), where the callable object is numpy.core.multiarray.dtype and + args is (typestring, 0, 1) unless the data-type inherits from void (or + is user-defined) in which case args is (typeobj, 0, 1). + The state is an 8-tuple with (version, endian, self.subdtype, self.names, + self.fields, self.itemsize, self.alignment, self.flags). + The self.itemsize and self.alignment entries are both -1 if the data-type + object is built-in and not flexible (because they are fixed on creation). + The setstate method takes the saved state and updates the date-type +\begin_inset LatexCommand index +name "dtype!methods|)" + +\end_inset + +object. +\begin_inset LatexCommand index +name "dtype|)" + +\end_inset + + +\end_layout + +\begin_layout Chapter +Standard Classes +\end_layout + +\begin_layout Quotation +To generalize is to be an idiot. + +\end_layout + +\begin_layout Right Address +--- +\emph on +William Blake +\end_layout + +\begin_layout Quotation +Not everything that can be counted counts, and not everything that counts + can be counted. +\end_layout + +\begin_layout Right Address +--- +\emph on +Albert Einstein +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "ndarray!subtyping|(" + +\end_inset + +The ndarray in NumPy is a +\begin_inset Quotes eld +\end_inset + +new-style +\begin_inset Quotes erd +\end_inset + + Python built-in-type. + Therefore, it can be inherited from (in Python or in C) if desired. + Therefore, it can form a foundation for many useful classes. + Often whether to sub-class the array object or to simply use the core array + component as an internal part of a new class is a difficult decision, and + can be simply a matter of choice. + NumPy has several tools for simplifying how your new object interacts with + other array objects, and so the choice may not be significant in the end. + One way to simplify the question is by asking yourself if the object you + are interested can be replaced as a single array or does it really require + two or more arrays at it's core. + For example, in the standard NumPy distribution, the matrix and records + classes inherit from the ndarray, while masked arrays use two ndarrays + as objects of its internal structure. +\end_layout + +\begin_layout Standard +Note that asarray(a) always returns the base-class ndarray. + If you are confident that your use of the array object can handle any subclass + of an ndarray, then asanyarray(a) can be used to allow subclasses to propagate + more cleanly through your subroutine. + In principal a subclass could redefine any aspect of the array and therefore, + under strict guidelines, asanyarray(a) would rarely be useful. + However, most subclasses of the arrayobject will not redefine certain aspects + of the array object such as the buffer interface, or the attributes of + the array. + One of important example, however, of why your subroutine may not be able + to handle an arbitrary subclass of an array is that matrices redefine the + '*' operator to be matrix-multiplication, rather than element-by-element + multiplication. +\end_layout + +\begin_layout Section +Special attributes and methods recognized by NumPy +\begin_inset LatexCommand index +name "ndarray!attributes!recognized by|(" + +\end_inset + + +\end_layout + +\begin_layout Description +__array_finalize__ (obj) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This method is called whenever the system internally allocates a new array + from obj, where obj is a subclass (subtype) of the (big)ndarray. + It can be used to change attributes of self after construction (so as to + ensure a 2-d matrix for example), or to update meta-information from the + +\begin_inset Quotes eld +\end_inset + +parent. +\begin_inset Quotes erd +\end_inset + + Subclasses inherit a default implementation of this method that does nothing. +\end_layout + +\begin_layout Description +__array_wrap__ (array) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This method should return an instance of the class from the ndarray object + passed in. + For example, this is called after every ufunc for the object with the highest + __array_priority__. + The ufunc-computed array object is passed in and whatever is returned is + passed to the user. + Subclasses inherit a default implementation of this method. +\end_layout + +\begin_layout Description +__array__ (dtype <None>) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This method is called to obtain an ndarray object when needed. + You should always guarantee this returns an actual ndarray object. + Subclasses inherit a default implementation of this method. + +\end_layout + +\begin_layout Description +__array_priority__ +\end_layout + +\begin_layout Description +\InsetSpace ~ + The value of this attribute is used to determine what type of object to + return in situations where there is more than one possibility for the Python + type of the returned object. + Subclasses inherit a default value of 1.0 for this attribute. +\begin_inset LatexCommand index +name "ndarray!attributes!recognized by|)" + +\end_inset + + +\begin_inset LatexCommand index +name "ndarray!subtyping|)" + +\end_inset + + +\end_layout + +\begin_layout Section +Matrix Objects +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "matrix|(" + +\end_inset + +Matrix objects inherit from the ndarray and therefore, they have the same + attributes and methods of ndarrays. + There are six important differences of matrix objects, however that may + lead to unexpected results when you use matrices but expect them to act + like arrays: +\end_layout + +\begin_layout Enumerate +Matrix objects can be created using a string notation to allow Matlab-style + syntax where spaces separate columns and semicolons (';') separate rows. + +\end_layout + +\begin_layout Enumerate +Matrix objects are always two-dimensional. + This has far-reaching implications, in that m.ravel() is still two-dimensional + (with a 1 in the first dimension) and item selection returns two-dimensional + objects so that sequence behavior is fundamentally different than arrays. +\end_layout + +\begin_layout Enumerate +Matrix objects over-ride multiplication to be matrix-multiplication. + +\series bold +Make sure you understand this for functions that you may want to receive + matrices. + Especially in light of the fact that asanyarray(m) returns a matrix when + m is a matrix. +\end_layout + +\begin_layout Enumerate +Matrix objects over-ride power to be matrix raised to a power. + The same warning about using power inside a function that uses asanyarray(...) + to get an array object holds for this fact. + +\end_layout + +\begin_layout Enumerate +The default __array_priority__ of matrix objects is 10.0, and therefore mixed + operations with ndarrays always produce matrices. + +\end_layout + +\begin_layout Enumerate +Matrices have special attributes which make calculations easier. + These are +\end_layout + +\begin_deeper +\begin_layout Enumerate +.T --- return the transpose of self +\end_layout + +\begin_layout Enumerate +.H --- return the conjugate transpose of self +\end_layout + +\begin_layout Enumerate +.I --- return the inverse of self +\end_layout + +\begin_layout Enumerate +.A --- return a view of the data of self as a 2d array (no copy is done). +\end_layout + +\end_deeper +\begin_layout Warning +Matrix objects over-ride multiplication, '*', and power, '**', to be matrix-mult +iplication and matrix power, respectively. + If your subroutine can accept sub-classes and you do not convert to base-class + arrays, then you must use the ufuncs multiply and power to be sure that + you are performing the correct operation for all inputs. + +\end_layout + +\begin_layout Standard +The matrix class is a Python subclass of the ndarray and can be used as + a reference for how to construct your own subclass of the ndarray. + Matrices can be created from other matrices, strings, and anything else + that can be converted to an +\family typewriter +ndarray +\family default +. + The name +\begin_inset Quotes eld +\end_inset + +mat +\begin_inset Quotes erd +\end_inset + + is an alias for +\begin_inset Quotes eld +\end_inset + +matrix +\begin_inset Quotes erd +\end_inset + + in NumPy. +\end_layout + +\begin_layout Description +Example\InsetSpace ~ +1: Matrix creation from a string +\end_layout + +\begin_layout MyCode +>>> a=mat('1 2 3; 4 5 3') +\newline +>>> print (a*a.T).I +\newline +[[ 0.2924 -0.1345] +\newline + [-0.1345 0.0819]] +\end_layout + +\begin_layout Description +Example\InsetSpace ~ +2: Matrix creation from nested sequence +\end_layout + +\begin_layout MyCode +>>> mat([[1,5,10],[1.0,3,4j]]) +\newline +matrix([[ 1.+0.j, 5.+0.j, 10.+0.j], +\newline + [ + 1.+0.j, 3.+0.j, 0.+4.j]]) +\end_layout + +\begin_layout Description +Example\InsetSpace ~ +3: Matrix creation from an array +\end_layout + +\begin_layout MyCode +>>> mat(random.rand(3,3)).T +\newline +matrix([[ 0.7699, 0.7922, 0.3294], +\newline + [ 0.2792, + 0.0101, 0.9219], +\newline + [ 0.3398, 0.7571, 0.8197]]) +\end_layout + +\begin_layout Description +matrix (data, dtype=None, copy=True) +\end_layout + +\begin_layout Description +\InsetSpace ~ + The sequence to convert to a matrix is passed in as data. + If dtype is None, then the data-type is determined from the data. + If copy is True, then a copy of the data is made, otherwise, the same data + buffer is used. + If no buffer can be found for data, then a copy is also made. + Note: The matrix object is actually a class and so using this syntax calls + matrix.__new__(matrix, data, dtype, copy) which is what happens whenever + you +\begin_inset Quotes eld +\end_inset + +call +\begin_inset Quotes erd +\end_inset + + any class object as a function. +\end_layout + +\begin_layout Description +mat +\end_layout + +\begin_layout Description +\InsetSpace ~ + Just another name for matrix. +\end_layout + +\begin_layout Description +asmatrix (data, dtype=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns the data without copying. + Equivalent to matrix(data, dtype, copy=False). +\end_layout + +\begin_layout Description +bmat (obj, ldict=None, gdict=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Build a matrix object from a string, nested sequence or an array. + This command lets you build up matrices from other other objects. + The ldict and gdict parameters are local and module (global) dictionaries + that are only used when obj is a string. + If they are not provided, then the local and module dictionaries present + when bmat is called are used. +\begin_inset LatexCommand index +name "matrix|)" + +\end_inset + + +\end_layout + +\begin_layout MyCode +>>> A = mat('2 2; 2 2'); B=mat('1 1; 1 1'); +\newline +>>> print bmat('A B; B A') +\newline +[[2 + 2 1 1] +\newline + [2 2 1 1] +\newline + [1 1 2 2] +\newline + [1 1 2 2]] +\end_layout + +\begin_layout Section +Memory-mapped-file arrays +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "memory maps|(" + +\end_inset + +Memory-mapped files are useful for reading and/or modifying small segments + of a large file with regular layout, without reading the entire file into + memory. + A simple subclass of the ndarray uses a memory-mapped file for the data + buffer of the array. + For small files, the over-head of reading the entire file into memory is + typically not significant, however for large files using memory mapping + can save considerable resources. + +\end_layout + +\begin_layout Note +Memory-mapped arrays use the the Python memory-map object which (prior to + Python 2.5) does not allow files to be larger than a certain size depending + on the platform. + This size is always < 2GB even on 64-bit systems. + +\end_layout + +\begin_layout Standard +The class is called memmap and is available in the NumPy namespace. + The __new__ method of the class has been re-written to have the following + syntax: +\end_layout + +\begin_layout Description +__new__ (cls, filename, dtype=uint8, mode='r+', offset=0, shape=None, order=0) + +\end_layout + +\begin_deeper +\begin_layout Description +filename The file name to be used as the array data buffer +\end_layout + +\begin_layout Description +dtype A data-type object used to interpret the file contents (including + byteorder). +\end_layout + +\begin_layout Description +mode The mode to open the file in. + Valid modes are 'readonly' or 'r', 'copyonwrite' or 'c', 'readwrite' or + 'r+', and 'write' or 'w+'. + This mode determines the WRITEABLE flag of the returned array. +\end_layout + +\begin_layout Description +offset An offset into the file to start the array data. +\end_layout + +\begin_layout Description +shape The desired shape of the array. + If this is None, then the returned array will be 1-d with the number of + elements determined by the file size and data type. +\end_layout + +\begin_layout Description +order Either 'C' or 'Fortran' to indicate the order that an N-D array should + be interpreted. + This only has an effect if the shape is greater than 2-D. +\end_layout + +\end_deeper +\begin_layout Standard +Memory-mapped-file arrays have one additional method (besides those they + inherit from the ndarray): self. +\series bold +sync +\series default +() which must be called manually by the user to ensure that any changes + to the array actually get written to disk. + +\end_layout + +\begin_layout Description +Example: +\end_layout + +\begin_layout MyCode +>>> a = memmap('newfile.dat', dtype=float, mode='w+', shape=1000) +\newline +>>> a[10] + = 10.0 +\newline +>>> a[30] = 30.0 +\newline +>>> del a +\newline +>>> b = fromfile('newfile.dat', dtype=float) +\newline +>>> + print b[10], b[30] +\newline +10.0 30.0 +\newline +>>> a = memmap('newfile.dat', dtype=float) +\newline +>>> print + a[10], a[30] +\newline +10.0 30.0 +\end_layout + +\begin_layout Section +Character arrays (numpy.char) +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "character arrays|(" + +\end_inset + +These are enhanced arrays of either string type or unicode_ type. + These arrays inherit from the ndarray, but specially-define the operations + +, *, and % on a (broadcasting) element-by-element basis. + These operations are not available on the standard ndarray of character + type. + In addition, the chararray has all of the standard string (and unicode) + methods, executing them on an element-by-element basis. + Perhaps the easiest way to create a chararray is to use self.view(chararray) + where self is an ndarray of string or unicode data-type. + However, a chararray can also be created using the numpy.chararray.__new__ + method. +\end_layout + +\begin_layout Description +__new__ (shape, itemsize, unicode=False, buffer=None, offset=0, strides=None, + order=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Create a new character array of string or unicode type and itemsize characters. + Create the array using buffer (with offset and strides) if it is not None. + If buffer is None, then construct a new array with strides in Fortran order + if len(shape) >=2 and order is 'Fortran' (otherwise the strides will be + in 'C' order). + +\end_layout + +\begin_layout Description +char.array (obj, itemsize=None, copy=True, unicode=False, order=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Create a chararray from the nested sequence obj. + If obj is an ndarray of data-type unicode_ or string, then its data is + wrapped by the chararray object and converted to the desired type (string + or unicode). + +\end_layout + +\begin_layout Standard +Another difference with the standard ndarray of string data-type is that + the chararray inherits the feature introduced by Numarray that white-space + at the end of any element in the array will be ignored on item retrieval + and comparison operations. + +\begin_inset LatexCommand index +name "character arrays|)" + +\end_inset + + +\end_layout + +\begin_layout Section +Record Arrays (numpy.rec) +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "record arrays|(" + +\end_inset + +NumPy provides a powerful data-type object that allows any ndarray to hold + (arbitrarily nested) record-like items with named-field access to the sub-types. + This is possible without any special record-array sub-class. + Consider the example where each item in the array is a simple record of + name, age, and weight. + You could specify a data-type for an array of such records using the following + data-type object: +\end_layout + +\begin_layout MyCode +>>> desc = dtype({'names': ['name', 'age', 'weight'], 'formats': ['S30', + 'i2', 'f4']}) +\newline +>>> a = array([('Bill',31,260.0),('Fred', 15, 145.0)],dtype=desc) +\newline +>>> + print a[0] +\newline +('Bill', 31, 260.0) +\newline +>>> print a['name'] +\newline +['Bill' 'Fred'] +\newline +>>> print + a['age'] +\newline +[31 15] +\newline +>>> print a['weight'] +\newline +[ 260. + 145.] +\newline +>>> print a[0]['name'], a[0]['age'], a[0]['weight'] +\newline +Bill 31 260.0 +\newline +>>> + print len(a[0]) +\newline +3 +\end_layout + +\begin_layout Standard +This example shows how a general array can be assigned named fields and + how these fields can be accessed. + In this case the a[0] object is an array-scalar of type void. + The void array-scalars are unique in that they contain references to (rather + than copies of) the underlying data whenever fields are defined. + Therefore, the record data can be modified in place: +\end_layout + +\begin_layout MyCode +>>> a[0]['name'] = 'George'; print a +\newline +[('George', 31, 260.0) ('Fred', 15, 145.0)] +\end_layout + +\begin_layout Standard +The recarray subclass and its accompanying record item add the ability to + access named fields through attribute lookup. + A quick way to get a record array is to use the view method of the ndarray. + +\end_layout + +\begin_layout MyCode +>>> r = a.view(recarray) +\newline +>>> print r.name +\newline +['George' 'Fred'] +\end_layout + +\begin_layout Standard +The numpy.core.records module (aliased to nump.rec when numpy is imported) + contains additional convenience functions for constructing record arrays. + All of the following constructors have two different mechanisms for specifying + the data-type. + Either the dtype= argument can be specified or the argument formats= can + be specified along with an optional set of four additional keyword arguments + (names=, titles=, aligned= and byteorder=). + In some cases neither dtype= nor formats= is required as the data-type + can be inferred from the object passed in as the first argument. +\end_layout + +\begin_layout Standard +The five argument method for specifying a data-type constructs a data-type + object internally. + The comma-separated formats string is used to specify the fields. + The names (and optional titles) of the fields can be specified by a comma-separ +ated string of names (or titles). + The aligned flag determines whether the fields are packed (False) or padded + (True) according to the platform compiler rules. + The byteorder argument allows specification of the byte-order for all of + the fields at once (they can also be specified individually in the formats + string). + The default byte-order is native to the platform. + +\end_layout + +\begin_layout Description +array (obj, dtype=None, shape=None, offset=0, strides=None, formats=None, + names=None, titles=None, aligned=False, byteorder=None, copy=True) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A general-purpose record array constructor that is a front-end to the other + constructors If obj is None, then call the +\series bold +recarray +\series default + constructor. + If obj is a string, then call the +\series bold +fromstring +\series default + constructor. + If obj is a list or a tuple then if the first object is an ndarray, then + call +\series bold +fromarrays +\series default +, otherwise call +\series bold +fromrecords +\series default +. + If obj is a recarray, then make a copy of the data in recarray (if copy + is True) and use the new formats, names, and titles. + If obj is a file then call +\series bold +fromfile +\series default +. + Finally, if obj is an ndarray, then return obj.view(recarray) and make a + copy of the data if copy is True. + Otherwise, call the __array_interface__ attribute and try to convert using + the information returned from that object. + Either dtype or the formats argument must be given if obj is None, a string, + or a file, and if obj is None so the recarray constructor will be called, + then shape must be given as well. + +\end_layout + +\begin_layout Description +fromarrays (array_list, dtype=None, shape=None, formats=None, names=None, + titles=None, aligned=False, byteorder=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Create a record array from a (flat) list of ndarrays. + The data from the arrays will be copied into the fields. + If formats is None and dtype is None, then the formats will be determined + from the arrays. + The names and titles arguments can be a list, tuple or a (comma-separated) + string specifying the names and/or titles to use for the fields. + If aligned is True, then the structure will be padded according to the + rules of the compiler that NumPy was compiled with. +\end_layout + +\begin_layout MyCode +>>> x1 = array([21,32,14]) +\newline +>>> x2 = array(['my','first','name']) +\newline +>>> x3 = + array([3.1, 4.5, 6.2]) +\newline +>>> r = rec.fromarrays([x1,x2,x3], names='id, word, number') +\newline +> +>> print r[1] +\newline +(32, 'first', 4.5) +\newline +>>> r.number +\newline +array([ 3.1, 4.5, 6.2]) +\newline +>>> r.word +\newline +chararra +y(['my', 'first', 'name'], +\newline + dtype='|S5') +\end_layout + +\begin_layout Description +fromrecords (rec_list, dtype=None, shape=None, formats=None, names=None, + titles=None, aligned=False, byteorder=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct a record array from a (nested) sequence of tuples that define + the records. + If formats are not given, they are deduced from the records, but this is + slower. + The field names and field titles can be specified. + If aligned is non-zero, then the record array is padded so that fields + are aligned as the platform compiler would do if the fields represented + a C-struct. +\end_layout + +\begin_layout MyCode +>>> recs = [('Bill', 31, 260.0), ('Fred', 15, 145.0)] +\newline +>>> r = rec.fromrecords(recs, + formats='S30,i2,f4', names='name, age, weight') +\newline +>>> print r.name +\newline +['Bill' 'Fred'] +\newline +>> +> print r.age +\newline +[31 15] +\newline +>>> print r.weight +\newline +[ 260. + 145.] +\end_layout + +\begin_layout Description +fromstring (datastring, dtype=None, shape=None, offset=0, formats=None, + names=None, titles=None, aligned=0, byteorder=None): +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct a record array using the provided datastring (at the given offset) + as the memory. + The record array will be read-only. + The byteorder argument may be used to specify the byteorder of all of the + fields at the same time. + A True aligned argument causes padding fields to be added as needed so + that the fields are aligned on boundaries determined by the compiler. + The shape of the returned array can also be specified. + +\end_layout + +\begin_layout Description +fromfile (fd, dtype=None, shape=None, offset=0, formats=None, names=None, + titles=None, aligned=False, byteorder=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct a record array from the (binary) data in the given file object, + fd. + This object may be an open file or a string to indicate a file to read + from. + If offset is non-zero, then data is read from the file at offset bytes + from the current position. + +\end_layout + +\begin_layout Standard +The following classes are also available in the numpy.core (and therefore + the numpy) namespace +\end_layout + +\begin_layout Description +record A subclass of the void array scalar type that allows field access + using attributes. + +\end_layout + +\begin_layout Description +recarray A subclass of the ndarray that allows field access using attributes +\end_layout + +\begin_deeper +\begin_layout Description +__new__ (subtype, shape, formats, names=None, titles=None, buf=None, offset=0, + strides=None, byteorder=None, aligned=0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct an array of the given subtype and shape with data-type (record, + dtype) where dtype is constructed from formats, names, and titles. + If buf is None, then create new memory. + Otherwise, use the memory of buf exposed through the buffer protocol. +\end_layout + +\end_deeper +\begin_layout Description +format_parser A class useful for creating a data-type descriptor from formats, + names, titles, and aligned arguments. + This is used by several of the record array constructors for consistency + in behavior. + +\end_layout + +\begin_deeper +\begin_layout Description +__init__ (self, formats, names, titles, aligned=False, byteorder=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Construct a data-type object from formats, names, titles, aligned, and + byteorder arguments. + Upon completion the constructed data-type object is in self._descr. + +\begin_inset LatexCommand index +name "record arrays|)" + +\end_inset + + +\end_layout + +\end_deeper +\begin_layout Section +Masked Arrays (numpy.ma) +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "masked arrays|(" + +\end_inset + +These are adapted from the masked arrays provided with Numeric. + Masked Arrays do not inherit from the ndarray, they simply use two ndarray + objects in their internal representation. + Fortunately, as I have not used masked arrays in my work, Paul Dubois (the + original author of MA for Numeric) adapted and modified the code for use + by NumPy. + Alexander Belopolsky (Sasha) added additional functions and improvements + +\end_layout + +\begin_layout Standard +Masked arrays are created using the masked array creation function. + +\end_layout + +\begin_layout Description +ma.array (data, dtype=None, copy=True, order='C', mask=ma.nomask, fill_value=None) +\end_layout + +\begin_deeper +\begin_layout Description +data Something that can be converted to an array. + If data is already a masked array, then if mask is ma.nomask, the mask used + be data.mask and the data used data.data. + +\end_layout + +\begin_layout Description +dtype The data-type of the underlying array +\end_layout + +\begin_layout Description +copy If copy is False, then every effort will be made to not copy the data. + +\end_layout + +\begin_layout Description +order Specify whether the array is in 'C', 'Fortran', or 'Any' order +\end_layout + +\begin_layout Description +mask Masked values are excluded from calculations. + If this is ma.nomask, then there are no masked values. + Otherwise, this should be an object that is convertible to an array of + Booleans with the same shape as data. +\end_layout + +\begin_layout Description +fill_value This value is used to fill in masked values when necessary. + The fill_value is not used for computation for functions within the ma + module. +\end_layout + +\end_deeper +\begin_layout Standard +Masked arrays have the same methods and attributes as arrays with the addition + of the mask attribute as well as the +\begin_inset Quotes eld +\end_inset + +hidden +\begin_inset Quotes erd +\end_inset + + attributes ._data and ._mask. + +\begin_inset LatexCommand index +name "masked arrays|)" + +\end_inset + + +\end_layout + +\begin_layout Section +Standard container class +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "user\\_array" + +\end_inset + + +\begin_inset LatexCommand index +name "container class" + +\end_inset + +For backward compatibility and as a standard +\begin_inset Quotes eld +\end_inset + +container +\begin_inset Quotes erd +\end_inset + + class, the UserArray from Numeric has been brought over to NumPy and named + +\series bold +numpy.lib.user_array.container +\series default + The container class is a Python class whose self.array attribute is an ndarray. + Multiple inheritance is probably easier with numpy.lib.user_array.container + than with the ndarray itself and so it is included by default. + It is not documented here beyond mentioning its existence because you are + encouraged to use the ndarray class directly if you can. + +\end_layout + +\begin_layout Section +Array Iterators +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "array iterator" + +\end_inset + +Iterators are a powerful concept for array processing. + Essentially, iterators implement a generalized for-loop. + If myiter is an iterator object, then the Python code +\end_layout + +\begin_layout LyX-Code +for val in myiter: +\end_layout + +\begin_layout LyX-Code + ... +\end_layout + +\begin_layout LyX-Code + some code involving val +\end_layout + +\begin_layout LyX-Code + ... +\end_layout + +\begin_layout Standard +calls val=myiter.next() repeatedly until StopIteration is raised by the iterator. + There are several ways to iterate over an array that may be useful: default + iteration, flat iteration, and +\begin_inset Formula $N$ +\end_inset + +-dimensional enumeration. +\end_layout + +\begin_layout Subsection +Default iteration +\end_layout + +\begin_layout Standard +The default iterator of an ndarray object is the default Python iterator + of a sequence type. + Thus, when the array object itself is used as an iterator. + The default behavior is equivalent to: +\end_layout + +\begin_layout LyX-Code +for i in arr.shape[0]: +\end_layout + +\begin_layout LyX-Code + val = arr[i] +\end_layout + +\begin_layout Standard +This default iterator selects a sub-array of dimension +\begin_inset Formula $N-1$ +\end_inset + + from the array. + This can be a useful construct for defining recursive algorithms. + To loop over the entire array requires +\begin_inset Formula $N$ +\end_inset + + for-loops. + +\end_layout + +\begin_layout MyCode +>>> a = arange(24).reshape(3,2,4)+10 +\newline +>>> for val in a: +\newline +... + print 'item:', val +\newline +item: [[10 11 12 13] +\newline + [14 15 16 17]] +\newline +item: [[18 19 + 20 21] +\newline + [22 23 24 25]] +\newline +item: [[26 27 28 29] +\newline + [30 31 32 33]] +\end_layout + +\begin_layout Subsection +Flat iteration +\end_layout + +\begin_layout Standard +As mentioned previously, the flat attribute of ndarray objects returns an + iterator that will cycle over the entire array in C-style contiguous order. + +\end_layout + +\begin_layout MyCode +>>> for i, val in enumerate(a.flat): +\newline +... + if i%5 == 0: print i, val +\newline +0 10 +\newline +5 15 +\newline +10 20 +\newline +15 25 +\newline +20 30 +\end_layout + +\begin_layout Standard +Here, I've used the built-in enumerate iterator to return the iterator index + as well as the value. +\end_layout + +\begin_layout Subsection +N-dimensional enumeration +\end_layout + +\begin_layout Standard +Sometimes it may be useful to get the N-dimensional index while iterating. + The ndenumerate iterator can achieve this. +\end_layout + +\begin_layout MyCode +>>> for i, val in ndenumerate(a): +\newline +... + if sum(i)%5 == 0: print i, val +\newline +(0, 0, 0) 10 +\newline +(1, 1, 3) 25 +\newline +(2, 0, 3) 29 +\newline +(2, + 1, 2) 32 +\end_layout + +\begin_layout Subsection +Iterator for broadcasting +\end_layout + +\begin_layout Standard +The general concept of broadcasting is also available from Python using + the +\series bold +broadcast +\series default + iterator. + This object takes +\begin_inset Formula $N$ +\end_inset + + objects as inputs and returns an iterator that returns tuples providing + each of the input sequence elements in the broadcasted result. +\end_layout + +\begin_layout MyCode +>>> for val in broadcast([[1,0],[2,3]],[0,1]): +\newline +... + print val +\newline +(1, 0) +\newline +(0, 1) +\newline +(2, 0) +\newline +(3, 1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + The methods and attributes of the broadcast object are: +\end_layout + +\begin_deeper +\begin_layout Description +nd the number of dimensions in the broadcasted result. +\end_layout + +\begin_layout Description +shape the shape of the broadcasted result. +\end_layout + +\begin_layout Description +size the total size of the broadcasted result. +\end_layout + +\begin_layout Description +index the current (flat) index into the broadcasted array +\end_layout + +\begin_layout Description +iters a tuple of (broadcasted) NumPy.flatiter objects, one for each array. +\end_layout + +\begin_layout Description +reset () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Reset the multiter object to the beginning. +\end_layout + +\begin_layout Description +next () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Get the next tuple of objects from the (broadcasted) arrays +\end_layout + +\end_deeper +\begin_layout Chapter +Universal Functions +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand label +name "par:The-Ufunc-Object" + +\end_inset + + +\end_layout + +\begin_layout Quotation +Computers make it easier to do a lot of things, but most of the things they + make it easier to do don't need to be done. +\end_layout + +\begin_layout Right Address +--- +\emph on +Andy Rooney +\end_layout + +\begin_layout Quotation +People think computers will keep them from making mistakes. + They're wrong. + With computers you make mistakes faster. +\end_layout + +\begin_layout Right Address +--- +\emph on +Adam Osborne +\end_layout + +\begin_layout Section +Description +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "ufunc|(" + +\end_inset + +Universal functions are wrappers that provide a common interface to mathematical + functions that operate on scalars, and can be made to operate on arrays + in an element-by-element fashion. + All +\family typewriter +u +\family default +niversal +\family typewriter +func +\family default +tion +\family typewriter +s +\family default + ( +\family typewriter +ufuncs +\family default +) wrap some core function that takes +\begin_inset Formula $n_{i}$ +\end_inset + + (scalar) inputs and produces +\begin_inset Formula $n_{o}$ +\end_inset + + (scalar) outputs. + Typically, this core function is implemented in compiled code but a Python + function can also be wrapped into a universal function using the basic + method +\family typewriter +frompyfunc +\family default + in the umath module. + +\end_layout + +\begin_layout Description +frompyfunc (func, nin, nout) +\begin_inset LatexCommand index +name "frompyfunc" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + This function returns a new universal function wrapping a Python function + func with nin inputs and nout outputs. + The resulting universal function works using Object arrays for both input + and output. + The vectorize class makes use of frompyfunc internally. + You can view the source code using numpy.source(numpy.vectorize). +\end_layout + +\begin_layout Subsection +Broadcasting +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "broadcasting" + +\end_inset + +Each universal function takes array inputs and produces array outputs by + performing the core function element-wise on the inputs. + The standard broadcasting rules are applied so that inputs without exactly + the same shapes can still be usefully operated on. + Broadcasting can be understood by four rules: +\end_layout + +\begin_layout Enumerate +All input arrays with ndim smaller than the input array of largest ndim + have 1's pre-pended to their shapes. +\end_layout + +\begin_layout Enumerate +The size in each dimension of the output shape is the maximum of all the + input shapes in that dimension. +\end_layout + +\begin_layout Enumerate +An input can be used in the calculation if it's shape in a particular dimension + either matches the output shape or has value exactly 1. +\end_layout + +\begin_layout Enumerate +If an input has a dimension size of 1 in its shape, the first data entry + in that dimension will be used for all calculations along that dimension. + In other words, the stepping machinery of the ufunc will simply not step + along that dimension when otherwise needed (the stride will be 0 for that + dimension). + +\end_layout + +\begin_layout Standard +While perhaps a bit difficult to explain, broadcasting can be quite useful + and becomes second nature rather quickly. + Broadcasting is used throughout NumPy to decide how to handle non equally-shape +d arrays. + +\end_layout + +\begin_layout Subsection +Output type determination +\end_layout + +\begin_layout Standard +The output of the ufunc (and its methods) does not have to be an ndarray. + All output arrays will be passed to the __array_wrap__ method of any input + (besides ndarrays, and scalars) that defines it +\series bold +and +\series default + has the highest __array_priority__ of any other input to the universal + function. + The default __array_priority__ of the ndarray is 0.0, and the default __array_pr +iority__ of a subtype is 1.0. + Matrices have __array_priority__ equal to 10.0. + +\end_layout + +\begin_layout Standard +The ufuncs can also all take output arguments. + The output will be cast if necessary to the provided output array. + If a class with an __array__ method is used for the output, results will + be written to the object returned by __array__. + Then, if the class also has an __array_wrap__ method, the returned +\family typewriter +ndarray +\family default + result will be passed to that method just before passing control back to + the caller. + +\end_layout + +\begin_layout Subsection +Use of internal buffers +\end_layout + +\begin_layout Standard +Internally, buffers are used for misaligned data, swapped data, and data + that has to be converted from one data type to another. + The size of the internal buffers is settable on a per-thread basis. + There can be up to +\begin_inset Formula $2\left(n_{i}+n_{o}\right)$ +\end_inset + + buffers of the specified size created to handle the data from all the inputs + and outputs of a ufunc. + The default size of the buffer is 10,000 elements. + Whenever buffer-based calculation would be needed, but all input arrays + are smaller than the buffer size, those misbehaved or incorrect typed arrays + will be copied before the calculation proceeds. + Adjusting the size of the buffer may therefore alter the speed at which + ufunc calculations of various sorts are completed. + A simple interface for setting this variable is accessible using the function + +\end_layout + +\begin_layout Description +setbufsize (size) +\begin_inset LatexCommand index +name "setbufsize" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Set the buffer size to the given number of elements in the current thread. + Return the old buffer size (so that it can be reset later if desired). + +\end_layout + +\begin_layout Subsection +Error handling +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "error handling" + +\end_inset + +Universal functions can trip special floating point status registers in + your hardware (such as divide-by-zero). + If available on your platform, these registers will be regularly checked + during calculation. + The user can determine what should be done if errors are encountered. + Error handling is controlled on a per-thread basis. + Four errors can be individually configured: divide-by-zero, overflow, underflow +, and invalid. + The errors can each be set to ignore, warn, raise, or call. + The easiest way to configure the error mask is using the function +\end_layout + +\begin_layout Description +seterr (all=None, divide=None, over=None, under=None, invalid=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset LatexCommand index +name "seterr" + +\end_inset + +This will set the current thread so that errors can be handled if desired. + If one of the errors is set to 'call', then a function must be provided + using the seterrcall() routine. + If any of the arguments are None, then that error mask will be unchanged. + The return value of this function is a dictionary with the old error conditions. + Thus, you can restore the old condition after you are finished with your + function by calling seterr(**old). + If all is set, then all errors will be set to the specified value. + +\end_layout + +\begin_layout Description +seterrcall (callable) +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset LatexCommand index +name "seterrcall" + +\end_inset + +This sets the function to call when an error is triggered for an error condition + configured with the +\begin_inset Quotes eld +\end_inset + +call +\begin_inset Quotes erd +\end_inset + + handler. + This function should take two arguments: a string showing the type of error + that triggered the call, and an integer showing the state of the floating + point status registers. + Any return value of the call function will be ignored, but errors can be + raised by the function. + Only one error function handler can be specified for all the errors. + The status argument shows which errors were raised. + The return value of this routine is the old callable. + The argument passed in to this function must be any callable object with + the right signature or None. + +\end_layout + +\begin_layout Note +FPE_DIVIDEBYZERO, FPE_OVERFLOW, FPE_UNDERFLOW, and FPE_INVALID, are all + defined constants in NumPy. + The status flag returned for a 'call' error handling type shows which errors + were raised by adding these constants together. +\end_layout + +\begin_layout Subsection +Optional keyword arguments +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "ufunc!keyword arguments" + +\end_inset + +All ufuncs take optional keyword arguments. + These represent rather advanced usage and will likely not be used by most + users. + +\end_layout + +\begin_layout Description +sig= either a data-type, a tuple of data-types, or a special signature string + indicating the input and output types of a ufunc. + This argument allows you to specify a specific signature for a the 1-d + loop to use in the underlying calculation. + If the loop specified does not exist for the ufunc, then a TypeError is + raised. + Normally a suitable loop is found automatically by comparing the input + types with what is available and searching for a loop with data-types to + which all inputs can be cast safely. + This key-word argument lets you by-pass that search and choose a loop you + want. + A list of available signatures is available in the +\series bold +types +\series default + attribute of the ufunc object. + +\end_layout + +\begin_layout Description +extobj= a list of length 1, 2, or 3 specifying the ufunc buffer-size, the + error mode integer, and the error call-back function. + Normally, these values are looked-up in a thread-specific dictionary. + Passing them here bypasses that look-up and uses the low-level specification + provided for the error-mode. + This may be useful as an optimization for calculations requiring lots of + ufuncs on small arrays in a loop. + +\end_layout + +\begin_layout Section +Attributes +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "ufunc!attributes" + +\end_inset + +There are some informational attributes that universal functions possess. + None of the attributes can be set. + +\end_layout + +\begin_layout Description +__doc__ +\end_layout + +\begin_layout Description +\InsetSpace ~ + A docstring for each ufunc. + The first part of the docstring is dynamically generated from the number + of outputs, the name, and the number of inputs. + The second part of the doc string is provided at creation time and stored + with the ufunc. + +\end_layout + +\begin_layout Description +__name__ +\end_layout + +\begin_layout Description +\InsetSpace ~ + The name of this ufunc. +\end_layout + +\begin_layout Description +nin +\end_layout + +\begin_layout Description +\InsetSpace ~ + The number of inputs +\end_layout + +\begin_layout Description +nout +\end_layout + +\begin_layout Description +\InsetSpace ~ + The number of outputs +\end_layout + +\begin_layout Description +nargs +\end_layout + +\begin_layout Description +\InsetSpace ~ + The total number of inputs + outputs +\end_layout + +\begin_layout Description +ntypes +\end_layout + +\begin_layout Description +\InsetSpace ~ + The total number of different types for which this ufunc is defined. +\end_layout + +\begin_layout Description +types +\end_layout + +\begin_layout Description +\InsetSpace ~ + A list of length ntypes containing strings showing the types for which + this ufunc is defined. + Other types may still be used as inputs (and as output arrays), they will + just need casting. + For inputs, standard casting rules will be used to determine which of the + supplied internal functions that will be used (and therefore the default + type of the output). + Results will always be force-cast to any array provided to hold the output. + +\end_layout + +\begin_layout Description +identity +\end_layout + +\begin_layout Description +\InsetSpace ~ + A 1, 0, or None to show the identity for this universal function. + This identity is used for reduction on zero-sized arrays (arrays with a + shape that includes a 0). +\end_layout + +\begin_layout Standard +\begin_inset Float table +wide false +sideways false +status open + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Universal function (ufunc) attributes. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align center +\begin_inset Tabular +<lyxtabular version="3" rows="9" columns="2"> +<features> +<column alignment="center" valignment="top" leftline="true" width="0"> +<column alignment="center" valignment="top" leftline="true" rightline="true" width="0"> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Name +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Description +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +__doc__ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Dynamic docstring. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +__name__ +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Name of ufunc +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +nin +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Number of input arguments +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +nout +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Number of output arguments +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +nargs +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Total number of arguments +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +ntypes +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Number of defined inner loops. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +types +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +List showing types for which inner loop is defined. +\end_layout + +\end_inset +</cell> +</row> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +identity +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Identity for this ufunc. +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Casting Rules +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "ufunc!casting rules" + +\end_inset + +At the core of every ufunc is a one-dimensional strided loop that implements + the actual function for a specific type combination. + When a ufunc is created, it is given a static list of inner loops and a + corresponding list of type signatures over which the ufunc operates. + The ufunc machinery uses this list to determine which inner loop to use + for a particular case. + You can inspect the +\family typewriter +.types +\family default + attribute for a particular ufunc to see which type combinations have a + defined inner loop and which output type they produce (the character codes + are used in that output for brevity). + +\end_layout + +\begin_layout Standard +Casting must be done on one or more of the inputs whenever the ufunc does + not have a core loop implementation for the input types provided. + If an implementation for the input types cannot be found, then the algorithm + searches for an implementation with a type signature to which all of the + inputs can be cast +\begin_inset Quotes eld +\end_inset + +safely. +\begin_inset Quotes erd +\end_inset + + The first one it finds in its internal list of loops is selected and performed + with types cast. + Recall that internal copies during ufuncs (even for casting) are limited + to the size of an internal buffer which is user settable. + +\end_layout + +\begin_layout Note +Universal functions in NumPy are flexible enough to have mixed type signatures. + Thus, for example, a universal function could be defined that works with + floating point and integer values. + See ldexp for an example. +\end_layout + +\begin_layout Standard +By the above description, the casting rules are essentially implemented + by the question of when a data type can be cast +\begin_inset Quotes eld +\end_inset + +safely +\begin_inset Quotes erd +\end_inset + + to another data type. + The answer to this question can be determined in Python with a function + call: can_cast (fromtype, totype). + Figure shows the results of this call for my 32-bit system on the 21 internally + supported types. + You can generate this table for your system with code shown in that Figure. +\end_layout + +\begin_layout Standard +\begin_inset Float figure +wide false +sideways false +status open + +\begin_layout MyCode +>>> def print_table(ntypes): +\newline +... + print 'X', +\newline +... + for char in ntypes: print char, +\newline +... + print +\newline +... + for row in ntypes: +\newline +... + print row, +\newline +... + for col in ntypes: +\newline +... + print int(can_cast(row, col)), +\newline +... + print +\newline +>>> print_table(typecodes['All']) +\newline +X ? b h i l q p B H I L Q + P f d g F D G S U V O +\newline +? 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +\newline +b 0 + 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 +\newline +h 0 0 1 1 1 1 1 0 0 0 0 0 0 + 1 1 1 1 1 1 1 1 1 1 +\newline +i 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 +\newline +l 0 0 + 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 +\newline +q 0 0 0 0 0 1 0 0 0 0 0 0 0 0 + 1 1 0 1 1 1 1 1 1 +\newline +p 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 +\newline +B 0 0 1 + 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +\newline +H 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 + 1 1 1 1 1 1 1 1 +\newline +I 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 +\newline +L 0 0 0 0 + 0 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 +\newline +Q 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 + 0 1 1 1 1 1 1 +\newline +P 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 +\newline +f 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 +\newline +d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 + 1 1 1 1 1 1 +\newline +g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1 +\newline +F 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 +\newline +D 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 + 1 1 1 1 1 +\newline +G 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 +\newline +S 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 +\newline +U 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 1 1 +\newline +V 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 +\newline +O 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 +\end_layout + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +Code segment showing the can cast safely table for a 32-bit system. +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +You should note that, while included in the table for completeness, the + 'S', 'U', and 'V' types cannot be operated on by ufuncs. + Also, note that on a 64-bit system the integer types may have different + sizes resulting in a slightly altered table. + +\end_layout + +\begin_layout Standard +Mixed scalar-array operations use a different set of casting rules that + ensure that a scalar cannot upcast an array unless the scalar is of a fundament +ally different kind of data ( +\emph on +i.e. + +\emph default + under a different hierachy in the data type hierarchy) then the array. + This rule enables you to use scalar constants in your code (which as Python + types are interpreted accordingly in ufuncs) without worrying about whether + the precision of the scalar constant will cause upcasting on your large + (small precision) array. + +\end_layout + +\begin_layout Section +Methods +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "ufunc!methods|(" + +\end_inset + +All ufuncs have 4 methods. + However, these methods only make sense on ufuncs that take two input arguments + and return one output argument. + Attempting to call these methods on other ufuncs will cause a +\family typewriter +ValueError +\family default +. + The reduce-like methods all take an axis keyword and a dtype keyword, and + the arrays must all have dimension >= 1. + The +\emph on +axis +\emph default + keyword specifies which axis of the array the reduction will take place + over and may be negative, but must be an integer. + The +\emph on +dtype +\emph default + keyword allows you to manage a very common problem that arises when naively + using <op>.reduce. + Sometimes you may have an array of a certain data type and wish to add + up all of its elements, but the result does not fit into the data type + of the array. + This commonly happens if you have an array of single-byte integers. + The dtype keyword allows you to alter the data type that the reduction + takes place over (and therefore the type of the output). + Thus, you can ensure that the output is a data type with large-enough precision + to handle your output. + The responsibility of altering the reduce type is mostly up to you. + There is one exception: if no dtype is given for a reduction on the +\begin_inset Quotes eld +\end_inset + +add +\begin_inset Quotes erd +\end_inset + + or +\begin_inset Quotes eld +\end_inset + +multiply +\begin_inset Quotes erd +\end_inset + + operations, then if the input type is an integer (or boolean) data-type + and smaller than the size of the int_ data type, it will be internally + upcast to the int_ (or uint) data type. + +\end_layout + +\begin_layout Warning +A reduce-like operation on an array with a data type that has range +\begin_inset Quotes eld +\end_inset + +too small +\begin_inset Quotes erd +\end_inset + + to handle the result will silently wrap. + You should use dtype to increase the data type over which reduction takes + place. +\end_layout + +\begin_layout Subsection +Reduce +\end_layout + +\begin_layout Description +<op>.reduce (array=, axis=0, dtype=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset LatexCommand index +name "ufunc!methods!reduce" + +\end_inset + +For each one-dimensional sequence along the +\emph on +axis +\emph default + dimension of the array, return a single number resulting from recursively + applying the operation to succesive elements along that dimension. + If the input array has +\begin_inset Formula $N$ +\end_inset + + dimensions, then the returned array has +\begin_inset Formula $N-1$ +\end_inset + + dimensions. + This produces the equivalent of the following Python code : +\end_layout + +\begin_layout LyX-Code +>>> indx = [index_exp[:]]*array.ndim +\newline +>>> indx[axis] = 0; N=array.shape[axis] +\newline +>>> + result = array[indx].astype(dtype) +\newline +>>> for i in range(1,N): +\newline +... + indx[axis] = i +\newline +... + <op>(result, array[indx], result) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Studying the above code can also help you gain an appreciation for how + to do generic indexing in Python using +\family typewriter +index_exp +\family default +. + For example, if <op> is add, then <op>.reduce produces a summation along + the given axis. + If <op> is prod, then a repeated multiply is performed. +\end_layout + +\begin_layout Subsection +Accumulate +\end_layout + +\begin_layout Description +<op>.accumulate (array=, axis=0, dtype=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset LatexCommand index +name "ufunc!methods!accumulate" + +\end_inset + +This method is similar to reduce, except it returns an array of the same + shape as the input, and keeps intermediate calculations. + The operation is still performed along the access. + This method underlies the operations of the cumsum and cumprod methods + of arrays. + The following Python code implements an equivalent of the accumulate method. +\end_layout + +\begin_layout LyX-Code +>>> i1 = [index_exp[:]]*array.ndim +\newline +>>> i2 = [index_exp[:]]*array.ndim +\newline +>>> i1[axis] + = 0; N=array.shape[axis] +\newline +>>> result = array.astype(dtype) +\newline +>>> for i in range(1,N): +\newline +... + i1[axis] = i +\newline +... + i2[axis] = i-1 +\newline +... + <op>(result[i1], array[i1], result[i2]) +\end_layout + +\begin_layout Subsection +Reduceat +\end_layout + +\begin_layout Description +<op>.reduceat (array=, indices=, axis=0, dtype=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset LatexCommand index +name "ufunc!methods!reduceat" + +\end_inset + +This method is a generalization of both reduce and accumulate. + It offers the ability to reduce along an axis but only between certain + indices. + The indices input must be a one dimensional (index) sequence. + Then, if +\begin_inset Formula $I_{k}$ +\end_inset + + is the +\begin_inset Formula $k^{\textrm{th}}$ +\end_inset + + element of indices, the reduceat method computes <op>.reduce(array[ +\begin_inset Formula $I_{k}$ +\end_inset + +: +\begin_inset Formula $I_{k+1}$ +\end_inset + +]). + This formula assumes +\begin_inset Formula $I_{k+1}>I_{k}$ +\end_inset + +, and also that +\begin_inset Formula $I_{k+1}$ +\end_inset + + is the length of the input array when +\begin_inset Formula $I_{k}$ +\end_inset + + is the last element. + There is no requirement that the indices be monotonic. + If +\begin_inset Formula $I_{k+1}\leq I_{k},$ +\end_inset + + then reduceat simply returns array[ +\begin_inset Formula $I_{k}$ +\end_inset + +] for that particular element of indices. + In these formulas, we have assumed that array is one dimensional (or axis + is 0). + If the array is +\begin_inset Formula $N$ +\end_inset + +-dimensional and axis>0, then the index expression needs axis ':' (full + slice objects) inserted (i.e. + array[ +\begin_inset Formula $\underbrace{:,\ldots,:}_{\textrm{axis}},I_{k}:I_{k+1}$ +\end_inset + +]). + The effect is to slice along the axis dimension. + Equivalent Python code is +\end_layout + +\begin_layout LyX-Code +>>> i1 = [index_exp[:]]*array.ndim +\newline +>>> i2 = [index_exp[:]]*array.ndim +\newline +>>> outshape + = list(array.shape) +\newline +>>> N = array.shape[axis] +\newline +>>> outshape[axis] = len(indices) +\newline +>>> + result = zeros(outshape, dtype or array.dtype) +\newline +>>> for k,Ik in enumerate(indices +): +\newline +... + i1[axis] = k +\newline +... + try: +\newline +... + Ikp1 = indices[k+1] +\newline +... + except IndexError: +\newline +... + Ikp1 = N +\newline +... + if (Ikp1 > Ik): +\end_layout + +\begin_layout LyX-Code +... + i2[axis] = index_exp[Ik:Ikp1] +\newline +... + result[i1] = <op>.reduce(array[i2],axis=axis,dtype=dtype) +\newline +... + else: +\newline +... + result[i1] = array[Ik].astype(dtype) +\end_layout + +\begin_layout Description +\InsetSpace ~ + The returned array has as many dimensions as the input array, and is the + same shape except for the +\emph on +axis +\emph default + dimension which has shape equal to the length of indices (the number of + reduce operations that were performed). + If you ever have a need to compute multiple reductions over portions of + an array, then (if you can get your mind around what it is doing) reduceat + may be just what you were looking for. + +\end_layout + +\begin_deeper +\begin_layout Description +Example: Suppose a is a two-dimensional array of shape +\begin_inset Formula $10\times20$ +\end_inset + +. + Then, res=add.reduce (a, [0,3,1]) returns a +\begin_inset Formula $3\times20$ +\end_inset + + array with res[0,:] = add.reduce(a[:,0:3]), res[1,:] = a[:,3], and res[2,:] + = add.reduce(a[:,1:]). + +\end_layout + +\end_deeper +\begin_layout Subsection +Outer +\end_layout + +\begin_layout Description +<op>.outer (a, b) +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset LatexCommand index +name "ufunc!methods!outer" + +\end_inset + +This method computes an outer operation on <op>. + It computes <op>(a2, b2) where a2 is 'a' with b.ndim 1's post-pended to + it's shape and b2 is 'b' with a.ndim 1's pre-pended to its shape (broadcasting + takes care of this automatically in the code below). + The return shape has a.ndim + b.ndim dimensions. + Equivalent Python code is +\end_layout + +\begin_layout LyX-Code +>>> a.shape += (1,)*b.ndim +\newline +>>> <op>(a,b) +\newline +>>> a = a.squeeze() +\end_layout + +\begin_layout Standard +\InsetSpace ~ + Among many other uses, arithmetic tables can be conveniently built using + outer: +\begin_inset LatexCommand index +name "ufunc!methods|)" + +\end_inset + + +\end_layout + +\begin_layout MyCode +>>> multiply.outer([1,7,9,12],arange(5,12)) +\newline +array([[ 5, 6, 7, 8, + 9, 10, 11], +\newline + [ 35, 42, 49, 56, 63, 70, 77], +\newline + [ 45, 54, + 63, 72, 81, 90, 99], +\newline + [ 60, 72, 84, 96, 108, 120, 132]]) +\end_layout + +\begin_layout Section +Available ufuncs +\end_layout + +\begin_layout Standard +There are currently more than 60 universal functions defined on one or more + types, covering a wide variety of operations. + Some of these ufuncs are called automatically on arrays when the relevant + infix notation is used (i.e. + add(a,b) is called internally when a + b is written and a or b is an ndarray). + Nonetheless, you may still want to use the ufunc call in order to use the + optional output argument(s) to place the output(s) in an object (or in + objects) of your choice. + +\end_layout + +\begin_layout Standard +Recall that each ufunc operates element-by-element. + Therefore, each ufunc will be described as if acting on a set of scalar + inputs to return a set of scalar outputs. +\end_layout + +\begin_layout Note +The ufunc still returns its output(s) even if you use the optional output + argument(s). + +\end_layout + +\begin_layout Subsection +Math operations +\end_layout + +\begin_layout Description +add ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "add" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=x_{1}+x_{2}$ +\end_inset + +. + Called to implement +\family typewriter +x1+x2 +\family default + for arrays +\end_layout + +\begin_layout Description +subtract ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "subtract" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=x_{1}-x_{2}$ +\end_inset + +. + Called to implement +\family typewriter +x1-x2 +\family default + for arrays +\end_layout + +\begin_layout Description +multiply ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "multiply" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=x_{1}\cdot x_{2}$ +\end_inset + +. + Called to implement +\family typewriter +x1*x2 +\family default + for arrays. +\end_layout + +\begin_layout Description +divide ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "divide" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=x_{1}/x_{2}$ +\end_inset + + Integer division results in truncation. + Floating-point does not. + Called to implement +\family typewriter +x1/x2 +\family default + for arrays (when __future__.division is not active). + +\end_layout + +\begin_layout Description +true_divide ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "true\\_divide" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + This version of division always returns an inexact number so that integer + division returns floating point. + Called with __future__.division is active to implement +\family typewriter +x1/x2 +\family default + for arrays. +\end_layout + +\begin_layout Description +floor_divide ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "floor\\_divide" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + This version of division always results in truncation of an fractional + part remaining. + Called to implement +\family typewriter +x1//x2 +\family default + for arrays. +\end_layout + +\begin_layout Description +negative ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "negative" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=-x$ +\end_inset + +. + Called to implement +\family typewriter +-x +\family default + for arrays. +\end_layout + +\begin_layout Description +power ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "power" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=x_{1}^{x_{2}}$ +\end_inset + +. + There is no three-term power ufunc defined. + This two-term power function is called to implement +\family typewriter +pow(x1,x2,<any>) +\family default + or +\family typewriter +x1**x2 +\family default + for arrays. + Note that the third term in +\family typewriter +pow +\family default + is ignored for array arguments. +\end_layout + +\begin_layout Description +remainder ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "remainder" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns +\begin_inset Formula $x-y$ +\end_inset + +*floor( +\begin_inset Formula $x/y$ +\end_inset + +). + Result has the sign of +\begin_inset Formula $y$ +\end_inset + +. + Called to implement +\family typewriter +x1%x2 +\family default +. +\end_layout + +\begin_layout Description +mod ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Same as remainder ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]). + +\end_layout + +\begin_layout Description +fmod ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $x_{1}=kx_{2}+y$ +\end_inset + + where +\begin_inset Formula $k$ +\end_inset + + is the largest integer satisfying this equation. + Computes C-like +\begin_inset Formula $x_{1}\%x_{2}$ +\end_inset + + element-wise. + This was the behavior of +\family typewriter +x1%x2 +\family default + in old Numeric. +\end_layout + +\begin_layout Description +absolute ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "absolute" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=\left|x\right|.$ +\end_inset + + Called to implement +\family typewriter +abs(x) +\family default + for arrays. + +\end_layout + +\begin_layout Description +rint (x, [, y]) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Round +\begin_inset Formula $x$ +\end_inset + + to the nearest integer. + Rounds half-way cases to the nearest even integer. +\end_layout + +\begin_layout Description +sign ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Sets +\begin_inset Formula $y$ +\end_inset + + according to +\begin_inset Formula \[ +\textrm{sign}\left(x\right)=\left\{ \begin{array}{cc} +1 & x:>0,\\ +0 & x=0,\\ +-1 & x<0.\end{array}\right.\] + +\end_inset + + +\end_layout + +\begin_layout Description +conj ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "conj" + +\end_inset + + +\end_layout + +\begin_layout Description +conjugate ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "conjugate" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=\overline{x}$ +\end_inset + +; in other words, the complex conjugate of +\begin_inset Formula $x$ +\end_inset + +. +\end_layout + +\begin_layout Description +exp ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "exp" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=e^{x}.$ +\end_inset + + +\end_layout + +\begin_layout Description +log ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "log" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=\log\left(x\right)$ +\end_inset + +. + In other words, +\begin_inset Formula $y$ +\end_inset + + is the number so that +\begin_inset Formula $e^{y}=x$ +\end_inset + +. + +\end_layout + +\begin_layout Description +expm1 ( +\begin_inset Formula $x$ +\end_inset + +, [, +\begin_inset Formula $y$ +\end_inset + +]) +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=e^{x}-1.$ +\end_inset + + Calculated so that it is accurate for small +\begin_inset Formula $\left|x\right|.$ +\end_inset + + +\end_layout + +\begin_layout Description +log1p ( +\begin_inset Formula $x$ +\end_inset + +, [, +\begin_inset Formula $y$ +\end_inset + +]) +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=\log\left(1+x\right)$ +\end_inset + + but accurate for small +\begin_inset Formula $\left|x\right|.$ +\end_inset + + Returns the number +\begin_inset Formula $y$ +\end_inset + + such that +\begin_inset Formula $e^{y}-1=x$ +\end_inset + + +\end_layout + +\begin_layout Description +log10 ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "log10" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=\log10\left(x\right)$ +\end_inset + +. + In other words, +\begin_inset Formula $y$ +\end_inset + + is the number so that +\begin_inset Formula $10^{y}=x.$ +\end_inset + + +\end_layout + +\begin_layout Description +sqrt ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "sqrt" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=\sqrt{x}.$ +\end_inset + + +\end_layout + +\begin_layout Description +square ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=x*x$ +\end_inset + + +\end_layout + +\begin_layout Description +reciprocal ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=1/x$ +\end_inset + + +\end_layout + +\begin_layout Description +ones_like ( +\begin_inset Formula $x$ +\end_inset + +, [, +\begin_inset Formula $y$ +\end_inset + +]) +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset Formula $y=1$ +\end_inset + + If an output argument is not given the returned data-type is the same as + the input data type. +\end_layout + +\begin_layout Tip +The optional output arguments can be used to help you save memory for large + calculations. + If your arrays are large, complicated expressions can take longer than + absolutely necessary due to the creation and (later) destruction of temporary + calculation spaces. + For example, the expression 'G=a*b+c' is equivalent to t1=A*B; G=T1+C; + del t1; It will be more quickly executed as G=A*B; add(G,C,G) which is + the same as G=A*B; G+=C. +\end_layout + +\begin_layout Subsection +Trigonometric functions +\end_layout + +\begin_layout Standard +All trigonometric functions use radians when an angle is called for. + The ratio of degrees to radians is +\begin_inset Formula $180^{\circ}/\pi.$ +\end_inset + + +\end_layout + +\begin_layout Description +sin ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "sin" + +\end_inset + + +\end_layout + +\begin_layout Description +cos ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "cos" + +\end_inset + + +\end_layout + +\begin_layout Description +tan ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "tan" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The standard trignometric functions. + +\begin_inset Formula $y=\sin\left(x\right),$ +\end_inset + + +\begin_inset Formula $y=\cos\left(x\right),$ +\end_inset + + and +\begin_inset Formula $y=\tan\left(x\right).$ +\end_inset + + +\end_layout + +\begin_layout Description +arcsin ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "arcsin" + +\end_inset + + +\end_layout + +\begin_layout Description +arccos ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "arccos" + +\end_inset + + +\end_layout + +\begin_layout Description +arctan ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "arctan" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The inverse trigonometric functions: +\begin_inset Formula $y=\sin^{-1}\left(x\right),$ +\end_inset + + +\begin_inset Formula $y=\cos^{-1}\left(x\right)$ +\end_inset + +, +\begin_inset Formula $y=\tan^{-1}\left(x\right).$ +\end_inset + + These return the value of +\begin_inset Formula $y$ +\end_inset + + (in radians) such that +\begin_inset Formula $\sin\left(y\right)=x$ +\end_inset + + with +\begin_inset Formula $y\in\left[-\frac{\pi}{2},\frac{\pi}{2}\right]$ +\end_inset + +; +\begin_inset Formula $\cos\left(y\right)=x$ +\end_inset + + with +\begin_inset Formula $y\in\left[0,\pi\right]$ +\end_inset + +; and +\begin_inset Formula $\tan\left(y\right)=x$ +\end_inset + + with +\begin_inset Formula $y\in\left[-\frac{\pi}{2},\frac{\pi}{2}\right]$ +\end_inset + +, respectively. + +\end_layout + +\begin_layout Description +arctan2 ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "arctan2" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns +\begin_inset Formula $\tan^{-1}\left(\frac{x_{1}}{x_{2}}\right)$ +\end_inset + + but takes into account the sign on +\begin_inset Formula $x_{1}$ +\end_inset + + and +\begin_inset Formula $x_{2}$ +\end_inset + + to place the angle in the correct quadrant. + The angle +\begin_inset Formula $y$ +\end_inset + + is returned in the full range +\begin_inset Formula $-\pi<y\leq\pi$ +\end_inset + +. + The angle is chosen so that +\begin_inset Formula $\sin\left(y\right)=\frac{x_{1}}{\sqrt{x_{1}^{2}+x_{2}^{2}}},$ +\end_inset + + and +\begin_inset Formula $\cos\left(y\right)=\frac{x_{2}}{\sqrt{x_{1}^{2}+x_{2}^{2}}}.$ +\end_inset + + Particular values are showin in the following table: +\end_layout + +\begin_layout Standard +\align center +\begin_inset Tabular +<lyxtabular version="3" rows="5" columns="3"> +<features> +<column alignment="center" valignment="top" leftline="true" width="0"> +<column alignment="center" valignment="top" leftline="true" width="0"> +<column alignment="center" valignment="top" leftline="true" rightline="true" width="0"> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $x_{1}$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $x_{2}$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $y=\textrm{arctan2}\left(x_{1},x_{2}\right)$ +\end_inset + + +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +0 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +1 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +0 +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +1 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +0 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\frac{\pi}{2}$ +\end_inset + + +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +0 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +-1 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $\pi$ +\end_inset + + +\end_layout + +\end_inset +</cell> +</row> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +-1 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +0 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +\begin_inset Formula $-\frac{\pi}{2}$ +\end_inset + + +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\end_inset + + +\end_layout + +\begin_layout Description +hypot ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "hypot" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns +\begin_inset Formula $y=\sqrt{x_{1}^{2}+x_{2}^{2}}.$ +\end_inset + + Given a complex number in cartesian form, arctan2 and hypot can be used + to compute phase and magnitude, quickly. +\end_layout + +\begin_layout Description +sinh ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "sinh" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Computes +\begin_inset Formula $y=\sinh\left(x\right)$ +\end_inset + + which is defined as +\begin_inset Formula $\frac{1}{2}\left(e^{x}-e^{-x}\right).$ +\end_inset + + +\end_layout + +\begin_layout Description +cosh ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "cosh" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Computes +\begin_inset Formula $y=\cosh\left(x\right)$ +\end_inset + + which is defined as +\begin_inset Formula $\frac{1}{2}\left(e^{x}+e^{-x}\right).$ +\end_inset + + +\end_layout + +\begin_layout Description +tanh ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "tanh" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Computes +\begin_inset Formula $y=\tanh\left(x\right)$ +\end_inset + + which is defined as +\begin_inset Formula $\left(e^{x}-e^{-x}\right)/\left(e^{x}+e^{-x}\right).$ +\end_inset + + +\end_layout + +\begin_layout Description +arcsinh ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "arcsinh" + +\end_inset + + +\end_layout + +\begin_layout Description +arccosh ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "arccosh" + +\end_inset + + +\end_layout + +\begin_layout Description +arctanh ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "arctanh" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + These compute the inverse hyperpolic functions. + +\begin_inset Formula $y=\textrm{arc}func\left(x\right)$ +\end_inset + + is the (principal) value of +\begin_inset Formula $y$ +\end_inset + + such that +\begin_inset Formula $func\left(y\right)=x.$ +\end_inset + + +\end_layout + +\begin_layout Subsection +Bit-twiddling functions +\end_layout + +\begin_layout Standard +These function all need integer arguments and they maniuplate the bit-pattern + of those arguments. +\end_layout + +\begin_layout Description +bitwise_and ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "bitwise\\_and" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Each bit in +\begin_inset Formula $y$ +\end_inset + + is the result of a bit-wise 'and' operation on the corresponding bits in + +\begin_inset Formula $x_{1}$ +\end_inset + + and +\begin_inset Formula $x_{2}$ +\end_inset + +. + Called to implement +\family typewriter +x1&x2 +\family default + for arrays. + +\end_layout + +\begin_layout Description +bitwise_or ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "bitwise\\_or" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Each bit in +\begin_inset Formula $y$ +\end_inset + + is the result of a bit-wise 'or' operation on the corresponding bits in + +\begin_inset Formula $x_{1}$ +\end_inset + + and +\begin_inset Formula $x_{2}$ +\end_inset + +. + Called to implement +\family typewriter +x1|x2 +\family default + for arrays. +\end_layout + +\begin_layout Description +bitwise_xor ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "bitwise\\_xor" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Each bit in +\begin_inset Formula $y$ +\end_inset + + is the result of a bit-wise 'xor' operation on the corresponding bits in + +\begin_inset Formula $x_{1}$ +\end_inset + + and +\begin_inset Formula $x_{2}$ +\end_inset + +. + An xor operation sets the output to 1 if one and only one of the input + bits is 1. + Called to implement +\family typewriter +x1^x2 +\family default + for arrays. + Using the bitwise_xor operation and the optional output argument you can + swap the values of two integer arrays of equivalent types without using + temporary arrays. +\end_layout + +\begin_layout MyCode +>>> a=arange(10) +\newline +>>> b=arange(10,20) +\newline +>>> bitwise_xor(a,b,a); bitwise_xor(a,b,b); +\newline +>> +> bitwise_xor(a,b,a) +\newline +array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19]) +\newline +>>> print + a; print b +\newline +[10 11 12 13 14 15 16 17 18 19] +\newline +[0 1 2 3 4 5 6 7 8 9] +\end_layout + +\begin_layout Description +invert ( +\begin_inset Formula $x$ +\end_inset + +, [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "invert" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Each bit in +\begin_inset Formula $y$ +\end_inset + + is the opposite of the corresponding bit in +\begin_inset Formula $x$ +\end_inset + +. + Called to implement +\family typewriter +~x +\family default + for arrays. +\end_layout + +\begin_layout Description +left_shift ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "left\\_shift" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Shifts the bits of +\begin_inset Formula $x_{1}$ +\end_inset + + to the left by +\begin_inset Formula $x_{2}$ +\end_inset + +. + Called to implement +\family typewriter +x1<<x2 +\family default + for arrays. + Provided there is no overflow, the result is equal to +\begin_inset Formula $y=x_{1}2^{x_{2}}.$ +\end_inset + + +\end_layout + +\begin_layout Description +right_shift ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "right\\_shift" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Shifts the bits of +\begin_inset Formula $x_{1}$ +\end_inset + + to the right by +\begin_inset Formula $x_{2}$ +\end_inset + +. + Called to implement +\family typewriter +x1>>x2 +\family default + for arrays. + Absent overflow, the result is equal to +\begin_inset Formula $y=x_{1}2^{-x_{2}}$ +\end_inset + +. +\end_layout + +\begin_layout Subsection +Comparison functions +\end_layout + +\begin_layout Standard +All of these functions (except maximum, minimum, and sign) return Boolean + arrays. + +\end_layout + +\begin_layout Description +greater ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "greater" + +\end_inset + + +\end_layout + +\begin_layout Description +greater_equal ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "greater\\_equal" + +\end_inset + + +\end_layout + +\begin_layout Description +less ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "less" + +\end_inset + + +\end_layout + +\begin_layout Description +less_equal ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "less\\_equal" + +\end_inset + + +\end_layout + +\begin_layout Description +not_equal ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "not\\_equal" + +\end_inset + + +\end_layout + +\begin_layout Description +equal ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "equal" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + These functions are called to implement +\family typewriter +x1>x2 +\family default +, +\family typewriter +x1>=x2 +\family default +, +\family typewriter +x1<x2 +\family default +, +\family typewriter +x1<=x2 +\family default +, +\family typewriter +x1!=x2 +\family default + (or +\family typewriter +x1<>x2 +\family default +), and +\family typewriter +x1==x2 +\family default +, respectively, for arrays. +\end_layout + +\begin_layout Description +\InsetSpace ~ + The fact that these functions return Boolean arrays make them very useful + in combination with advanced array indexing. + Thus, for example, arr[arr>10] = 10 clips large values to 10. + Used in conjunction with bitwise operators quite complicated expressions + are possible. + For example, arr[~((arr<10)&(arr>5))] = 0 clips all values outside of the + range +\begin_inset Formula $\left(5,10\right)$ +\end_inset + + to 0. + +\end_layout + +\begin_layout Warning +Do not use the Python keywords +\family typewriter +and +\family default + and +\family typewriter +or +\family default + to combine logical array expressions. + These keywords will test the truth value of the entire array (not element-by-el +ement as you might expect). + Use the bitwise operators: & and | instead. +\end_layout + +\begin_layout Description +logical_and ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "logical\\_and" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The output is the truth value of +\begin_inset Formula $x_{1}$ +\end_inset + + +\series bold +and +\series default + +\begin_inset Formula $x_{2}$ +\end_inset + +. + Numbers equal to 0 are considered False. + Nonzero numbers are True. +\end_layout + +\begin_layout Description +logical_or ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "logical\\_or" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The output, +\begin_inset Formula $y$ +\end_inset + +, is the truth value of +\begin_inset Formula $x_{1}$ +\end_inset + + +\series bold +or +\begin_inset Formula $x_{2}$ +\end_inset + + +\series default + . +\end_layout + +\begin_layout Description +logical_xor ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "logical\\_xor" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The output, +\begin_inset Formula $y$ +\end_inset + +, is the truth value of +\begin_inset Formula $x_{1}$ +\end_inset + + +\series bold +xor +\begin_inset Formula $x_{2}$ +\end_inset + + +\series default +, which is the same as ( +\begin_inset Formula $x_{1}$ +\end_inset + + and not +\begin_inset Formula $x_{2}$ +\end_inset + +) or (not +\begin_inset Formula $x_{1}$ +\end_inset + + and +\begin_inset Formula $x_{2}$ +\end_inset + +). +\end_layout + +\begin_layout Description +logical_not ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "logical\\_not" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The output, +\begin_inset Formula $y$ +\end_inset + + is the truth value of +\series bold +not +\series default + +\begin_inset Formula $x$ +\end_inset + +. + +\end_layout + +\begin_layout Warning +The Bitwise operators (& and |) are the proper way to combine element-by-element + array comparisons. + Be sure to understand the operator precedence: (a>2) & (a<5) is the proper + syntax because a>2 & a<5 will result in an error due to the fact that 2 + & a is evaluated first. +\end_layout + +\begin_layout Description +maximum ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "maximum" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The output, +\begin_inset Formula $y$ +\end_inset + +, is the larger of +\begin_inset Formula $x_{1}$ +\end_inset + + and +\begin_inset Formula $x_{2}$ +\end_inset + +. + +\end_layout + +\begin_layout MyCode +>>> maximum([1,0,5,10],[3,2,4,5]) +\newline +array([ 3, 2, 5, 10]) +\newline +>>> max([1,0,5,10],[3,2, +4,5]) +\newline +[3, 2, 4, 5] +\end_layout + +\begin_layout Tip +The Python function max() will find the maximum over a one-dimensional array, + but it will do so using a slower sequence interface. + The reduce method of the maximum ufunc is much faster. + Also, the max() method will not give answers you might expect for arrays + with greater than one dimension. + The reduce method of minimum also allows you to compute a total minimum + over an array. +\end_layout + +\begin_layout Description +minimum ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "minimum" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The output, +\begin_inset Formula $y$ +\end_inset + +, is the smaller of +\begin_inset Formula $x_{1}$ +\end_inset + + and +\begin_inset Formula $x_{2}$ +\end_inset + +. +\end_layout + +\begin_layout MyCode +>>> minimum([1,0,5,10],[3,2,4,5]) +\newline +array([1, 0, 4, 5]) +\newline +>>> min([1,0,5,10],[3,2,4,5] +) +\newline +[1, 0, 5, 10] +\end_layout + +\begin_layout Warning +the behavior of maximum(a,b) is than that of max(a,b). + As a ufunc, maximum(a,b) performs an element-by-element comparison of a + and b and chooses each element of the result according to which element + in the two arrays is larger. + In contrast, max(a,b) treats the objects a and b as a whole, looks at the + (total) truth value of a>b and uses it to return either a or b (as a whole). + A similar difference exists between minimum(a,b) and min(a,b). + +\end_layout + +\begin_layout Subsection +Floating functions +\end_layout + +\begin_layout Standard +Recall that all of these functions work element-by-element over an array, + returning an array output. + The description details only a single operation. +\end_layout + +\begin_layout Description +isreal ( +\begin_inset Formula $x$ +\end_inset + +) +\begin_inset LatexCommand index +name "isreal" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + True if +\begin_inset Formula $x$ +\end_inset + + has an imaginary part that is 0. +\end_layout + +\begin_layout Description +iscomplex ( +\begin_inset Formula $x$ +\end_inset + +) +\begin_inset LatexCommand index +name "iscomplex" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + True if +\begin_inset Formula $x$ +\end_inset + + has an imaginary part that is non-zero. + +\end_layout + +\begin_layout Description +isfinite ( +\begin_inset Formula $x$ +\end_inset + +) +\begin_inset LatexCommand index +name "isfinite" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + True if +\begin_inset Formula $x$ +\end_inset + + is a finite floating point number (not a NaN or an Inf). + +\end_layout + +\begin_layout Description +isinf ( +\begin_inset Formula $x$ +\end_inset + +) +\begin_inset LatexCommand index +name "isinf" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + True if +\begin_inset Formula $x$ +\end_inset + + is +\begin_inset Formula $\pm\infty$ +\end_inset + +. + +\end_layout + +\begin_layout Description +isnan ( +\begin_inset Formula $x$ +\end_inset + +) +\begin_inset LatexCommand index +name "isnan" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + True if +\begin_inset Formula $x$ +\end_inset + + is Not-a-Number. + This represents invalid results. + When a NaN is created, the invalid flag is set. + If you set the error mode of invalid to 'warn', 'raise', or 'call', then + the appropriate action will be performed on NaN creation. + +\end_layout + +\begin_layout Description +signbit ( +\begin_inset Formula $x$ +\end_inset + +) +\begin_inset LatexCommand index +name "signbit" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + True where the sign bit of the floating point number is set. + This should correspond to +\begin_inset Formula $x>0$ +\end_inset + + when +\begin_inset Formula $x$ +\end_inset + + is a finite number. + When, +\begin_inset Formula $x$ +\end_inset + + is NaN or infinite, then this tests the actual signbit. + +\end_layout + +\begin_layout Description +modf ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y_{1}$ +\end_inset + +, +\begin_inset Formula $y_{2}$ +\end_inset + +]) +\begin_inset LatexCommand index +name "modf" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Breaks up the floating point value +\begin_inset Formula $x$ +\end_inset + + into its fractional, +\begin_inset Formula $y_{1}$ +\end_inset + +, and integral, +\begin_inset Formula $y_{2}$ +\end_inset + +, parts. + Thus, +\begin_inset Formula $x=y_{1}+y_{2}$ +\end_inset + + with +\family typewriter +floor(y2)==y2 +\family default +. + +\end_layout + +\begin_layout Description +ldexp ( +\begin_inset Formula $x$ +\end_inset + +, +\begin_inset Formula $n$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "ldexp" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Fast multiply of a floating point number by an integral power of 2: +\begin_inset Formula $y=2^{n}x.$ +\end_inset + + +\end_layout + +\begin_layout Description +frexp ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +, +\begin_inset Formula $n$ +\end_inset + +]) +\begin_inset LatexCommand index +name "frexp" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Breaks up the floating point value +\begin_inset Formula $x$ +\end_inset + + into a normalized fraction, +\begin_inset Formula $y$ +\end_inset + + and an exponent, +\begin_inset Formula $n$ +\end_inset + + which corresponds to how the value is represented in the computer. + The results are such that +\begin_inset Formula $x=y2^{n}.$ +\end_inset + + Effectively, the inverse of ldexp. + +\end_layout + +\begin_layout Description +fmod ( +\begin_inset Formula $x_{1}$ +\end_inset + +, +\begin_inset Formula $x_{2}$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + +]) +\begin_inset LatexCommand index +name "fmod" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Computes the remainder of dividing +\begin_inset Formula $x_{1}$ +\end_inset + + by +\begin_inset Formula $x_{2}$ +\end_inset + +. + The result, +\begin_inset Formula $y$ +\end_inset + +, is +\begin_inset Formula $x_{1}-nx_{2}$ +\end_inset + + where +\begin_inset Formula $n$ +\end_inset + + is the quotient (rounded towards zero to an integer) of +\begin_inset Formula $x_{1}/x_{2}.$ +\end_inset + + +\end_layout + +\begin_layout Description +floor ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + + ]) +\begin_inset LatexCommand index +name "floor" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return +\begin_inset Formula $y=\left\lfloor x\right\rfloor $ +\end_inset + + where +\begin_inset Formula $y$ +\end_inset + + is the nearest integer smaller-than or equal to +\begin_inset Formula $x.$ +\end_inset + + Thus, +\begin_inset Formula $ $ +\end_inset + + +\begin_inset Formula $\left\lfloor x\right\rfloor \leq x<\left\lfloor x\right\rfloor +1$ +\end_inset + +. + +\end_layout + +\begin_layout Description +ceil ( +\begin_inset Formula $x$ +\end_inset + + [, +\begin_inset Formula $y$ +\end_inset + + ]) +\begin_inset LatexCommand index +name "ceil" + +\end_inset + + +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return +\begin_inset Formula $y=\left\lceil x\right\rceil $ +\end_inset + + where +\begin_inset Formula $y$ +\end_inset + + is the nearest integer greater-than or equal to +\begin_inset Formula $x$ +\end_inset + +. + Thus, +\begin_inset Formula $x\leq\left\lceil x\right\rceil <x+1.$ +\end_inset + + +\begin_inset LatexCommand index +name "ufunc|)" + +\end_inset + + +\end_layout + +\begin_layout Chapter +Basic Modules +\end_layout + +\begin_layout Quotation +It is the mark of an educated mind to rest satisfied with the degree of + precision which the nature of the subject admits and not to seek exactness + where only an approximation is possible. +\end_layout + +\begin_layout Right Address +--- +\emph on +Aristotle +\end_layout + +\begin_layout Quotation +"Oh no. + We're in the hands of engineers!" +\end_layout + +\begin_layout Right Address +--- +\emph on +Malcolm, Ian in 'Jurassic Park' +\end_layout + +\begin_layout Standard +The NumPy distribution contains some basic functionality equivalent to what + was available in the Numeric packages previously. + This section documents the new interfaces. + These are sub-packages of the NumPy namespace. + The linalg and fft capabilities are useful but limited. + You should install the full SciPy package to access more functionality. + The numpy.dual module contains functions that are defined in both SciPy + and NumPy. + If SciPy defines func, then numpy.dual.func will point to the SciPy version, + otherwise it will point to the NumPy version. + It must be imported specifically to be used. + Table +\begin_inset LatexCommand ref +reference "cap:Functions-in-numpy.dual" + +\end_inset + + shows the functions defined in numpy.dual that are in both NumPy and SciPy. +\end_layout + +\begin_layout Standard +\begin_inset Float table +wide false +sideways false +status open + +\begin_layout Standard +\begin_inset Caption + +\begin_layout Standard +\begin_inset LatexCommand label +name "cap:Functions-in-numpy.dual" + +\end_inset + +Functions in numpy.dual (both in NumPy and SciPy) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align center +\begin_inset Tabular +<lyxtabular version="3" rows="4" columns="2"> +<features> +<column alignment="center" valignment="top" leftline="true" width="0"> +<column alignment="center" valignment="middle" leftline="true" rightline="true" width="55text%"> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Family +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Functions +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Fourier Transforms +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +fft, ifft, fft2, ifft2, fftn, ifftn +\end_layout + +\end_inset +</cell> +</row> +<row topline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Linear Algebra +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +norm, det, inv, pinv, solve, eig, eigh, eigvals, eigvalsh, lstsq, cholesky, + svd +\end_layout + +\end_inset +</cell> +</row> +<row topline="true" bottomline="true"> +<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +Special Functions +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> +\begin_inset Text + +\begin_layout Standard +i0 +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Linear Algebra ( +\family typewriter +linalg +\family default +) +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "linalg|(" + +\end_inset + +These functions are in the numpy.linalg sub-package. +\end_layout + +\begin_layout Description +inv (A) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the (matrix) inverse of the 2-d array A. + The result, X, is such that dot(A,X) is equal to eye(*A.shape) (to within + machine precision). + +\end_layout + +\begin_layout Description +solve (A,b) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Find the solution to the linear equation +\begin_inset Formula $\mathbf{Ax}=\mathbf{b}$ +\end_inset + +, where +\begin_inset Formula $A$ +\end_inset + + is a 2-d array and +\begin_inset Formula $b$ +\end_inset + + is a 1-d or 2-d array. + +\end_layout + +\begin_layout Description +tensorsolve (A, b, axes=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Find the solution, +\begin_inset Formula $x_{kl}$ +\end_inset + +, to the multi-index linear equation +\begin_inset Formula \[ +\sum_{kl}A_{ijkl}x_{kl}=b_{ij}.\] + +\end_inset + + The axes argument specifies which dimensions of +\begin_inset Formula $A$ +\end_inset + + are summed over. + If it is None, then the last A.ndim - b.ndim dimensions are summed over. + The result, therefore, has dimension x.ndim = A.ndim-b.ndim. + +\end_layout + +\begin_layout Description +tensorinv (A, ind=2) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Find the tensor inverse of +\begin_inset Formula $A$ +\end_inset + +, defined to be the tensor such that tensordot (Ainv, A) is an identity + operator. + +\end_layout + +\begin_layout Description +cholesky (A) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return, +\begin_inset Formula $\mathbf{L}$ +\end_inset + +, the Cholesky decomposition of +\begin_inset Formula $\mathbf{A}$ +\end_inset + +. + Cholesky decomposition is applicable to a Hermitian, positive definite + matrices. + When +\begin_inset Formula $\mathbf{A}=\mathbf{A}^{H}$ +\end_inset + + and +\begin_inset Formula $\mathbf{x}^{H}\mathbf{Ax}\geq0$ +\end_inset + + for all +\begin_inset Formula $\mathbf{x}$ +\end_inset + +, then decompositions of +\begin_inset Formula $\mathbf{A}$ +\end_inset + + can be found so that +\begin_inset Formula $\mathbf{A}=\mathbf{LL}^{H}$ +\end_inset + +, where +\begin_inset Formula $\mathbf{L}$ +\end_inset + + is lower-triangular. + +\end_layout + +\begin_layout Description +eigvals (A) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return all solutions ( +\begin_inset Formula $\lambda$ +\end_inset + +) to the equation +\begin_inset Formula $\mathbf{Ax}=\lambda\mathbf{x}$ +\end_inset + +. +\end_layout + +\begin_layout Description +eig (A) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return all solutions +\begin_inset Formula $\left(\lambda,\mathbf{x}\right)$ +\end_inset + + to the equation +\begin_inset Formula $\mathbf{Ax}=\lambda\mathbf{x}$ +\end_inset + +. + The first element of the return tuple contains all the eigenvalues. + The second element of the return tuple contains the eigenvectors in the + columns (x[:,i] is the ith eigenvector). +\end_layout + +\begin_layout Description +eigvalsh (U) +\end_layout + +\begin_layout Description +eigh (U) +\end_layout + +\begin_layout Description +\InsetSpace ~ + These functions are identical to eigvals and eig except they only work + with Hermitian matrices where +\begin_inset Formula $\mathbf{U}^{H}=\mathbf{U}$ +\end_inset + + (only the lower-triangular part of the array is used). +\end_layout + +\begin_layout Description +svd (A) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute the singular value decomposition of the 2-d array +\begin_inset Formula $\mathbf{A}$ +\end_inset + +. + Every +\begin_inset Formula $m\times n$ +\end_inset + + matrix can be decomposed into a pair of unitary matrices, +\begin_inset Formula $\mathbf{U}=\mathbf{U}^{H}$ +\end_inset + + ( +\begin_inset Formula $m\times m$ +\end_inset + +) and +\begin_inset Formula $\mathbf{V}=\mathbf{V}^{H}$ +\end_inset + + ( +\begin_inset Formula $n\times n$ +\end_inset + +) and an +\begin_inset Formula $m\times n$ +\end_inset + + +\begin_inset Quotes eld +\end_inset + +diagonal +\begin_inset Quotes erd +\end_inset + + matrix +\begin_inset Formula $\boldsymbol{\Sigma}$ +\end_inset + +, such that +\begin_inset Formula $\mathbf{A}=\mathbf{U\boldsymbol{\Sigma}}\mathbf{V}^{H}$ +\end_inset + +. + The only non-zero portion of +\begin_inset Formula $\boldsymbol{\Sigma}$ +\end_inset + + is the upper +\begin_inset Formula $r\times r$ +\end_inset + + block where +\begin_inset Formula $r=\min\left(m,n\right)$ +\end_inset + +. + The svd function returns three arrays as a tuple: ( +\begin_inset Formula $\mathbf{U}$ +\end_inset + +, +\begin_inset Formula $\boldsymbol{\sigma}$ +\end_inset + +, +\begin_inset Formula $\mathbf{V}^{H}$ +\end_inset + +). + The singular values are returned in the 1-d array +\begin_inset Formula $\boldsymbol{\sigma}$ +\end_inset + +. + If needed, the array +\begin_inset Formula $\boldsymbol{\Sigma}$ +\end_inset + + can be found (if really needed) using the command diag( +\begin_inset Formula $\boldsymbol{\sigma}$ +\end_inset + +) which creates the +\begin_inset Formula $r\times r$ +\end_inset + + diagonal block and then inserting this into a zeros matrix: +\end_layout + +\begin_layout MyCode +>>> A = random.rand(3,5) +\newline +>>> from numpy.dual import svd; U,s,Vh = svd(A) +\newline +>>> + r=min(*A.shape); Sig = zeros_like(A); +\newline +>>> Sig[:r,:r] = diag(s); print Sig +\newline +[[ + 2.1634 0. + 0. + 0. + 0. + ] +\newline + [ 0. + 0.7076 0. + 0. + 0. + ] +\newline + [ 0. + 0. + 0.2098 0. + 0. + ]] +\end_layout + +\begin_layout Description +pinv (A, rcond= +\begin_inset Formula $10^{-10}$ +\end_inset + +) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the generalized, pseudo inverse, of +\begin_inset Formula $A$ +\end_inset + +. + For invertible matrices, this is the same as the inverse. + +\end_layout + +\begin_layout Description +det (A) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the determinant of the array. + The determinant of an array is the product of its singular values. + +\end_layout + +\begin_layout Description +lstsq (A, b, rcond= +\begin_inset Formula $10^{-10}$ +\end_inset + +) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return (x, resids, rank, s) where x minimizes resids= +\begin_inset Formula $\left\Vert \mathbf{Ax}-\mathbf{b}\right\Vert _{2}$ +\end_inset + +. + The output rank is the rank of A and s is the singular values of a in descendin +g order. + Singular values less than s[0]*rcond are treated as 0. + If the rank of A is less than the number of columns of A or greater than + the number of rows, resids will be returned as an empty array. +\begin_inset LatexCommand index +name "linalg|)" + +\end_inset + + +\end_layout + +\begin_layout Section +Discrete Fourier Transforms ( +\family typewriter +fft +\family default +) +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "fft|(" + +\end_inset + +All of the algorithms here are most efficient if the length of the data + is a power of 2 (or decomposable into low prime factors). + +\end_layout + +\begin_layout Description +fft (x, n=None, axis=-1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return, X, the N-point Discrete Fourier Transform (DFT) of x along the + given axis using a fast algorithm. + If N is larger than x.shape[axis], then x will be zero-padded. + If N is smaller than x.shape[axis], then the first N items will be used. + The result is computed for +\begin_inset Formula $k=0\ldots n-1$ +\end_inset + + from the formula: +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +X\left[k\right]=\sum_{m=0}^{n-1}x[m]\exp\left(-j\frac{2\pi km}{n}\right).\] + +\end_inset + + +\end_layout + +\begin_layout Tip +The fft returns values for +\begin_inset Formula $k=0\ldots N-1$ +\end_inset + +. + Because +\begin_inset Formula $X\left[N-k\right]=X[-k]$ +\end_inset + + in the FFT formula, larger values of k correspond also to negative frequencies. +\end_layout + +\begin_layout Description +ifft (X, n=None, axis=-1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the inverse of the fft so that (ifft(fft(a)) == a within numerical + precision. + The order of frequencies must be the same as returned by fft. + The result is computed (using a fast algorithm) for +\begin_inset Formula $m=0\ldots n-1$ +\end_inset + + from the formula: +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +x\left[m\right]=\frac{1}{n}\sum_{k=0}^{n-1}X\left[k\right]\exp\left(j\frac{2\pi km}{n}\right).\] + +\end_inset + + +\end_layout + +\begin_layout Standard +Sometimes having the +\begin_inset Quotes eld +\end_inset + +negative +\begin_inset Quotes erd +\end_inset + + frequencies at the end of the output returned by fft can be a little confusing. + There are two ways to deal with this confusion. + In my opinion, the most useful way is to get a collection of DFT sample + frequencies and use them to keep track of where each frequency is. + The function +\family typewriter +fftfreq +\family default + provides these sample frequencies. + Making an x-y plot, where the sample frequencies are along the +\begin_inset Quotes eld +\end_inset + +x +\begin_inset Quotes erd +\end_inset + +-axis and the result of the DFT is along the +\begin_inset Quotes eld +\end_inset + +y +\begin_inset Quotes erd +\end_inset + +-axis provides a useful visualization with the zero-frequency at the center + of the plot. + The advantage of this approach is that your data is still in proper order + for using the +\family typewriter +ifft +\family default + function. + Some people, however, prefer to simply swap one-half of the output with + the other. + This is exactly what the function +\family typewriter +fftshift +\family default + does. + Of course, now the data is not in the proper order for the ifft function, + but to each his own. + +\end_layout + +\begin_layout Standard +The reason that the +\begin_inset Quotes eld +\end_inset + +negative +\begin_inset Quotes erd +\end_inset + + frequencies are in the upper part of the return signal was given in the + description of the DFT. + The reason is that the output of the DFT is just one period of a periodic + function (with period +\begin_inset Formula $n$ +\end_inset + +). + The traditional output of the FFT algorithm is to provide the portion of + the function from from +\begin_inset Formula $k=0$ +\end_inset + + to +\begin_inset Formula $k=n-1$ +\end_inset + +. + +\end_layout + +\begin_layout Description +fftshift (x, axes=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Shift zero-frequency component to the center of the spectrum. + This function swaps half-spaces for all axes listed (defaults to all of + them). + +\end_layout + +\begin_layout Description +ifftshift (x, axes=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Reverse the effect of the fftshift operation. + Thus, it takes zero-centered data and shifts it into the correct order + for the ifft operation. +\end_layout + +\begin_layout Description +fftfreq (n, d=1.0) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Provide the DFT sample frequencies. + The returned float array contains the frequency bins in the order returned + from the fft function. + If given, +\begin_inset Formula $d$ +\end_inset + + represents the sample-spacing. + The units on the frequency bins are cycles / unit. + For example, the following example computes the output frequencies (in + Hz) of the fft of +\begin_inset Formula $256$ +\end_inset + + samples of a voice signal sampled at 20000Hz. +\end_layout + +\begin_layout MyCode +>>> from numpy.fft import fftfreq; f=fftfreq(256,d=1./20e3) +\newline +>>> print f[0], + f[1], f[2], f[128] +\newline +0.0 78.125 156.25 -10000.0 +\end_layout + +\begin_layout Description +fft2 (x, s=None, axes=(-2,-1)) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the two-dimensional fft of the array x for each 2-d array formed + by axes. + The 2-d fft is computed as +\begin_inset Formula \[ +X\left[k_{0},k_{1}\right]=\sum_{m_{0}=0}^{s[0]-1}\sum_{m_{1}=0}^{s[1]-1}x\left[m_{0},m_{1}\right]\exp\left(-j\frac{2\pi k_{0}m_{0}}{s[0]}\right)\exp\left[-j\frac{2\pi k_{1}m_{1}}{s\left[1\right]}\right]\] + +\end_inset + + and can be realized by repeated application of the 1-d fft (first over + the axes[0] and then over axes[1]). + In other-words fft2(x,s,axes) is equivalent to fft(fft(x, s[0], axes[0]), + s[1], axes[1]). + The 2-d fft is returned for +\begin_inset Formula $k_{0}=0\ldots s[0]-1$ +\end_inset + + and +\begin_inset Formula $k_{1}=0\ldots s[1]-1.$ +\end_inset + + Symmetry ( +\begin_inset Formula $X\left[s[0]-k_{0},s[1]-k_{1}\right]=X[-k_{0},-k_{1}]$ +\end_inset + +) ensures that higher values of +\begin_inset Formula $k_{i}$ +\end_inset + + correspond to negative frequencies. + +\end_layout + +\begin_layout Description +ifft2 (X, s=None, axes=(-2,-1)) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the inverse of the two-dimension fft. + Thus, ifft2(fft2(x)) == x to within numerical precision. + Note that the +\begin_inset Quotes eld +\end_inset + +negative frequencies +\begin_inset Quotes erd +\end_inset + + must be +\end_layout + +\begin_layout Description +fftn (x, s=None, axes=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the +\begin_inset Formula $N$ +\end_inset + +-dimensional fft of x. + If s is not given, then if axes is given, then +\begin_inset Formula $N$ +\end_inset + +=len(axes), otherwise +\begin_inset Formula $N$ +\end_inset + +=x.ndim. + If s is given, then +\begin_inset Formula $N$ +\end_inset + +=len(s). + Results are computed using a similar formula as for the 1- and 2-d FFT + with +\begin_inset Formula $N$ +\end_inset + + summations. + +\end_layout + +\begin_layout Description +ifftn (X, s=None, axes=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the +\begin_inset Formula $N$ +\end_inset + +-dimensional inverse fft of +\begin_inset Formula $X$ +\end_inset + +. + Note that ifftn(fftn(x)) == x to within machine precision. + +\end_layout + +\begin_layout Standard +The Discrete Fourier transform returns complex-valued data (even for real-valued + input). + If the data was originally real-valued, then much of the output of the + full DFT is redundant. + Notice that if +\begin_inset Formula $x\left[m\right]$ +\end_inset + + is real, then +\begin_inset Formula \begin{eqnarray*} +X\left[n-k\right] & = & \sum_{m=0}^{n-1}x[m]\exp\left(-j\frac{2\pi\left(n-k\right)m}{n}\right)\\ + & = & \left[\sum_{m=0}^{n-1}x\left[m\right]\exp\left(-j\frac{2\pi km}{n}\right)\right]^{*}\\ + & = & X^{*}\left[k\right],\end{eqnarray*} + +\end_inset + +where +\begin_inset Formula $a^{*}$ +\end_inset + + denotes the complex-conjugate of +\begin_inset Formula $a$ +\end_inset + +. + So, the upper half of the fft output (the negative frequencies) is determined + exactly by the lower half of the output when the input is purely real. + This kind of symmetry is called Hermitian symmetry. + The real-valued Fourier transforms described next take advantage of Hermitian + symmetry to compute only the unique outputs more quickly. + +\end_layout + +\begin_layout Standard +The symmetry in higher dimensions is always about the origin. + If +\begin_inset Formula $N$ +\end_inset + + is the number of dimensions, then: +\begin_inset Formula \[ +X[n_{1}-k_{1},n_{2}-k_{2},\ldots n_{N}-k_{N}]=X^{*}\left[k_{1},k_{2},\ldots,k_{N}\right].\] + +\end_inset + +Thus, the data-savings remains constant at about 1/2 for higher dimensions + as well. + +\end_layout + +\begin_layout Description +rfft (x, n=None, axis=-1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute the first n//2+1 points of the +\begin_inset Formula $n$ +\end_inset + +-point discrete Fourier transform of the real valued data along the given + axis. + The returned array will be just the first half of the +\family typewriter +fft +\family default +, corresponding to positive frequencies: rfft(x) == fft(x)[:n//2+1] +\end_layout + +\begin_layout Description +irfft (X, n=None, axis=-1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute the inverse +\begin_inset Formula $n$ +\end_inset + +-point discrete Fourier transform along the given axis using the first n//2+1 + points. + To within numerical precision, irfft(rfft(x))==x. + +\end_layout + +\begin_layout Description +rfft2 (x, s=None, axes=(-2, -1)) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute only the first half-plane of the two-dimensional discrete Fourier + transform corresponding to unique values. + s[0] and +\begin_inset Formula $s[1]$ +\end_inset + +-point DFTs will be computed along axes[0] and axes[1] dimensions, respectively. + Requires a real array. + If +\begin_inset Formula $s$ +\end_inset + + is None it defaults to the shape of +\begin_inset Formula $x.$ +\end_inset + + The real fft will be computed along the last axis specified in axes while + a full fft will be computed in the other dimension. +\end_layout + +\begin_layout Description +irfft2 (X, s=None, axes=(-2, -1)) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute the inverse of the 2-d DFT using only the first quadrant. + Returns a real array such that to within numerical precision irfft2(rfft2(x))== +x. +\end_layout + +\begin_layout Description +rfftn (x, s=None, axes=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute only the unique part of the +\begin_inset Formula $N$ +\end_inset + +-dimensional DFT from a real-valued array. + If +\begin_inset Formula $s$ +\end_inset + + is None it defaults to the shape of x. + If axes is not given it defaults to all the axes (-n, +\begin_inset Formula $\ldots$ +\end_inset + +, -1). + The length of axes provides the dimensionality of the DFT. + The unique part of the real +\begin_inset Formula $N$ +\end_inset + +-dimensional DFT is obtained by slicing the full fft along the last axis + specified and taking n//2+1 slices. + rfftn(x) == fft(x)[sliceobj] where sliceobj[axes[-1]] = slice(None,s[-1]//2+1,N +one). +\end_layout + +\begin_layout Description +irfftn (X, s=None, axes=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Compute the inverse DFT from the unique portions of the N-dimensional DFT + provided by +\family typewriter +rfftn +\family default +. +\end_layout + +\begin_layout Standard +Occasionally, the situation may arise where you have complex-valued data + with Hermitian symmetry (or real-valued symmetric data). + This ensures that the Fourier transform will be real. + The two functions below can calculate it without wasting extra space for + the zero-valued imaginary entries of the Discrete Fourier transform, or + the entire signal. +\end_layout + +\begin_layout Description +hfft (x, n=None, axis=-1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Calculate the +\begin_inset Formula $n$ +\end_inset + +-point real-valued Fourier transform from (the first half of Hermitian-symmetric + data, x. + +\end_layout + +\begin_layout Description +ihfft (X, n=None, axis=-1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return (the first half-of) Hermitian-symmetric data from the real-valued + Fourier transform, X. +\begin_inset LatexCommand index +name "fft|)" + +\end_inset + + +\end_layout + +\begin_layout Section +Random Numbers ( +\family typewriter +random +\family default +) +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "random|(" + +\end_inset + +The random number capabilities surpass those that were available in Numeric. + The random number facilities were generously contributed by Robert Kern, + who has been a dedicated and patient help to many mailing list questioners. + Robert built the random package using Pyrex to build on top of his own + code as well as that of randomkit by Jean-Sebastien Roy as well as code + by Ivan Frohne. + The fundamental random number generator is the Mersenne Twister based on + code written by Makoto Matsumoto and Takuji Nishimura (and modified for + Python by Raymond Hettinger). + Random numbers from discrete and continuous distributions are available, + as well as some useful random-number-related utilities. + Many of the random number generators are based on algorithms published + by Luc Devroye in +\begin_inset Quotes eld +\end_inset + +Non-Uniform Random Variate Generation +\begin_inset Quotes erd +\end_inset + + available electronically at +\begin_inset LatexCommand htmlurl +target "http://cgm.cs.mcgill.ca/~luc/rnbookindex.html" + +\end_inset + + +\end_layout + +\begin_layout Standard +Each of the discrete and continuous random number generators take a size + keyword. + If this is None (default), then the size is determined from the additional + inputs (using ufunc-like broadcasting). + If no additional inputs are needed, or if these additional inputs are scalars, + then a single number is generated from the selected distribution. + If size is an integer, then a 1-d array of that size is generated filled + with random numbers from the selected distribution. + Finally, if size is a tuple, then an array of that shape is returned filled + with random numbers. + +\end_layout + +\begin_layout Standard +Many distributions take additional inputs as parameters. + These additional inputs must be broadcastable to each other (and to the + size parameter if it is not None). + The broadcasting behavior of the additional inputs is ufunc-like. + +\end_layout + +\begin_layout Subsection +Discrete Distributions +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "random!discrete|(" + +\end_inset + +Discrete random numbers take on only a countable number of values (typically + integers). + Each distribution has associated with it a probability mass function (pmf), + +\begin_inset Formula $p_{m}\left(k;\cdot\right),$ +\end_inset + + that is defined as the probability that the returned random number is +\begin_inset Formula $k$ +\end_inset + +. + The arguments after +\begin_inset Formula $k$ +\end_inset + + represent possible parameters to the distribution. + Thus, let +\begin_inset Formula $X\left(\cdot\right)$ +\end_inset + + represent the random number generator for a particular distribution. + Then, +\begin_inset Formula \[ +p_{m}\left(k;\cdot\right)=\textrm{Probability}\left\{ X\left(\cdot\right)=k\right\} .\] + +\end_inset + + +\end_layout + +\begin_layout Standard +It will be useful to define the discrete indicator function, +\begin_inset Formula $I_{S}\left(k\right),$ +\end_inset + + where +\begin_inset Formula $S$ +\end_inset + + is a set of integers (often represented by an interval). + +\begin_inset Formula $I_{S}\left(k\right)=1$ +\end_inset + + if +\begin_inset Formula $k\in S$ +\end_inset + +, otherwise +\begin_inset Formula $I_{S}\left(k\right)=0.$ +\end_inset + + This convenient notation isolates the relevance of a particular functional + form to a certain range. + Also, the formulas below make use of the following definition: +\begin_inset Formula \[ +\left(\begin{array}{c} +n\\ +k\end{array}\right)=\frac{n!}{k!\left(n-k\right)!}\] + +\end_inset + + where +\begin_inset Formula $k!=k\cdot\left(k-1\right)\cdot\cdots\cdot2\cdot1.$ +\end_inset + + +\end_layout + +\begin_layout Description +binomial (n, p, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This random number models the number of successes in +\begin_inset Formula $n$ +\end_inset + + independent trials of a random experiment where the probability of success + in each experiment is +\begin_inset Formula $p$ +\end_inset + +. + +\begin_inset Formula \[ +p_{m}\left(k\right)=\left(\begin{array}{c} +n\\ +k\end{array}\right)p^{k}\left(1-p\right)^{n-k}I_{\left[0,n\right]}\left(k\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +geometric (p, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This random number models the number of (independent) attempts required + to obtain a success where the probability of success on each attempt is + +\begin_inset Formula $p$ +\end_inset + +. + +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +p_{m}\left(k;p\right)=\left(1-p\right)^{k-1}p\, I_{\left[1,\infty\right)}\left(k\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +hypergeometric (ngood, nbad, nsample, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Imagine a probability theorists favorite urn filled with +\begin_inset Formula $n_{g}$ +\end_inset + + +\begin_inset Quotes eld +\end_inset + +good +\begin_inset Quotes erd +\end_inset + + objects and +\begin_inset Formula $n_{b}$ +\end_inset + + +\begin_inset Quotes eld +\end_inset + +bad +\begin_inset Quotes erd +\end_inset + + objects. + In other words there are two types of objects in a jar. + The hypergeometric random number models how many +\begin_inset Quotes eld +\end_inset + +good +\begin_inset Quotes erd +\end_inset + + objects will be present when +\begin_inset Formula $N$ +\end_inset + + items are taken out of the urn without replacement. +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +p\left(k;n_{g},n_{b},N\right)=\frac{\left(\begin{array}{c} +n_{g}\\ +k\end{array}\right)\left(\begin{array}{c} +n_{b}\\ +N-k\end{array}\right)}{\left(\begin{array}{c} +n_{g}+n_{b}\\ +N\end{array}\right)}I_{\left[N-n_{b},\textrm{min}\left(n,N\right)\right]}\left(k\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +logseries (p, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A random number whose pmf with terms proportional to the Taylor series + expansion of +\begin_inset Formula $\log\left(1-p\right)$ +\end_inset + +. + It has been used in biological studies to model the species abundance distribut +ion. + +\begin_inset Formula \[ +p_{m}\left(k;p\right)=-\frac{p^{k}}{k\log\left(1-p\right)}\, I_{\left[1,\infty\right)}\left(k\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +multinomial (n, pvals, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This generator produces random vectors of length +\begin_inset Formula $N$ +\end_inset + + where +\begin_inset Formula $N=\textrm{len}\left(pvals\right)$ +\end_inset + +. + The shape of the returned array is always the shape indicated by size + + ( +\begin_inset Formula $N,$ +\end_inset + +). + The multinomial distribution is a generalization of the binomial distribution. + This time, +\begin_inset Formula $n$ +\end_inset + + trials of an experiment are independently repeated but each trial results + in +\begin_inset Formula $N$ +\end_inset + + possible integers +\begin_inset Formula $k_{1},k_{2},\ldots,k_{N}$ +\end_inset + + with +\begin_inset Formula $\sum_{i=1}^{N}k_{i}=n.$ +\end_inset + + +\begin_inset Formula \begin{eqnarray*} +p_{m}\left(k_{1},k_{2},\ldots,k_{N};\cdot\right) & = & \textrm{Probability}\left\{ X\left(\cdot\right)=\left[k_{1},k_{2},\cdots,k_{N}\right]\right\} \\ + & = & \frac{n!}{k_{1}!k_{2}!\cdots k_{N}!}p_{1}^{k_{1}}p_{2}^{k_{2}}\cdots p_{N}^{k_{N}}\end{eqnarray*} + +\end_inset + +where +\begin_inset Formula $pvals=[p_{1},p_{2},\ldots,p_{N}].$ +\end_inset + + It must be true that +\begin_inset Formula $\sum_{i=1}^{N}p_{i}=1.$ +\end_inset + + Therefore, as long as +\begin_inset Formula $\sum_{i=1}^{N-1}p_{i}\leq1,$ +\end_inset + + the last entry in +\begin_inset Formula $pvals$ +\end_inset + + is computed as +\begin_inset Formula $1-\sum_{i=1}^{N-1}p_{i}$ +\end_inset + +. +\end_layout + +\begin_layout Description +negative_binomial (n, p, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Models the number of extra independent trials (beyond +\begin_inset Formula $n$ +\end_inset + +) required to accumulate a total of +\begin_inset Formula $n$ +\end_inset + + successes where the probability of success on each trial is +\begin_inset Formula $p.$ +\end_inset + + Equivalently, this random number models the number of failures encountered + while accumulating +\begin_inset Formula $n$ +\end_inset + + successes during independent trials of the experiment that succeeds with + probability, +\begin_inset Formula $p$ +\end_inset + +. + +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +p_{m}\left(k;n,p\right)=\left(\begin{array}{c} +k+n-1\\ +n-1\end{array}\right)p^{n}\left(1-p\right)^{k}\, I_{\left[0,\infty\right)}\left(k\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +poisson (lam=1.0, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This random number counts the number of successes in +\begin_inset Formula $n$ +\end_inset + + independent experiments (where the probability of success in each experiment + is +\begin_inset Formula $p$ +\end_inset + +) in the limit as +\begin_inset Formula $n\rightarrow\infty$ +\end_inset + + and +\begin_inset Formula $p\rightarrow0$ +\end_inset + + gets very small such that +\begin_inset Formula $\lambda=np\geq0$ +\end_inset + + is a constant. + It can be used, for example, to model how many typographical errors are + on each page of a book. +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +p\left(k;\lambda\right)=e^{-\lambda}\frac{\lambda^{k}}{k!}\, I_{\left[0,\infty\right)}\left(k\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +zipf (a, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + The probability mass function of this random number (also called the zeta + distribution) is +\begin_inset Formula \[ +p_{m}\left(k;a\right)=\frac{1}{\zeta\left(a\right)k^{a}}\, I_{\left[1,\infty\right)}\left(k\right),\] + +\end_inset + +where +\begin_inset Formula \[ +\zeta\left(a\right)=\sum_{n=1}^{\infty}\frac{1}{n^{a}}\] + +\end_inset + +is the Riemann zeta function. + Zipf distributions have been shown to characterize use of words in a natural + language (like English), the popularity of library books, and even the + use of the web. + The Zipf distribution describes collections that have a few items whose + probability of selection is very high, a medium number of items whose probabili +ty of selection is medium, and a huge number of items whose probability + of selection is very low. +\begin_inset LatexCommand index +name "random!discrete|)" + +\end_inset + + +\end_layout + +\begin_layout Subsection +Continuous Distributions +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "random!continuous|(" + +\end_inset + +Continuous random numbers can take on an uncountable number of values. + Therefore, the value returned by a continuous distribution is denoted +\begin_inset Formula $x$ +\end_inset + +. + Because there is an uncountable number of possibilities for the random + number +\begin_inset Foot +status open + +\begin_layout Standard +A computer actually always generates a random number from a discrete distributio +n because there are only a finite set of numbers that can be represented + by a computer. + However, for continuous random number generators, the resulting random + numbers usually approximate the continuous distribution well enough to + ignore the subtlety. +\end_layout + +\end_inset + +, a continuous distribution is modeled by a probability density function, + +\begin_inset Formula $f\left(x;\cdot\right).$ +\end_inset + + To obtain the probability that the random number generated by +\begin_inset Formula $X\left(\cdot\right)$ +\end_inset + + is in a certain interval, we integrate this density function: +\begin_inset Formula \[ +\int_{-\infty}^{b}f\left(x\right)dx=\textrm{Probability}\left\{ X\left(\cdot\right)\leq b\right\} .\] + +\end_inset + + +\end_layout + +\begin_layout Standard +To obtain a probability, we have to integrate +\begin_inset Formula $f\left(x\right)$ +\end_inset + + which is why it is called a density function. + Most continuous distributions are defined by their probability density + functions (pdf). + Some have basic origins, a few are derived from other distributions, and + some are used mainly for modelling unknown distributions. + +\end_layout + +\begin_layout Standard +Some of the parameters of the distributions are labeled as location ( +\emph on +loc +\emph default +) and +\emph on +scale +\emph default + parameters. + These parameters are not shown in the equation for the pdf. + because they affect the distribution in a known way. + This is due to the fact that if +\begin_inset Formula $X$ +\end_inset + + is a number drawn from a distribution with pdf +\begin_inset Formula $f_{X}\left(x\right),$ +\end_inset + + then +\begin_inset Formula $Y=Sx+L$ +\end_inset + + is a number drawn from a distribution with pdf +\begin_inset Formula \[ +f_{Y}\left(y\right)=\frac{1}{S}f_{X}\left(\frac{y-L}{S}\right).\] + +\end_inset + + Thus, from the standard from provided, the pdf of the actual random numbers + generated by fixing the location and scale parameters can be quickly found. +\end_layout + +\begin_layout Standard +In this section, the indicator function +\begin_inset Formula $I_{A}\left(x\right)$ +\end_inset + + will be used where +\begin_inset Formula $A$ +\end_inset + + is a set defined over all the real numbers. + For clarity, +\begin_inset Formula \[ +I_{A}\left(x\right)=\left\{ \begin{array}{cc} +1 & x\in A,\\ +0 & x\not\in A.\end{array}\right.\] + +\end_inset + + Also, the following functions are used in the definitions: +\begin_inset Formula \begin{eqnarray*} +\Gamma\left(x\right) & = & \int_{0}^{\infty}t^{x-1}e^{-t}dt=\left(x-1\right)\Gamma\left(x-1\right),\\ +B\left(a,b\right) & = & \frac{\Gamma\left(a\right)\Gamma\left(b\right)}{\Gamma\left(a+b\right)}.\end{eqnarray*} + +\end_inset + + +\end_layout + +\begin_layout Description +beta ( +\begin_inset Formula $a$ +\end_inset + +, +\begin_inset Formula $b$ +\end_inset + +, size=None) +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +f\left(x;a,b\right)=\frac{1}{B\left(a,b\right)}x^{a-1}\left(1-x\right)^{b-1}I_{\left(0,1\right)}\left(x\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +chisquare ( +\begin_inset Formula $\nu$ +\end_inset + +, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + If +\begin_inset Formula $Z_{1},\ldots,Z_{\nu}$ +\end_inset + + are random numbers from standard normal distributions, then +\begin_inset Formula $W=\sum_{k=1}^{\nu}Z_{k}^{2}$ +\end_inset + + is a random number from the chi-square +\begin_inset Formula $\left(\chi^{2}\right)$ +\end_inset + + distribution with +\begin_inset Formula $\nu$ +\end_inset + + degrees of freedom. + +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +f\left(x;\nu\right)=\frac{1}{2\Gamma\left(\frac{\nu}{2}\right)}\left(\frac{x}{2}\right)^{\nu/2-1}e^{-x/2}I_{\left[0,\infty\right)}\left(x\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +dirichlet ( +\begin_inset Formula $\boldsymbol{\alpha},$ +\end_inset + + size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A vector of random numbers which are drawn from a multivariate Dirichlet + distribution. + The length of the parameter vector, +\begin_inset Formula $\boldsymbol{\alpha},$ +\end_inset + + is the length, +\begin_inset Formula $N$ +\end_inset + +, of the random vector. + The joint pdf is: +\end_layout + +\begin_layout Description +\begin_inset Formula \[ +f\left(\mathbf{x},\boldsymbol{\alpha}\right)=\frac{\prod_{i=1}^{N}\Gamma\left(\alpha_{i}\right)}{\Gamma\left(\sum_{i=1}^{N}\alpha_{i}\right)}\prod_{i=1}^{N}x_{i}^{\alpha_{i}-1}.\] + +\end_inset + + +\series medium + +\end_layout + +\begin_layout Description +exponential (scale=1.0, size=None) +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +f\left(x\right)=e^{-x}I_{\left[0,\infty\right)}\left(x\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +f ( +\begin_inset Formula $\nu_{1}$ +\end_inset + +, +\begin_inset Formula $\nu_{2}$ +\end_inset + +, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + The distribution of +\begin_inset Formula $\frac{X_{1}/\nu_{1}}{X_{2}/\nu_{2}}$ +\end_inset + + where +\begin_inset Formula $X_{i}$ +\end_inset + + is chi-squared with +\begin_inset Formula $\nu_{i}$ +\end_inset + + degrees of freedom. +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +f\left(x;\nu_{1},\nu_{2}\right)=\frac{\nu_{2}^{\nu_{2}/2}\nu_{1}^{\nu_{1}/2}x^{\nu_{1}/2-1}}{\left(\nu_{2}+\nu_{1}x\right)^{\left(\nu_{1}+\nu_{2}\right)/2}B\left(\frac{\nu_{1}}{2},\frac{\nu_{2}}{2}\right)}I_{\left[0,\infty\right)}\left(x\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +gamma ( +\begin_inset Formula $a$ +\end_inset + +, scale=1.0, size=None) +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +f\left(x;a\right)=\frac{1}{\Gamma\left(a\right)}x^{a-1}e^{-x}I_{\left[0,\infty\right)}\left(x\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +gumbel (loc=0.0, scale=1.0, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A right-skewed extreme value distribution. + +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +f\left(x\right)=\exp\left[-x-e^{-x}\right].\] + +\end_inset + + +\end_layout + +\begin_layout Description +laplace (loc=0.0, scale=1.0, size=None) +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +f\left(x\right)=\frac{1}{2}e^{-\left|x\right|}.\] + +\end_inset + + +\end_layout + +\begin_layout Description +lognormal ( +\begin_inset Formula $\mu$ +\end_inset + +=0.0, +\begin_inset Formula $\sigma$ +\end_inset + +=1.0, size=None) +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +f\left(x;\mu,\sigma\right)=\frac{1}{\sigma x\sqrt{2\pi}}\exp\left[-\frac{1}{2}\left(\frac{\log x-\mu}{\sigma}\right)^{2}\right]I_{\left[0,\infty\right)}\left(x\right),\] + +\end_inset + +The parameters, +\begin_inset Formula $\mu$ +\end_inset + + and +\begin_inset Formula $\sigma$ +\end_inset + + are not the mean and variance of this distribution, but the parameters + of the underlying normal distribution. + Random numbers from this distribution are generated as +\begin_inset Formula $e^{\sigma Z+\mu}$ +\end_inset + + where +\begin_inset Formula $Z$ +\end_inset + + is a standard normal random number. + +\end_layout + +\begin_layout Description +logistic (loc=0.0, scale=1.0, size=None) +\begin_inset Formula \[ +f\left(x\right)=\frac{e^{-x}}{\left[1+e^{-x}\right]^{2}}I_{\left[0,\infty\right)}\left(x\right)\] + +\end_inset + + +\end_layout + +\begin_layout Description +multivariate_normal ( +\begin_inset Formula $\mathbf{\boldsymbol{\mu}}$ +\end_inset + +, +\begin_inset Formula $\mathbf{C}$ +\end_inset + +, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns a vector of random numbers which are jointly drawn from a multivariate + normal distribution. + The last-dimension of the output array contains the sample vector, which + is of length +\begin_inset Formula $N=\textrm{len}\left(mean\right).$ +\end_inset + + The covariance matrix must be +\begin_inset Formula $N\times N$ +\end_inset + +. + If +\begin_inset Formula $\boldsymbol{\mu}\equiv mean$ +\end_inset + + and +\begin_inset Formula $\mathbf{C}=cov$ +\end_inset + +, then the joint-pdf representing the returned random vector(s) is +\begin_inset Formula \[ +f\left(\mathbf{x}\right)=\frac{1}{\sqrt{\left(2\pi\right)^{N}\left|\mathbf{C}\right|}}\exp\left[-\frac{1}{2}\left(\mathbf{x}-\boldsymbol{\mu}\right)^{T}\mathbf{C}^{-1}\left(\mathbf{x}-\boldsymbol{\mu}\right)\right].\] + +\end_inset + + +\end_layout + +\begin_layout Description +noncentral_chisquare ( +\begin_inset Formula $\nu$ +\end_inset + +, +\begin_inset Formula $\lambda$ +\end_inset + +, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This is the distribution of +\begin_inset Formula $\sum_{i=1}^{\nu}\left(Z_{i}+\delta_{i}\right)^{2}$ +\end_inset + + where +\begin_inset Formula $Z_{i}$ +\end_inset + + are independent standard normal random numbers and +\begin_inset Formula $\delta_{i}$ +\end_inset + + are constants. + It is a a generalized Rayleigh-Rice distribution: +\end_layout + +\begin_deeper +\begin_layout Standard +\begin_inset Formula \[ +f\left(x;\nu,\lambda\right)=e^{-\left(\lambda+x\right)/2}\frac{1}{2}\left(\frac{x}{\lambda}\right)^{\left(\nu-2\right)/4}I_{\left(\nu-2\right)/2}\left(\sqrt{\lambda x}\right)I_{\left(0,\infty\right)}\left(x\right),\] + +\end_inset + + where +\begin_inset Formula $I_{\nu}\left(z\right)$ +\end_inset + + (a real-number in the subscript, not an interval) is the modified Bessel + Function of the first kind. + +\end_layout + +\end_deeper +\begin_layout Description +noncentral_f ( +\begin_inset Formula $\nu_{1}$ +\end_inset + +, +\begin_inset Formula $\nu_{2}$ +\end_inset + +, +\begin_inset Formula $\lambda$ +\end_inset + +, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + The pdf of this distribution is +\begin_inset Formula \begin{eqnarray*} +f\left(x;\nu_{1},\nu_{2},\lambda\right) & = & \exp\left[\frac{\lambda}{2}+\frac{\lambda v_{1}x}{2\left(\nu_{1}x+\nu_{2}\right)}\right]\nu_{1}^{\nu_{1}/2}\nu_{2}^{\nu_{2}/2}x^{\nu_{1}/2-1}\\ + & & \times\left(\nu_{2}+\nu_{1}x\right)^{-\left(\nu_{1}+\nu_{2}\right)/2}\\ + & & \times\frac{\Gamma\left(\frac{\nu_{1}}{2}\right)\Gamma\left(1+\frac{\nu_{2}}{2}\right)L_{n_{2}/2}^{n_{1}/2-1}\left(-\frac{\lambda\nu_{1}x}{2\left(\nu_{1}x+\nu_{2}\right)}\right)}{B\left(\frac{\nu_{1}}{2},\frac{\nu_{2}}{2}\right)\Gamma\left(\frac{\nu_{1}+\nu_{2}}{2}\right)}.\end{eqnarray*} + +\end_inset + + +\end_layout + +\begin_layout Description +normal (loc=0.0, scale=1.0, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + The normal, or Gaussian, distribution is the limiting distribution of independe +nt samples from any sufficiently well-behaved distributions (this is the + content of the celebrated central limit theorem). + The normal distribution is also the distribution of maximum entropy when + the mean and variance alone are fixed. + These two facts account for its name as well as the wide variety of situations + that can be usefully modelled using the normal distribution. + Because it is so widely used, the full pdf with the location +\begin_inset Formula $\left(\mu\right)$ +\end_inset + + and scale +\begin_inset Formula $\left(\sigma\right)$ +\end_inset + + parameters is provided: +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +f\left(x\right)=\frac{1}{\sigma\sqrt{2\pi}}\exp\left[-\frac{\left(x-\mu\right)^{2}}{2\sigma^{2}}\right].\] + +\end_inset + + +\end_layout + +\begin_layout Description +pareto ( +\begin_inset Formula $a$ +\end_inset + +, size=None) +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +f\left(x;a\right)=\frac{a}{x^{a+1}}I_{\left[1,\infty\right)}\left(x\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +power ( +\begin_inset Formula $a$ +\end_inset + +, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A special case of the beta distribution with +\begin_inset Formula $b=1.$ +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +f\left(x;a\right)=ax^{a-1}I_{\left[0,1\right]}\left(x\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +rand ( +\begin_inset Formula $d_{1}$ +\end_inset + +, +\begin_inset Formula $d_{2}$ +\end_inset + +, +\begin_inset Formula $\ldots$ +\end_inset + +, +\begin_inset Formula $d_{n}$ +\end_inset + +) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A convenient interface to obtain an array of shape +\begin_inset Formula $\left(d_{1},d_{2},\ldots,d_{n}\right)$ +\end_inset + + of uniform random numbers in the interval +\begin_inset Formula $\left[0,1\right).$ +\end_inset + + Notice the different convention for passing in the shape (as separate arguments + instead of a tuple). + The standard convention is used in the function numpy.random.random(shape) + for which this function is merely a convenient short-hand. + If you have a tuple named shape, then rand(*shape) will work correctly. +\end_layout + +\begin_layout Description +randint (low, high=None, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equally probably random integers in the range +\begin_inset Formula $low\leq x<high$ +\end_inset + +. + If +\begin_inset Formula $high$ +\end_inset + + is None, then the range is +\begin_inset Formula $0\leq x<low$ +\end_inset + +. + Similar to random_integers, but check the difference on the bounds. +\end_layout + +\begin_layout Description +randn ( +\begin_inset Formula $d_{1}$ +\end_inset + +, +\begin_inset Formula $d_{2}$ +\end_inset + +, +\begin_inset Formula $\ldots$ +\end_inset + +, +\begin_inset Formula $d_{n}$ +\end_inset + +) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A convenient interface to obtain an array of shape +\begin_inset Formula $\left(d_{1},d_{2},\ldots,d_{n}\right)$ +\end_inset + + of standard normal +\begin_inset Formula $\left(\mu=0,\,\sigma=1\right)$ +\end_inset + + random numbers. + Notice the different convention for passing in the shape (as separate arguments + intead of a tuple). + The standard convention is used in the function numpy.random.standard_normal(shap +e) for which this function is merely a convenient short-hand. + If you have a tuple named shape, then randn(*shape) will work correctly. +\end_layout + +\begin_layout Description +random_integers (low, high=None, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Equally probably random integers in the range +\begin_inset Formula $low\leq x\leq high$ +\end_inset + +. + If high is None, then the range is +\begin_inset Formula $1\leq x\leq low$ +\end_inset + +. + Similar to randint, but check the difference on the bounds. +\end_layout + +\begin_layout Description +rayleigh (scale=1.0, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Rayleigh-distributed random numbers can be obtained as +\begin_inset Formula $X=\sqrt{Z_{1}^{2}+Z_{2}^{2}}$ +\end_inset + + where +\begin_inset Formula $Z_{i}$ +\end_inset + + are independent standard normal random numbers. + The scale parameter is also the mode of the distribution (the value of + +\begin_inset Formula $X$ +\end_inset + + with highest probability). + +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +f\left(x\right)=xe^{-x^{2}/2}I_{[0,\infty)}\left(x\right)\] + +\end_inset + + +\end_layout + +\begin_layout Description +standard_cauchy (size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A Cauchy distribution is a heavy-tailed distribution with no variance. + It's distribution is that of the ratio of two standard normal distributions + +\begin_inset Formula $Z_{1}/Z_{2}.$ +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +f\left(x\right)=\frac{1}{\pi\left(1+x^{2}\right)}.\] + +\end_inset + + +\end_layout + +\begin_layout Description +standard_exponential (size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A standard exponetial random number with scale=1.0. + The pdf was given under the description of +\family typewriter +random.exponential +\family default +. +\end_layout + +\begin_layout Description +standard_gamma ( +\begin_inset Formula $a$ +\end_inset + +, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A standard gamma random number with scale=1.0. + The pdf was given under the description of +\family typewriter +random.gamma +\family default +. +\end_layout + +\begin_layout Description +standard_normal (size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A zero-mean, unit-variance, normally distributed random number often denoted + +\begin_inset Formula $Z.$ +\end_inset + + +\begin_inset Formula \[ +f\left(x\right)=\frac{1}{\sqrt{2\pi}}e^{-x^{2}/2}.\] + +\end_inset + + +\end_layout + +\begin_layout Description +standard_t ( +\begin_inset Formula $\nu$ +\end_inset + +, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Often called Student's t distribution, this random number distribution + arises in the problem of estimating the mean of normally distributed samples + when the sample-size is small. + The first parameter, +\begin_inset Formula $\nu$ +\end_inset + +, is the number of degrees of freedom of the distribution. + +\begin_inset Formula \[ +f\left(x;\nu\right)\frac{\Gamma\left(\frac{\nu+1}{2}\right)}{\sqrt{\pi\nu}\Gamma\left(\frac{\nu}{2}\right)\left[1+\frac{x^{2}}{\nu}\right]^{\frac{\nu+1}{2}}}.\] + +\end_inset + + +\end_layout + +\begin_layout Description +triangular (left, mode, right, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns random numbers according to a triangularly-shaped density that + starts at left, peaks at mode, and ends at right. +\end_layout + +\begin_layout Description +uniform (low=0.0, high=1.0, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns random numbers that are equally probable over the range +\begin_inset Formula $\left[low,\, high\right).$ +\end_inset + + +\end_layout + +\begin_layout Description +vonmises ( +\begin_inset Formula $\mu$ +\end_inset + +, +\begin_inset Formula $\kappa$ +\end_inset + +, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A continuous distribution that is well suited for circular attributes such + as angles, time of day, day of the year, etc. + The mean direction is +\begin_inset Formula $\mu$ +\end_inset + + and concentration (or dispersion) parameter is +\begin_inset Formula $\kappa.$ +\end_inset + + For small +\begin_inset Formula $\kappa$ +\end_inset + + the distribution tends towards a uniform distribution over +\begin_inset Formula $\left[-\pi,\pi\right].$ +\end_inset + + For large +\begin_inset Formula $\kappa$ +\end_inset + +, the distribution tends towards a normal distribution with mean +\begin_inset Formula $\mu$ +\end_inset + + and variance +\begin_inset Formula $1/\kappa.$ +\end_inset + + +\begin_inset Formula \[ +f\left(x\right)=\frac{e^{\kappa\cos\left(x-\mu\right)}}{2\pi I_{0}\left(\kappa\right)}I_{\left[-\pi,\pi\right]}\left(x\right).\] + +\end_inset + + +\end_layout + +\begin_layout Description +wald ( +\begin_inset Formula $\mu$ +\end_inset + +, +\begin_inset Formula $\lambda$ +\end_inset + +, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + This distribution is also called the inverse Gaussian distribution (and + the Wald distribution considered as a special case when +\begin_inset Formula $\mu=\lambda$ +\end_inset + +). + It can be generated by noticing that if +\begin_inset Formula $X$ +\end_inset + + is a wald random number then +\begin_inset Formula $\frac{\lambda\left(X-\mu\right)^{2}}{\mu^{2}X}$ +\end_inset + + is the square of a standard normal random number (i.e. + it is chi-square with one degree of freedom). + The pdf is +\begin_inset Formula \[ +f\left(x\right)=\sqrt{\frac{\lambda}{2\pi x^{3}}}e^{-\frac{\lambda\left(x-\mu\right)^{2}}{2\mu^{2}x}}.\] + +\end_inset + + +\end_layout + +\begin_layout Description +weibull ( +\begin_inset Formula $a$ +\end_inset + +, size=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + An extreme-value distribution: +\end_layout + +\begin_layout Standard +\begin_inset Formula \[ +f\left(x;c\right)=ax^{a-1}\exp\left(-x^{a}\right)I_{\left(0,\infty\right)}\left(x\right).\] + +\end_inset + + +\end_layout + +\begin_layout Subsection +Miscellaneous utilities +\end_layout + +\begin_layout Description +bytes (length) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a string of random bytes of the provided length. +\end_layout + +\begin_layout Description +get_state () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an object that holds the state of the random number generator (allows + you to restart simulations where you left off). +\end_layout + +\begin_layout Description +set_state (state) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Set the state of the random number generator. + The argument should be the returned object of a previous get_state command. +\end_layout + +\begin_layout Description +shuffle (sequence) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Randomly permute the items of any sequence. + If sequence is an array, then it must be 1-d. +\end_layout + +\begin_layout Description +permutation (n) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a permutation of the integers from 0 to n-1. + +\begin_inset LatexCommand index +name "random!continuous|)" + +\end_inset + + +\begin_inset LatexCommand index +name "random|)" + +\end_inset + + +\end_layout + +\begin_layout Section +Matrix-specific functions (matlib) +\end_layout + +\begin_layout Standard +This module contains functions that are geared specifically toward matrix + objects. + In particular it includes the functions +\series bold +empty +\series default +, +\series bold +ones +\series default +, +\series bold +zeros +\series default +, +\series bold +identity +\series default +, +\series bold +eye +\series default +, +\series bold +rand +\series default +, and +\series bold +randn +\series default + each of which returns a matrix object by default instead of an ndarray + object. +\end_layout + +\begin_layout Section +Ctypes utiltity functions (ctypeslib) +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "ctypeslib" + +\end_inset + +This module contains utility functions that make it easier to work with + the ctypes module. + +\end_layout + +\begin_layout Description +load_library (name, path) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Load a shared library named +\begin_inset Quotes eld +\end_inset + +name +\begin_inset Quotes erd +\end_inset + + (use the full name including any prefix but excluding the extension) located + in the directory indicated by path and return a ctypes library object whose + attributes are the functions in the library. + If ctypes is not available, this function will raise an ImportError. + If there is an error loading the library, ctypes raises an OSError. + The extension is appended to the library name (on a platform-dependent + basis) unless the name includes the +\begin_inset Quotes eld +\end_inset + +. +\begin_inset Quotes erd +\end_inset + + character in which case name is assumed to be the +\begin_inset Quotes eld +\end_inset + +full-name +\begin_inset Quotes erd +\end_inset + + of the library. + +\end_layout + +\begin_layout Description +ndpointer (dtype=None, ndim=None, shape=None, flags=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Create a class object that can be used in the argtypes list of a ctypes + function that will do basic type, number-of-dimensions, shape, and flags + checking on input array objects. + Setting an argtypes entry with the result of this function allows passing + arrays directly to ctypes-wrapped functions. + The returned class object will contain a from_param method as required + by ctypes. + This from_param method takes the array object, does data-type, number-of-dimens +ions, shape, and flags checking on the object and if all tests pass returns + an object that ctypes can use as the data area of the array. + Checking is not performed for any entries which are None in this class + creation function. + +\end_layout + +\begin_layout Chapter +Testing and Packaging +\end_layout + +\begin_layout Quotation +Research is what I'm doing when I don't know what I'm doing. +\end_layout + +\begin_layout Right Address +--- +\emph on +Werner von Braun +\end_layout + +\begin_layout Quotation +The most likely way for the world to be destroyed, most experts agree, is + by accident. + That's where we come in; we're computer professionals. + We cause accidents. +\end_layout + +\begin_layout Right Address +--- +\emph on +Nathaniel Borenstein +\end_layout + +\begin_layout Standard +There are two additional sub-packages distributed with NumPy that simplify + the process of distributing and testing code based on NumPy. + The numpy.distutils sub-package extends the standard distutils package to + handle Fortran code along with providing support for the auto-generated + code in NumPy. + The numpy.testing sub-package defines a few functions and classes for standardiz +ing unit-tests in NumPy. + These facilities can be used in your own packages that build on top of + NumPy. + +\end_layout + +\begin_layout Section +Testing +\end_layout + +\begin_layout Standard +In this sub-package are two classes and some useful utilities for writing + unit-tests +\end_layout + +\begin_layout Description +NumpyTestCase a subclass of unittest.TestCase which adds a measure method + that can determine the elasped time to execute a code string and enhances + the __call__ method +\end_layout + +\begin_layout Description +NumpyTest the test manager for NumPy which was extracted originally from + the SciPy code base. + This test manager makes it easy to add unit-tests to a package simply by + creating a tests sub-directory with files named test_<module>.py. + These test files should then define sub-classes of NumpyTestCase (or unittest.Te +stCase) named +\begin_inset Quotes eld +\end_inset + +test* +\begin_inset Quotes erd +\end_inset + +. + These classes should then define functions named +\begin_inset Quotes eld +\end_inset + +test* +\begin_inset Quotes erd +\end_inset + + or +\begin_inset Quotes eld +\end_inset + +bench* +\begin_inset Quotes erd +\end_inset + + or +\begin_inset Quotes eld +\end_inset + +check* +\begin_inset Quotes erd +\end_inset + + that contain the actual unit-tests. + The first keyword argument should specify the level above which this test + should be run. + +\end_layout + +\begin_layout Description +\InsetSpace ~ + To run the tests excecute NumpyTest(<package>).test(level=1, verbosity=1) + which will run all tests above the given level using the given verbosity. + Here <package> can be either a string or a previously imported module. + You can get the level and verbosity arguments from sys.argv using NumpyTest(<pac +kage>).run() with -v or --verbosity and -l or --level as command-line arguments. +\end_layout + +\begin_layout Description +set_local_path (reldir='', level=1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + prepend local directory (+ reldir) to sys.path. + The caller is responsible for removing this path using restore_path(). +\end_layout + +\begin_layout Description +set_package_path (level=1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + prepend package directory to sys.path. + This should be called from a test_file.py that satisfies the tree structure: + <somepath>/<somedir>/test_file.py. + The, the first existing path name from the list <somepath>/build/lib.<platform>- +<version>, <somepath>/.. + is pre-pended to sys.path. + The caller is responsible for removing this path using restore_path(). +\end_layout + +\begin_layout Description +restore_path () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Remove the first entry from sys.path. +\end_layout + +\begin_layout Description +assert_equal (actual, desired, err_msg='', verbose=1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Raise an assertion error if the two items are not equal. + Automatically calls assert_array_equal if actual or desired is an ndarray. + +\end_layout + +\begin_layout Description +assert_almost_equal (actual, desired, decimal=7, err_msg='', verbose=1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Raise an assertion error if the two items are not equal within decimal + places. + Automatically calls assert_array_almost_equal if actual or desired is an + ndarray. +\end_layout + +\begin_layout Description +assert_approx_equal (actual, desired, significant=7, err_msg='', verbose=1) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Raise an assertion error if the two items are not equal to within the given + significant digits. + Does not work on arrays. + +\end_layout + +\begin_layout Description +assert_array_equal (x, y, err_msg='') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Raise an error if the two arrays x and y are not equal at every element. + +\end_layout + +\begin_layout Description +assert_array_less (x, y, err_msg='') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Raise an error if the two arrays x and y have different shapes or if x + is not less than y at every element. + +\end_layout + +\begin_layout Description +assert_array_almost_equal (x, y, decimal=6, err_msg='') +\end_layout + +\begin_layout Description +\InsetSpace ~ + Raise an error if x and y are not equal to decimal places at every element. +\end_layout + +\begin_layout Description +jiffies () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a number of 1/100ths of a second that this process has been scheduled + in user mode. + Implemented using time.time() unless on Linux where the special /proc directory + filesystem is used. + +\end_layout + +\begin_layout Description +memusage () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the virtual memory size in bytes of the running python. + If the operation is not supported on the platform, then return None. + This works only on linux for now. +\end_layout + +\begin_layout Description +rand (*args) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return an array of random numbers with the given shape using only the standard + library random number generator. +\end_layout + +\begin_layout Description +runstring (astr, dict) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Run the given string in the dictionary provided. + Functional form for (exec astr in dict) that is useful for the failUnlessRaises + method of unittest.TestCase class. +\end_layout + +\begin_layout Section +NumPy Distutils +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "distutils" + +\end_inset + +NumPy provides enhanced distutils functionality to make it easier to build + and install sub-packages, auto-generate code, and extension modules that + use Fortran-compiled libraries. + To use features of numpy distutils use the setup command from numpy.distutils.cor +e. + A useful Configuration class is also provided in numpy.distutils.misc_util + that can make it easier to construct keyword arguments to pass to the setup + function (by passing the dictionary obtained from the todict() method of + the class). + More information is available in the NumPy Distutils Users Guide in <site-packa +ges>/numpy/doc/DISTUTILS.txt. +\end_layout + +\begin_layout Subsection +misc_util +\end_layout + +\begin_layout Description +Configuration (package_name=None, parent_name=None, top_path=None, package_path= +None, **attrs) +\end_layout + +\begin_layout Description +\InsetSpace ~ + +\begin_inset LatexCommand index +name "Configuration" + +\end_inset + +Construct a configuration instance for the given package name. + If parent_name is not None, then construct the package as a sub-package + of the parent_name package. + If top_path and package_path are None then they are assumed equal to the + path of the file this instance was created in. + The setup.py files in the numpy distribution are good examples of how to + use the Configuration instance. +\end_layout + +\begin_deeper +\begin_layout Description +self.todict () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a dictionary compatible with the keyword arguments of distutils + setup function. + Thus, this method may be used as setup(**config.todict()). +\end_layout + +\begin_layout Description +self.get_distribution () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the distutils distribution object for self. +\end_layout + +\begin_layout Description +self.get_subpackage (subpackage_name, subpackage_path=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a Configuration instance for the sub-package given. + If subpackage_path is None then the path is assumed to be the local path + plus the subpackage_name. + If a setup.py file is not found in the subpackage_path, then a default configura +tion is used. +\end_layout + +\begin_layout Description +self.add_subpackage (subpackage_name, subpackage_path=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Add a sub-package to the current Configuration instance. + This is useful in a setup.py script for adding sub-packages to a package. + The sub-package is contained in subpackage_path / subpackage_name and this + directory may contain a setup.py script or else a default setup (suitable + for Python-code-only subpackages) is assumed. + If the subpackage_path is None, then it is assumed to be located in the + local path / subpackage_name. + +\end_layout + +\begin_layout Description +self.add_data_files (*files) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Add files to the list of data_files to be included with the package. + The form of each element of the files sequence is very flexible allowing + many combinations of where to get the files from the package and where + they should ultimately be installed on the system. + The most basic usage is for an element of the files argument sequence to + be a simple filename. + This will cause that file from the local path to be installed to the installati +on path of the self.name package (package path). + The file argument can also be a relative path in which case the entire + relative path will be installed into the package directory. + Finally, the file can be an absolute path name in which case the file will + be found at the absolute path name but installed to the package path. +\end_layout + +\begin_layout Description +\InsetSpace ~ + This basic behavior can be augmented by passing a 2-tuple in as the file + argument. + The first element of the tuple should specify the relative path (under + the package install directory) where the remaining sequence of files should + be installed to (it has nothing to do with the file-names in the source + distribution). + The second element of the tuple is the sequence of files that should be + installed. + The files in this sequence can be filenames, relative paths, or absolute + paths. + For absolute paths the file will be installed in the top-level package + installation directory (regardless of the first argument). + Filenames and relative path names will be installed in the package install + directory under the path name given as the first element of the tuple. + An example may clarify: +\end_layout + +\begin_deeper +\begin_layout LyX-Code +self.add_data_files('foo.dat', +\newline +('fun', ['gun.dat', 'nun/pun.dat', '/tmp/sun.dat']), + +\newline +'bar/cat.dat', +\newline +'/full/path/to/can.dat') +\end_layout + +\begin_layout Standard +will install these data files to: +\end_layout + +\begin_layout LyX-Code +<package install directory>/ +\newline + foo.dat +\newline + fun/ +\newline + gun.dat +\newline + nun/ +\newline + pun.dat +\newline + sun.dat +\newline + + bar/ +\newline + car.dat +\newline + can.dat +\end_layout + +\begin_layout Standard +where <package install directory> is the package (or sub-package) directory + such as '/usr/lib/python2.4/site-packages/mypackage' ('C: +\backslash + +\backslash +Python2.4 +\backslash + +\backslash +Lib +\backslash + +\backslash +site-packages +\backslash + +\backslash +mypackage') or '/usr/lib/python2.4/site-packages/mypackage/mysubpackage' + ('C: +\backslash + +\backslash +Python2.4 +\backslash + +\backslash +Lib +\backslash + +\backslash +site-packages +\backslash + +\backslash +mypackage +\backslash + +\backslash +mysubpackage'). +\end_layout + +\end_deeper +\begin_layout Standard +\InsetSpace ~ + An additional feature is that the path to a data-file can actually be a + function that takes no arguments and returns the actual path(s) to the + data-files. + This is useful when the data files are generated while building the package. + +\end_layout + +\begin_layout Description +self.add_data_dir (data_path) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Recursively add files under data_path to the list of data_files to be installed + (and distributed). + The data_path can be either a relative path-name, or an absolute path-name, + or a 2-tuple where the first argument shows where in the install directory + the data directory should be installed to. + For example suppose the source directory contains fun/foo.dat and fun/bar/car.dat +\end_layout + +\begin_layout LyX-Code +self.add_data_dir('fun') +\newline +self.add_data_dir(('sun', 'fun')) +\newline +self.add_data_dir(('gun', + '/full/path/to/fun')) +\end_layout + +\begin_layout Standard +\InsetSpace ~ + Will install data-files to the locations +\end_layout + +\begin_layout LyX-Code +<package install directory>/ +\newline + fun/ +\newline + foo.dat +\newline + bar/ +\newline + car.dat +\newline + sun/ +\newline + + foo.dat +\newline + bar/ +\newline + car.dat +\newline + gun/ +\newline + foo.dat +\newline + car.dat +\end_layout + +\begin_layout Description +self.add_include_dirs (*paths) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Add the given sequence of paths to the beginning of the include_dirs list. + This list will be visible to all extension modules of the current package. +\end_layout + +\begin_layout Description +self.add_headers (*files) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Add the given sequence of files to the beginning of the headers list. + By default, headers will be installed under <python-include>/<self.name.replace('. +','/')>/ directory. + If an item of files is a tuple, then its first argument specifies the actual + installation location relative to the <python-include> path. +\end_layout + +\begin_layout Description +self.add_extension (name, sources, **kw) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Create and add an Extension instance to the ext_modules list. + The first argument defines the name of the extension module that will be + installed under the self.name package. + The second argument is a list of sources. + This method also takes the following optional keyword arguments that are + passed on to the Extension constructor: include_dirs, define_macros, undef_macr +os, library_dirs, libraries, runtime_library_dirs, extra_objects, swig_opts, + depends, language, f2py_options, module_dirs, and extra_info. + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The self.paths(...) method is applied to all lists that may contain paths. + The extra_info is a dictionary or a list of dictionaries whose content + will be appended to the keyword arguments. + The depends list contains paths to files or directories that the sources + of the extension module depend on. + If any path in the depends list is newer than the extension module, then + the module will be rebuilt. + +\end_layout + +\begin_layout Description +\InsetSpace ~ + The list of sources may contain functions (called source generators) which + must take an extension instance and a build directory as inputs and return + a source file or list of source files or None. + If None is returned then no sources are generated. + If the Extension instance has no sources after processing all source generators +, then no extension module is built. + +\end_layout + +\begin_layout Description +self.add_library (name, sources, **build_info) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Add a library to the list of libraries. + Allowed keyword arguments are depends, macros, include_dirs, extra_compiler_arg +s, and f2py_options. + The name is the name of the library to be built and sources is a list of + sources (or source generating functions) to add to the library. +\end_layout + +\begin_layout Description +self.add_scripts (*files) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Add the sequence of files to the beginning of the scripts list. + Scripts will be installed under the <prefix>/bin/ directory. + +\end_layout + +\begin_layout Description +self.paths (*paths) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Applies glob.glob(...) to each path in the sequence (if needed) and pre-pends + the local_path if needed. + Because this is called on all source lists, this allows wildcard characters + to be specified in lists of sources for extension modules and libraries + and scripts and allows path-names be relative to the source directory. +\end_layout + +\begin_layout Description +self.get_config_cmd () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns the numpy.distutils config command instance. +\end_layout + +\begin_layout Description +self.get_build_temp_dir () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a path to a temporary directory where temporary files should be + placed. +\end_layout + +\begin_layout Description +self.have_f77c () +\end_layout + +\begin_layout Description +\InsetSpace ~ + True if a Fortran 77 compiler is available (because a simple Fortran 77 + code was able to be compiled successfully). +\end_layout + +\begin_layout Description +self.have_f90c () +\end_layout + +\begin_layout Description +\InsetSpace ~ + True if a Fortran 90 compiler is available (because a simple Fortran 90 + code was able to be compiled successfully) +\end_layout + +\begin_layout Description +self.get_version () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a version string of the current package or None if the version informati +on could not be detected. + This method scans files named __version__.py, <packagename>_version.py, version.py +, and __svn_version__.py for string variables version, __version__, and <packagen +ame>_version, until a version number is found. +\end_layout + +\begin_layout Description +self.make_svn_version_py () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Appends a data function to the data_files list that will generate __svn_version +__.py file to the current package directory. + This file will be removed from the source directory when Python exits (so + that it can be re-generated next time the package is built). + This is intended for working with source directories that are in an SVN + repository. + +\end_layout + +\begin_layout Description +self.make_config_py () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Generate a package __config__.py file containing system information used + during the building of the package. + This file is installed to the package installation directory. +\end_layout + +\begin_layout Description +self.get_info (*names) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return information (from system_info.get_info) for all of the names in the + argument list in a single dictionary. + +\end_layout + +\end_deeper +\begin_layout Description +get_numpy_include_dirs () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the include directory where the numpy/arrayobject.h and numpy/ufuncobject. +h files are found. + This should be added to the include_dirs of any extension module built + using NumPy. + If numpy.distutils is used to build the extension, then this directory is + added automatically. + +\end_layout + +\begin_layout Description +get_numarray_include_dirs () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the include directory where the numpy/libnumarray.h file is found. + This should be added to the include_dirs of any extension module that relies + on the Numarray-compatible C-API. + +\end_layout + +\begin_layout Description +dict_append (d, **kwds) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Add the keyword arguments given as entries in the dictionary provided as + the first argument. + If the entry is already present, then assume it is a list and extend the + list with the keyword value. +\end_layout + +\begin_layout Description +appendpath (prefix, path) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Platform-independent intelligence for appending path to prefix. + It replaces '/' in the prefix and the path with the correct path-separator + on the platform ad returns a full path name that will be valid for the + platform. + +\end_layout + +\begin_layout Description +allpath (name) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert a '/' separated pathname to one using the platform's path separator. +\end_layout + +\begin_layout Description +dot_join (*args) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Converts a sequence of string arguments to a string joined by '.' (removing + any empty strings). + +\end_layout + +\begin_layout Description +generate_config_py (extension, build_dir) +\end_layout + +\begin_layout Description +\InsetSpace ~ + A suitable function that can be used in a source list. + This constructs a python file that contains system_info information used + during building the package. + Generally easier to use a Configuration instance and the config.make_config_py() + method. +\end_layout + +\begin_layout Description +get_cmd (cmdname, _cache={}) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns an instance of the distutils command object named cmdname if the + setup distribution instance has been initialized. + Caches the result in _cache[cmdname] and gets it from there if present. +\end_layout + +\begin_layout Description +terminal_has_colors () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Tries to determine if the stdout terminal can be written to using ANSI + colors. + Returns 1 if it can be determined that ANSI colors are acceptable or 0 + if not. + +\end_layout + +\begin_layout Description +red_text (s) +\end_layout + +\begin_layout Description +green_text (s) +\end_layout + +\begin_layout Description +yellow_text (s) +\end_layout + +\begin_layout Description +blue_text (s) +\end_layout + +\begin_layout Description +cyan_text (s) +\end_layout + +\begin_layout Description +\InsetSpace ~ + If terminal_has_colors() is true, then these commands return a string with + the necessary codes prepended to display the given string argument in the + specified color on an ANSI terminal. + If terminal_has_colors() is false, then these functions simply return the + input argument. + +\end_layout + +\begin_layout Description +cyg2win32 (path) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Convert a cygwin path beginning with /cygdrive to a standard win32 path + name. + +\end_layout + +\begin_layout Description +all_strings (lst) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return True if all items in the input list are string objects otherwise + return False. +\end_layout + +\begin_layout Description +has_f_sources (sources) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return True if any of the source files listed in the input argument are + Fortran files because its name matches against the compiled regular expression + +\series bold +fortran_ext_match +\series default +. +\end_layout + +\begin_layout Description +has_cxx_sources (sources) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return True if any of the source files listed in the input argument are + C++ files because its name matches against the compiled regular expression + +\series bold +cxx_ext_match +\series default +. +\end_layout + +\begin_layout Description +filter_sources (sources) +\end_layout + +\begin_layout Description +\InsetSpace ~ + From the provided list of sources, return four lists of filenames containing + C, C++, Fortran, and Fortran 90 module sources respectively. + The compiled regular expressions used in this search (which are also available + in the misc_util module) are cxx_ext_match, fortran_ext_match, f90_ext_match, + and f90_module_name_match. + +\end_layout + +\begin_layout Description +get_dependencies (sources) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Scan the files in the sources list for include statements. +\end_layout + +\begin_layout Description +is_local_src_dir (directory) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return True if the provided directory is the local current working directory. + +\end_layout + +\begin_layout Description +get_ext_source_files (ext) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Get sources and any include files in the same directory from an Extension + instance. +\end_layout + +\begin_layout Description +get_script_files (scripts) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Returns the list scripts with all non-string arguments removed. +\end_layout + +\begin_layout Subsection +Other modules +\end_layout + +\begin_layout Description +system_info.get_info (name) +\end_layout + +\begin_layout Description +\InsetSpace ~ + For the given string representing a particular resource, return a dictionary + that is compatible with the distutils.setup keyword arguments. + If this is an empty dictionary, then the requested resource is not available. + Some of the names that can be checked are 'lapack_opt', 'blas_opt', 'fft_opt', + 'fftw', 'fftw3', 'fftw2', 'djbfft', 'numpy', 'numarray', 'boost_python', + 'agg2', 'wx', 'gdk', 'xft', 'freetype2'. + +\end_layout + +\begin_layout Description +system_info.get_standard_file (filename) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return a list of length 0 to 3 containing the full-path filenames for the + filename provided. + The filename is searched for in three places in the following order 1) + the system-wide location which is the directory that the system_info file + is located in; 2) the directory specified by the environment variable HOME; + and 3) the current local directory. + +\end_layout + +\begin_layout Description +cpuinfo.cpu an instance of a cpuinfo class that defines methods for checking + various aspects of the cpu. + The info attribute is a list of length (# of CPUs). + Each entry is a dictionary providing technical information about that CPU. + +\end_layout + +\begin_layout Description +log.set_verbosity (level) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Set the distutils logging threshold and return the previously stored value. + The level is an integer that corresponds to distutils.log thresholds: -1 + <--> ERROR, 0 <--> WARN, 1 <--> INFO, and 2 <--> DEBUG. + +\end_layout + +\begin_layout Description +exec_command +\end_layout + +\begin_deeper +\begin_layout Description +exec_command (command, execute_in='', use_shell=None, use_tee=None, _with_python +=1, **env) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return (status, output) of the executed command. + The command input is a string of executable and arguments. + The output contains both stderr and stdout messages. + If execute_in is given, then change to the provided directory prior to + executing the command and afterwords restore to the current directory. + On NT, and DOS systems the returned status is correct for external commands. + However, wild cards will not work for non-posix systems. +\end_layout + +\begin_layout Description +splitcmdline (line) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Inverse of ' '.join(sys.argv) +\end_layout + +\begin_layout Description +find_executable (exe, path=None) +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return full path of an executable using information from the PATH environment + variable. + Equivalent to the POSIX 'which' command. +\end_layout + +\begin_layout Description +get_pythonexe () +\end_layout + +\begin_layout Description +\InsetSpace ~ + Return the full path to the python executable with some fixes for nt and + dos to replace pythonw with python if it is encountered. + A basic wrapper around sys.executable. +\end_layout + +\end_deeper +\begin_layout Section +Conversion of .src files +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand index +name "code generation" + +\end_inset + +NumPy distutils supports automatic conversion of source files named <somefile>.sr +c. + This facility can be used to maintain very similar code blocks requiring + only simple changes between blocks. + During the build phase of setup, if a template file named <somefile>.src + is encountered, a new file named <somefile> is constructed from the template + and placed in the build directory to be used instead. + Two forms of template conversion are supported. + The first form occurs for files named named <file>.ext.src where ext is a + recognized Fortran extension (f, f90, f95, f77, for, ftn, pyf). + The second form is used for all other cases. + +\end_layout + +\begin_layout Subsection +Fortran files +\end_layout + +\begin_layout Standard +This template converter will replicate all +\series bold +function +\series default + and +\series bold +subroutine +\series default + blocks in the file with names that contain '<...>' according to the rules + in '<...>'. + The number of comma-separated words in '<...>' determines the number of times + the block is repeated. + What these words are indicates what that repeat rule, '<...>', should be replaced + with in each block. + All of the repeat rules in a block must contain the same number of comma-separa +ted words indicating the number of times that block should be repeated. + If the word in the repeat rule needs a comma, leftarrow, or rightarrow, + then prepend it with a backslash ' +\backslash +'. + If a word in the repeat rule matches ' +\backslash + +\backslash +<index>' then it will be replaced with the <index>-th word in the same repeat + specification. + There are two forms for the repeat rule: named and short. +\end_layout + +\begin_layout Subsubsection +Named repeat rule +\end_layout + +\begin_layout Standard +A named repeat rule is useful when the same set of repeats must be used + several times in a block. + It is specified using <rule1=item1, item2, item3,..., itemN>, where N is the + number of times the block should be repeated. + On each repeat of the block, the entire expression, '<...>' will be replaced + first with item1, and then with item2, and so forth until N repeats are + accomplished. + Once a named repeat specification has been introduced, the same repeat + rule may be used +\series bold +in the current block +\series default + by referring only to the name (i.e. + <rule1>. + +\end_layout + +\begin_layout Subsubsection +Short repeat rule +\end_layout + +\begin_layout Standard +A short repeat rule looks like <item1, item2, item3, ..., itemN>. + The rule specifies that the entire expression, '<...>' should be replaced + first with item1, and then with item2, and so forth until N repeats are + accomplished. + +\end_layout + +\begin_layout Subsubsection +Pre-defined names +\end_layout + +\begin_layout Standard +The following predefined named repeat rules are available: +\end_layout + +\begin_layout Itemize +<prefix=s,d,c,z> +\end_layout + +\begin_layout Itemize +<_c=s,d,c,z> +\end_layout + +\begin_layout Itemize +<_t=real, double precision, complex, double complex> +\end_layout + +\begin_layout Itemize +<ftype=real, double precision, complex, double complex> +\end_layout + +\begin_layout Itemize +<ctype=float, double, complex_float, complex_double> +\end_layout + +\begin_layout Itemize +<ftypereal=float, double precision, +\backslash + +\backslash +0, +\backslash + +\backslash +1> +\end_layout + +\begin_layout Itemize +<ctypereal=float, double, +\backslash + +\backslash +0, +\backslash + +\backslash +1> +\end_layout + +\begin_layout Subsection +Other files +\end_layout + +\begin_layout Standard +Non-Fortran files use a separate syntax for defining template blocks that + should be repeated using a variable expansion similar to the named repeat + rules of the Fortran-specific repeats. + The template rules for these files are: +\end_layout + +\begin_layout Enumerate +\begin_inset Quotes eld +\end_inset + +/**begin repeat +\begin_inset Quotes erd +\end_inset + + on a line by itself marks the beginning of a segment that should be repeated. +\end_layout + +\begin_layout Enumerate +Named variable expansions are defined using #name=item1, item2, item3, ..., + itemN# and placed on successive lines. + These variables are replaced in each repeat block with corresponding word. + All named variables in the same repeat block must define the same number + of words. + +\end_layout + +\begin_layout Enumerate +In specifying the repeat rule for a named variable, item*N is short-hand + for item, item, ..., item repeated N times. + In addition, parenthesis in combination with *N can be used for grouping + several items that should be repeated. + Thus, #name=(item1, item2)*4# is equivalent to #name=item1, item2, item1, + item2, item1, item2, item1, item2# +\end_layout + +\begin_layout Enumerate +\begin_inset Quotes eld +\end_inset + +*/ +\begin_inset Quotes erd +\end_inset + + on a line by itself marks the end of the the variable expansion naming. + The next line is the first line that will be repeated using the named rules. +\end_layout + +\begin_layout Enumerate +Inside the block to be repeated, the variables that should be expanded are + specified as @name@. + +\end_layout + +\begin_layout Enumerate +\begin_inset Quotes eld +\end_inset + +/**end repeat**/ +\begin_inset Quotes erd +\end_inset + + on a line by itself marks the previous line as the last line of the block + to be repeated. + +\end_layout + +\begin_layout Standard +\begin_inset Include \input{capi.lyx} +preview false + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset LatexCommand printindex + +\end_inset + + +\end_layout + +\end_body +\end_document diff --git a/numpy/doc/numpybook/runcode.py b/numpy/doc/numpybook/runcode.py new file mode 100644 index 000000000..a0b82340b --- /dev/null +++ b/numpy/doc/numpybook/runcode.py @@ -0,0 +1,148 @@ +# This script takes a lyx file and runs the python code in it. +# Then rewrites the lyx file again. +# +# Each section of code portion is assumed to be in the same namespace +# where a from numpy import * has been applied +# +# If a PYNEW inside a Note is encountered, the name space is restarted +# +# The output (if any) is replaced in the file +# by the output produced during the code run. +# +# Options: +# -n name of code section (default MyCode) +# + +import sys +import optparse +import cStringIO +import re +import os + +newre = re.compile(r"\\begin_inset Note.*PYNEW\s+\\end_inset", re.DOTALL) + +def getoutput(tstr, dic): + print "\n\nRunning..." + print tstr, + tempstr = cStringIO.StringIO() + sys.stdout = tempstr + code = compile(tstr, '<input>', 'exec') + try: + res = eval(tstr, dic) + sys.stdout = sys.__stdout__ + except SyntaxError: + try: + res = None + exec code in dic + finally: + sys.stdout = sys.__stdout__ + if res is None: + res = tempstr.getvalue() + else: + res = tempstr.getvalue() + '\n' + repr(res) + if res != '': + print "\nOutput is" + print res, + return res + +# now find the code in the code segment +def getnewcodestr(substr, dic): + end = substr.find('\\layout ') + lines = substr[:end].split('\\newline') + outlines = [] + first = 1 + cmd = '' + lines.append('dummy') + for line in lines: + line = line.strip() + if (line[:3]=='>>>') or (line == 'dummy'): + # we have a new output + pyoutstr = getoutput(cmd, dic).strip() + if pyoutstr != '': + pyout = pyoutstr.split('\n') + outlines.extend(pyout) + cmd = line[4:] + elif (line[:3]=='...'): + # continuation output + cmd += "\n%s" % line[4:] + else: + # first line or output + if first: + first = 0 + cmd = line + else: + continue + if line != 'dummy': + outlines.append(line) + return "\n\\newline \n".join(outlines), end + + +def runpycode(lyxstr, name='MyCode'): + schobj = re.compile(r"\\layout %s\s+>>> " % name) + outstr = cStringIO.StringIO() + num = 0 + indx = [] + for it in schobj.finditer(lyxstr): + indx.extend([it.start(), it.end()]) + num += 1 + + if num == 0: + print "Nothing found for %s" % name + return lyxstr + + start = 0 + del indx[0] + indx.append(len(lyxstr)) + edic = {} + exec 'from numpy import *' in edic + exec 'set_printoptions(linewidth=65)' in edic + # indx now contains [st0,en0, ..., stN,enN] + # where stX is the start of code segment X + # and enX is the start of \layout MyCode for + # the X+1 code section (or string length if X=N) + for k in range(num): + # first write everything up to the start of the code segment + substr = lyxstr[start:indx[2*k]] + outstr.write(substr) + if start > 0: + mat = newre.search(substr) + # if PYNEW found, then start a new namespace + if mat: + edic = {} + exec 'from numpy import *' in edic + exec 'set_printoptions(linewidth=65)' in edic + # now find the code in the code segment + # endoutput will contain the index just past any output + # already present in the lyx string. + substr = lyxstr[indx[2*k]:indx[2*k+1]] + lyxcodestr, endcode = getnewcodestr(substr, edic) + # write the lyx for the input + new output + outstr.write(lyxcodestr) + outstr.write('\n') + start = endcode + indx[2*k] + + outstr.write(lyxstr[start:]) + return outstr.getvalue() + + +def main(args): + usage = "%prog {options} filename" + parser = optparse.OptionParser(usage) + parser.add_option('-n','--name', default='MyCode') + + options, args = parser.parse_args(args) + if len(args) < 1: + parser.error("incorrect number of arguments") + + os.system('cp -f %s %s.bak' % (args[0], args[0])) + fid = file(args[0]) + str = fid.read() + fid.close() + print "Processing %s" % options.name + newstr = runpycode(str, options.name) + fid = file(args[0],'w') + fid.write(newstr) + fid.close() + +if __name__ == "__main__": + main(sys.argv[1:]) |