diff --git a/ChangeLog.txt b/ChangeLog.txt index f6b38d7b..9b19a2c3 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,3 +1,11 @@ +1.3 pre-beta +============ + +[1] Added support for additional scaling factors (3/8, 5/8, 3/4, 7/8, 9/8, 5/4, +11/8, 3/2, 13/8, 7/4, 15/8, and 2) when decompressing. Currently, the IDCT +will not be SIMD-accelerated when using any of these scaling factors. + + 1.2.0 ===== diff --git a/Makefile.am b/Makefile.am index f2219b03..75db6fa8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -174,18 +174,38 @@ if WITH_SSE_FLOAT_DCT else cmp $(srcdir)/testorig.ppm testoutflt.ppm endif + ./djpeg -dct int -nosmooth -scale 2/1 -ppm -outfile testoutint2_1.ppm $(srcdir)/testorig.jpg + cmp $(srcdir)/testimgint2_1.ppm testoutint2_1.ppm + ./djpeg -dct int -nosmooth -scale 15/8 -ppm -outfile testoutint15_8.ppm $(srcdir)/testorig.jpg + cmp $(srcdir)/testimgint15_8.ppm testoutint15_8.ppm + ./djpeg -dct int -nosmooth -scale 7/4 -ppm -outfile testoutint7_4.ppm $(srcdir)/testorig.jpg + cmp $(srcdir)/testimgint7_4.ppm testoutint7_4.ppm + ./djpeg -dct int -nosmooth -scale 13/8 -ppm -outfile testoutint13_8.ppm $(srcdir)/testorig.jpg + cmp $(srcdir)/testimgint13_8.ppm testoutint13_8.ppm + ./djpeg -dct int -nosmooth -scale 3/2 -ppm -outfile testoutint3_2.ppm $(srcdir)/testorig.jpg + cmp $(srcdir)/testimgint3_2.ppm testoutint3_2.ppm + ./djpeg -dct int -nosmooth -scale 11/8 -ppm -outfile testoutint11_8.ppm $(srcdir)/testorig.jpg + cmp $(srcdir)/testimgint11_8.ppm testoutint11_8.ppm + ./djpeg -dct int -nosmooth -scale 5/4 -ppm -outfile testoutint5_4.ppm $(srcdir)/testorig.jpg + cmp $(srcdir)/testimgint5_4.ppm testoutint5_4.ppm + ./djpeg -dct int -nosmooth -scale 9/8 -ppm -outfile testoutint9_8.ppm $(srcdir)/testorig.jpg + cmp $(srcdir)/testimgint9_8.ppm testoutint9_8.ppm + ./djpeg -dct int -nosmooth -scale 7/8 -ppm -outfile testoutint7_8.ppm $(srcdir)/testorig.jpg + cmp $(srcdir)/testimgint7_8.ppm testoutint7_8.ppm + ./djpeg -dct int -nosmooth -scale 3/4 -ppm -outfile testoutint3_4.ppm $(srcdir)/testorig.jpg + cmp $(srcdir)/testimgint3_4.ppm testoutint3_4.ppm + ./djpeg -dct int -nosmooth -scale 5/8 -ppm -outfile testoutint5_8.ppm $(srcdir)/testorig.jpg + cmp $(srcdir)/testimgint5_8.ppm testoutint5_8.ppm ./djpeg -dct int -scale 1/2 -ppm -outfile testoutint1_2.ppm $(srcdir)/testorig.jpg cmp $(srcdir)/testimgint1_2.ppm testoutint1_2.ppm ./djpeg -dct fast -scale 1/2 -ppm -outfile testoutfst1_2.ppm $(srcdir)/testorig.jpg cmp $(srcdir)/testimgfst1_2.ppm testoutfst1_2.ppm + ./djpeg -dct int -nosmooth -scale 3/8 -ppm -outfile testoutint3_8.ppm $(srcdir)/testorig.jpg + cmp $(srcdir)/testimgint3_8.ppm testoutint3_8.ppm ./djpeg -dct int -scale 1/4 -ppm -outfile testoutint1_4.ppm $(srcdir)/testorig.jpg cmp $(srcdir)/testimgint1_4.ppm testoutint1_4.ppm - ./djpeg -dct fast -scale 1/4 -ppm -outfile testoutfst1_4.ppm $(srcdir)/testorig.jpg - cmp $(srcdir)/testimgfst1_4.ppm testoutfst1_4.ppm ./djpeg -dct int -scale 1/8 -ppm -outfile testoutint1_8.ppm $(srcdir)/testorig.jpg cmp $(srcdir)/testimgint1_8.ppm testoutint1_8.ppm - ./djpeg -dct fast -scale 1/8 -ppm -outfile testoutfst1_8.ppm $(srcdir)/testorig.jpg - cmp $(srcdir)/testimgfst1_8.ppm testoutfst1_8.ppm ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp $(srcdir)/testorig.jpg cmp $(srcdir)/testimg.bmp testout.bmp if WITH_ARITH_ENC diff --git a/djpeg.1 b/djpeg.1 index e5e46f2b..6586d250 100644 --- a/djpeg.1 +++ b/djpeg.1 @@ -1,4 +1,4 @@ -.TH DJPEG 1 "11 October 2010" +.TH DJPEG 1 "27 January 2012" .SH NAME djpeg \- decompress a JPEG file to an image file .SH SYNOPSIS @@ -62,8 +62,9 @@ runs noticeably faster in this mode. .TP .BI \-scale " M/N" Scale the output image by a factor M/N. Currently the scale factor must be -1/1, 1/2, 1/4, or 1/8. Scaling is handy if the image is larger than your -screen; also, +M/8, where M is an integer between 1 and 16 inclusive, or any reduced fraction +thereof (such as 1/2, 3/4, etc.) Scaling is handy if the image is larger than +your screen; also, .B djpeg runs much faster when scaling down the output. .TP diff --git a/jdct.h b/jdct.h index 7b49a975..36374484 100644 --- a/jdct.h +++ b/jdct.h @@ -95,9 +95,21 @@ typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */ #define jpeg_idct_islow jRDislow #define jpeg_idct_ifast jRDifast #define jpeg_idct_float jRDfloat +#define jpeg_idct_7x7 jRD7x7 +#define jpeg_idct_6x6 jRD6x6 +#define jpeg_idct_5x5 jRD5x5 #define jpeg_idct_4x4 jRD4x4 +#define jpeg_idct_3x3 jRD3x3 #define jpeg_idct_2x2 jRD2x2 #define jpeg_idct_1x1 jRD1x1 +#define jpeg_idct_9x9 jRD9x9 +#define jpeg_idct_10x10 jRD10x10 +#define jpeg_idct_11x11 jRD11x11 +#define jpeg_idct_12x12 jRD12x12 +#define jpeg_idct_13x13 jRD13x13 +#define jpeg_idct_14x14 jRD14x14 +#define jpeg_idct_15x15 jRD15x15 +#define jpeg_idct_16x16 jRD16x16 #endif /* NEED_SHORT_EXTERNAL_NAMES */ /* Extern declarations for the forward and inverse DCT routines. */ @@ -115,15 +127,51 @@ EXTERN(void) jpeg_idct_ifast EXTERN(void) jpeg_idct_float JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_7x7 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_6x6 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_5x5 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); EXTERN(void) jpeg_idct_4x4 JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_3x3 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); EXTERN(void) jpeg_idct_2x2 JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); EXTERN(void) jpeg_idct_1x1 JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_9x9 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_10x10 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_11x11 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_12x12 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_13x13 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_14x14 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_15x15 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); +EXTERN(void) jpeg_idct_16x16 + JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); /* diff --git a/jddctmgr.c b/jddctmgr.c index 044e4694..1758bed7 100644 --- a/jddctmgr.c +++ b/jddctmgr.c @@ -2,6 +2,7 @@ * jddctmgr.c * * Copyright (C) 1994-1996, Thomas G. Lane. + * Modified 2002-2010 by Guido Vollbeding. * Copyright 2009 Pierre Ossman for Cendio AB * Copyright (C) 2010, D. R. Commander. * This file is part of the Independent JPEG Group's software. @@ -115,6 +116,10 @@ start_pass (j_decompress_ptr cinfo) method_ptr = jpeg_idct_2x2; method = JDCT_ISLOW; /* jidctred uses islow-style table */ break; + case 3: + method_ptr = jpeg_idct_3x3; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; case 4: if (jsimd_can_idct_4x4()) method_ptr = jsimd_idct_4x4; @@ -122,6 +127,18 @@ start_pass (j_decompress_ptr cinfo) method_ptr = jpeg_idct_4x4; method = JDCT_ISLOW; /* jidctred uses islow-style table */ break; + case 5: + method_ptr = jpeg_idct_5x5; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case 6: + method_ptr = jpeg_idct_6x6; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case 7: + method_ptr = jpeg_idct_7x7; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; #endif case DCTSIZE: switch (cinfo->dct_method) { @@ -157,6 +174,38 @@ start_pass (j_decompress_ptr cinfo) break; } break; + case 9: + method_ptr = jpeg_idct_9x9; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case 10: + method_ptr = jpeg_idct_10x10; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case 11: + method_ptr = jpeg_idct_11x11; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case 12: + method_ptr = jpeg_idct_12x12; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case 13: + method_ptr = jpeg_idct_13x13; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case 14: + method_ptr = jpeg_idct_14x14; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case 15: + method_ptr = jpeg_idct_15x15; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; + case 16: + method_ptr = jpeg_idct_16x16; + method = JDCT_ISLOW; /* jidctint uses islow-style table */ + break; default: ERREXIT1(cinfo, JERR_BAD_DCTSIZE, compptr->_DCT_scaled_size); break; diff --git a/jdinput.c b/jdinput.c index 9fcd089d..eddace69 100644 --- a/jdinput.c +++ b/jdinput.c @@ -2,7 +2,6 @@ * jdinput.c * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 2002-2009 by Guido Vollbeding. * Copyright (C) 2010, D. R. Commander. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. @@ -38,79 +37,6 @@ METHODDEF(int) consume_markers JPP((j_decompress_ptr cinfo)); * Routines to calculate various quantities related to the size of the image. */ - -#if JPEG_LIB_VERSION >= 80 -/* - * Compute output image dimensions and related values. - * NOTE: this is exported for possible use by application. - * Hence it mustn't do anything that can't be done twice. - */ - -GLOBAL(void) -jpeg_core_output_dimensions (j_decompress_ptr cinfo) -/* Do computations that are needed before master selection phase. - * This function is used for transcoding and full decompression. - */ -{ -#ifdef IDCT_SCALING_SUPPORTED - int ci; - jpeg_component_info *compptr; - - /* Compute actual output image dimensions and DCT scaling choices. */ - if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom) { - /* Provide 1/block_size scaling */ - cinfo->output_width = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width, (long) cinfo->block_size); - cinfo->output_height = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height, (long) cinfo->block_size); - cinfo->min_DCT_h_scaled_size = 1; - cinfo->min_DCT_v_scaled_size = 1; - } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 2) { - /* Provide 2/block_size scaling */ - cinfo->output_width = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width * 2L, (long) cinfo->block_size); - cinfo->output_height = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height * 2L, (long) cinfo->block_size); - cinfo->min_DCT_h_scaled_size = 2; - cinfo->min_DCT_v_scaled_size = 2; - } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 4) { - /* Provide 4/block_size scaling */ - cinfo->output_width = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width * 4L, (long) cinfo->block_size); - cinfo->output_height = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height * 4L, (long) cinfo->block_size); - cinfo->min_DCT_h_scaled_size = 4; - cinfo->min_DCT_v_scaled_size = 4; - } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 8) { - /* Provide 8/block_size scaling */ - cinfo->output_width = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width * 8L, (long) cinfo->block_size); - cinfo->output_height = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height * 8L, (long) cinfo->block_size); - cinfo->min_DCT_h_scaled_size = 8; - cinfo->min_DCT_v_scaled_size = 8; - } - /* Recompute dimensions of components */ - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - compptr->DCT_h_scaled_size = cinfo->min_DCT_h_scaled_size; - compptr->DCT_v_scaled_size = cinfo->min_DCT_v_scaled_size; - } - -#else /* !IDCT_SCALING_SUPPORTED */ - - /* Hardwire it to "no scaling" */ - cinfo->output_width = cinfo->image_width; - cinfo->output_height = cinfo->image_height; - /* jdinput.c has already initialized DCT_scaled_size, - * and has computed unscaled downsampled_width and downsampled_height. - */ - -#endif /* IDCT_SCALING_SUPPORTED */ -} -#endif - - LOCAL(void) initial_setup (j_decompress_ptr cinfo) /* Called once, when first SOS marker is reached */ diff --git a/jdmaster.c b/jdmaster.c index c73ec027..273b8d2f 100644 --- a/jdmaster.c +++ b/jdmaster.c @@ -2,6 +2,7 @@ * jdmaster.c * * Copyright (C) 1991-1997, Thomas G. Lane. + * Modified 2002-2009 by Guido Vollbeding. * Copyright (C) 2009-2011, D. R. Commander. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. @@ -85,6 +86,177 @@ use_merged_upsample (j_decompress_ptr cinfo) } +/* + * Compute output image dimensions and related values. + * NOTE: this is exported for possible use by application. + * Hence it mustn't do anything that can't be done twice. + */ + +#if JPEG_LIB_VERSION >= 80 +GLOBAL(void) +#else +LOCAL(void) +#endif +jpeg_core_output_dimensions (j_decompress_ptr cinfo) +/* Do computations that are needed before master selection phase. + * This function is used for transcoding and full decompression. + */ +{ +#ifdef IDCT_SCALING_SUPPORTED + int ci; + jpeg_component_info *compptr; + + /* Compute actual output image dimensions and DCT scaling choices. */ + if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom) { + /* Provide 1/block_size scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width, (long) DCTSIZE); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height, (long) DCTSIZE); + cinfo->_min_DCT_h_scaled_size = 1; + cinfo->_min_DCT_v_scaled_size = 1; + } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 2) { + /* Provide 2/block_size scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 2L, (long) DCTSIZE); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 2L, (long) DCTSIZE); + cinfo->_min_DCT_h_scaled_size = 2; + cinfo->_min_DCT_v_scaled_size = 2; + } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 3) { + /* Provide 3/block_size scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 3L, (long) DCTSIZE); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 3L, (long) DCTSIZE); + cinfo->_min_DCT_h_scaled_size = 3; + cinfo->_min_DCT_v_scaled_size = 3; + } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 4) { + /* Provide 4/block_size scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 4L, (long) DCTSIZE); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 4L, (long) DCTSIZE); + cinfo->_min_DCT_h_scaled_size = 4; + cinfo->_min_DCT_v_scaled_size = 4; + } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 5) { + /* Provide 5/block_size scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 5L, (long) DCTSIZE); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 5L, (long) DCTSIZE); + cinfo->_min_DCT_h_scaled_size = 5; + cinfo->_min_DCT_v_scaled_size = 5; + } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 6) { + /* Provide 6/block_size scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 6L, (long) DCTSIZE); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 6L, (long) DCTSIZE); + cinfo->_min_DCT_h_scaled_size = 6; + cinfo->_min_DCT_v_scaled_size = 6; + } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 7) { + /* Provide 7/block_size scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 7L, (long) DCTSIZE); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 7L, (long) DCTSIZE); + cinfo->_min_DCT_h_scaled_size = 7; + cinfo->_min_DCT_v_scaled_size = 7; + } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 8) { + /* Provide 8/block_size scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 8L, (long) DCTSIZE); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 8L, (long) DCTSIZE); + cinfo->_min_DCT_h_scaled_size = 8; + cinfo->_min_DCT_v_scaled_size = 8; + } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 9) { + /* Provide 9/block_size scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 9L, (long) DCTSIZE); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 9L, (long) DCTSIZE); + cinfo->_min_DCT_h_scaled_size = 9; + cinfo->_min_DCT_v_scaled_size = 9; + } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 10) { + /* Provide 10/block_size scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 10L, (long) DCTSIZE); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 10L, (long) DCTSIZE); + cinfo->_min_DCT_h_scaled_size = 10; + cinfo->_min_DCT_v_scaled_size = 10; + } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 11) { + /* Provide 11/block_size scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 11L, (long) DCTSIZE); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 11L, (long) DCTSIZE); + cinfo->_min_DCT_h_scaled_size = 11; + cinfo->_min_DCT_v_scaled_size = 11; + } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 12) { + /* Provide 12/block_size scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 12L, (long) DCTSIZE); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 12L, (long) DCTSIZE); + cinfo->_min_DCT_h_scaled_size = 12; + cinfo->_min_DCT_v_scaled_size = 12; + } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 13) { + /* Provide 13/block_size scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 13L, (long) DCTSIZE); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 13L, (long) DCTSIZE); + cinfo->_min_DCT_h_scaled_size = 13; + cinfo->_min_DCT_v_scaled_size = 13; + } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 14) { + /* Provide 14/block_size scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 14L, (long) DCTSIZE); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 14L, (long) DCTSIZE); + cinfo->_min_DCT_h_scaled_size = 14; + cinfo->_min_DCT_v_scaled_size = 14; + } else if (cinfo->scale_num * DCTSIZE <= cinfo->scale_denom * 15) { + /* Provide 15/block_size scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 15L, (long) DCTSIZE); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 15L, (long) DCTSIZE); + cinfo->_min_DCT_h_scaled_size = 15; + cinfo->_min_DCT_v_scaled_size = 15; + } else { + /* Provide 16/block_size scaling */ + cinfo->output_width = (JDIMENSION) + jdiv_round_up((long) cinfo->image_width * 16L, (long) DCTSIZE); + cinfo->output_height = (JDIMENSION) + jdiv_round_up((long) cinfo->image_height * 16L, (long) DCTSIZE); + cinfo->_min_DCT_h_scaled_size = 16; + cinfo->_min_DCT_v_scaled_size = 16; + } + + /* Recompute dimensions of components */ + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + compptr->_DCT_h_scaled_size = cinfo->_min_DCT_h_scaled_size; + compptr->_DCT_v_scaled_size = cinfo->_min_DCT_v_scaled_size; + } + +#else /* !IDCT_SCALING_SUPPORTED */ + + /* Hardwire it to "no scaling" */ + cinfo->output_width = cinfo->image_width; + cinfo->output_height = cinfo->image_height; + /* jdinput.c has already initialized DCT_scaled_size, + * and has computed unscaled downsampled_width and downsampled_height. + */ + +#endif /* IDCT_SCALING_SUPPORTED */ +} + + /* * Compute output image dimensions and related values. * NOTE: this is exported for possible use by application. @@ -105,52 +277,11 @@ jpeg_calc_output_dimensions (j_decompress_ptr cinfo) if (cinfo->global_state != DSTATE_READY) ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); + /* Compute core output image dimensions and DCT scaling choices. */ + jpeg_core_output_dimensions(cinfo); + #ifdef IDCT_SCALING_SUPPORTED - /* Compute actual output image dimensions and DCT scaling choices. */ - if (cinfo->scale_num * 8 <= cinfo->scale_denom) { - /* Provide 1/8 scaling */ - cinfo->output_width = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width, 8L); - cinfo->output_height = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height, 8L); -#if JPEG_LIB_VERSION >= 70 - cinfo->min_DCT_h_scaled_size = cinfo->min_DCT_v_scaled_size = 1; -#else - cinfo->min_DCT_scaled_size = 1; -#endif - } else if (cinfo->scale_num * 4 <= cinfo->scale_denom) { - /* Provide 1/4 scaling */ - cinfo->output_width = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width, 4L); - cinfo->output_height = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height, 4L); -#if JPEG_LIB_VERSION >= 70 - cinfo->min_DCT_h_scaled_size = cinfo->min_DCT_v_scaled_size = 2; -#else - cinfo->min_DCT_scaled_size = 2; -#endif - } else if (cinfo->scale_num * 2 <= cinfo->scale_denom) { - /* Provide 1/2 scaling */ - cinfo->output_width = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width, 2L); - cinfo->output_height = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height, 2L); -#if JPEG_LIB_VERSION >= 70 - cinfo->min_DCT_h_scaled_size = cinfo->min_DCT_v_scaled_size = 4; -#else - cinfo->min_DCT_scaled_size = 4; -#endif - } else { - /* Provide 1/1 scaling */ - cinfo->output_width = cinfo->image_width; - cinfo->output_height = cinfo->image_height; -#if JPEG_LIB_VERSION >= 70 - cinfo->min_DCT_h_scaled_size = cinfo->min_DCT_v_scaled_size = DCTSIZE; -#else - cinfo->min_DCT_scaled_size = DCTSIZE; -#endif - } /* In selecting the actual DCT scaling for each component, we try to * scale up the chroma components via IDCT scaling rather than upsampling. * This saves time if the upsampler gets to use 1:1 scaling. diff --git a/jidctint.c b/jidctint.c index a72b3207..77d81215 100644 --- a/jidctint.c +++ b/jidctint.c @@ -2,6 +2,7 @@ * jidctint.c * * Copyright (C) 1991-1998, Thomas G. Lane. + * Modification developed 2002-2009 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -23,6 +24,27 @@ * The advantage of this method is that no data path contains more than one * multiplication; this allows a very simple and accurate implementation in * scaled fixed-point arithmetic, with a minimal number of shifts. + * + * We also provide IDCT routines with various output sample block sizes for + * direct resolution reduction or enlargement without additional resampling: + * NxN (N=1...16) pixels for one 8x8 input DCT block. + * + * For N<8 we simply take the corresponding low-frequency coefficients of + * the 8x8 input DCT block and apply an NxN point IDCT on the sub-block + * to yield the downscaled outputs. + * This can be seen as direct low-pass downsampling from the DCT domain + * point of view rather than the usual spatial domain point of view, + * yielding significant computational savings and results at least + * as good as common bilinear (averaging) spatial downsampling. + * + * For N>8 we apply a partial NxN IDCT on the 8 input coefficients as + * lower frequencies and higher frequencies assumed to be zero. + * It turns out that the computational effort is similar to the 8x8 IDCT + * regarding the output size. + * Furthermore, the scaling and descaling is the same for all IDCT sizes. + * + * CAUTION: We rely on the FIX() macro except for the N=1,2,4,8 cases + * since there would be too many additional constants to pre-calculate. */ #define JPEG_INTERNALS @@ -38,7 +60,7 @@ */ #if DCTSIZE != 8 - Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ + Sorry, this code only copes with 8x8 DCT blocks. /* deliberate syntax err */ #endif @@ -386,4 +408,2216 @@ jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr, } } +#ifdef IDCT_SCALING_SUPPORTED + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 7x7 output block. + * + * Optimized algorithm with 12 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/14). + */ + +GLOBAL(void) +jpeg_idct_7x7 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp10, tmp11, tmp12, tmp13; + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[7*7]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 7; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp13 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp13 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp13 += ONE << (CONST_BITS-PASS1_BITS-1); + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp10 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + tmp12 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ + tmp11 = tmp10 + tmp12 + tmp13 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */ + tmp0 = z1 + z3; + z2 -= tmp0; + tmp0 = MULTIPLY(tmp0, FIX(1.274162392)) + tmp13; /* c2 */ + tmp10 += tmp0 - MULTIPLY(z3, FIX(0.077722536)); /* c2-c4-c6 */ + tmp12 += tmp0 - MULTIPLY(z1, FIX(2.470602249)); /* c2+c4+c6 */ + tmp13 += MULTIPLY(z2, FIX(1.414213562)); /* c0 */ + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + + tmp1 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + tmp2 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + tmp0 = tmp1 - tmp2; + tmp1 += tmp2; + tmp2 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + tmp1 += tmp2; + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + tmp0 += z2; + tmp2 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + + /* Final output stage */ + + wsptr[7*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[7*6] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + wsptr[7*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS); + wsptr[7*5] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + wsptr[7*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + wsptr[7*4] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + wsptr[7*3] = (int) RIGHT_SHIFT(tmp13, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 7 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 7; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp13 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp13 <<= CONST_BITS; + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[4]; + z3 = (INT32) wsptr[6]; + + tmp10 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ + tmp12 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ + tmp11 = tmp10 + tmp12 + tmp13 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */ + tmp0 = z1 + z3; + z2 -= tmp0; + tmp0 = MULTIPLY(tmp0, FIX(1.274162392)) + tmp13; /* c2 */ + tmp10 += tmp0 - MULTIPLY(z3, FIX(0.077722536)); /* c2-c4-c6 */ + tmp12 += tmp0 - MULTIPLY(z1, FIX(2.470602249)); /* c2+c4+c6 */ + tmp13 += MULTIPLY(z2, FIX(1.414213562)); /* c0 */ + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + + tmp1 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ + tmp2 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ + tmp0 = tmp1 - tmp2; + tmp1 += tmp2; + tmp2 = MULTIPLY(z2 + z3, - FIX(1.378756276)); /* -c1 */ + tmp1 += tmp2; + z2 = MULTIPLY(z1 + z3, FIX(0.613604268)); /* c5 */ + tmp0 += z2; + tmp2 += z2 + MULTIPLY(z3, FIX(1.870828693)); /* c3+c1-c5 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 7; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 6x6 output block. + * + * Optimized algorithm with 3 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/12). + */ + +GLOBAL(void) +jpeg_idct_6x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp10, tmp11, tmp12; + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[6*6]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp0 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + tmp1 = tmp0 + tmp10; + tmp11 = RIGHT_SHIFT(tmp0 - tmp10 - tmp10, CONST_BITS-PASS1_BITS); + tmp10 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp0 = MULTIPLY(tmp10, FIX(1.224744871)); /* c2 */ + tmp10 = tmp1 + tmp0; + tmp12 = tmp1 - tmp0; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + tmp0 = tmp1 + ((z1 + z2) << CONST_BITS); + tmp2 = tmp1 + ((z3 - z2) << CONST_BITS); + tmp1 = (z1 - z2 - z3) << PASS1_BITS; + + /* Final output stage */ + + wsptr[6*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[6*5] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + wsptr[6*1] = (int) (tmp11 + tmp1); + wsptr[6*4] = (int) (tmp11 - tmp1); + wsptr[6*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + wsptr[6*3] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 6 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 6; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + tmp2 = (INT32) wsptr[4]; + tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ + tmp1 = tmp0 + tmp10; + tmp11 = tmp0 - tmp10 - tmp10; + tmp10 = (INT32) wsptr[2]; + tmp0 = MULTIPLY(tmp10, FIX(1.224744871)); /* c2 */ + tmp10 = tmp1 + tmp0; + tmp12 = tmp1 - tmp0; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ + tmp0 = tmp1 + ((z1 + z2) << CONST_BITS); + tmp2 = tmp1 + ((z3 - z2) << CONST_BITS); + tmp1 = (z1 - z2 - z3) << CONST_BITS; + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 6; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 5x5 output block. + * + * Optimized algorithm with 5 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/10). + */ + +GLOBAL(void) +jpeg_idct_5x5 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp10, tmp11, tmp12; + INT32 z1, z2, z3; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[5*5]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 5; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp12 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp12 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp12 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp0 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z1 = MULTIPLY(tmp0 + tmp1, FIX(0.790569415)); /* (c2+c4)/2 */ + z2 = MULTIPLY(tmp0 - tmp1, FIX(0.353553391)); /* (c2-c4)/2 */ + z3 = tmp12 + z2; + tmp10 = z3 + z1; + tmp11 = z3 - z1; + tmp12 -= z2 << 2; + + /* Odd part */ + + z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + tmp0 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c1-c3 */ + tmp1 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c1+c3 */ + + /* Final output stage */ + + wsptr[5*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[5*4] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + wsptr[5*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS); + wsptr[5*3] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + wsptr[5*2] = (int) RIGHT_SHIFT(tmp12, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 5 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 5; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp12 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp12 <<= CONST_BITS; + tmp0 = (INT32) wsptr[2]; + tmp1 = (INT32) wsptr[4]; + z1 = MULTIPLY(tmp0 + tmp1, FIX(0.790569415)); /* (c2+c4)/2 */ + z2 = MULTIPLY(tmp0 - tmp1, FIX(0.353553391)); /* (c2-c4)/2 */ + z3 = tmp12 + z2; + tmp10 = z3 + z1; + tmp11 = z3 - z1; + tmp12 -= z2 << 2; + + /* Odd part */ + + z2 = (INT32) wsptr[1]; + z3 = (INT32) wsptr[3]; + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ + tmp0 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c1-c3 */ + tmp1 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c1+c3 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 5; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a reduced-size 3x3 output block. + * + * Optimized algorithm with 2 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/6). + */ + +GLOBAL(void) +jpeg_idct_3x3 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp2, tmp10, tmp12; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[3*3]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 3; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp0 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ + tmp10 = tmp0 + tmp12; + tmp2 = tmp0 - tmp12 - tmp12; + + /* Odd part */ + + tmp12 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ + + /* Final output stage */ + + wsptr[3*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[3*2] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + wsptr[3*1] = (int) RIGHT_SHIFT(tmp2, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 3 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 3; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + tmp2 = (INT32) wsptr[2]; + tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ + tmp10 = tmp0 + tmp12; + tmp2 = tmp0 - tmp12 - tmp12; + + /* Odd part */ + + tmp12 = (INT32) wsptr[1]; + tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 3; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 9x9 output block. + * + * Optimized algorithm with 10 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/18). + */ + +GLOBAL(void) +jpeg_idct_9x9 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp10, tmp11, tmp12, tmp13, tmp14; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*9]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp0 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp0 += ONE << (CONST_BITS-PASS1_BITS-1); + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp3 = MULTIPLY(z3, FIX(0.707106781)); /* c6 */ + tmp1 = tmp0 + tmp3; + tmp2 = tmp0 - tmp3 - tmp3; + + tmp0 = MULTIPLY(z1 - z2, FIX(0.707106781)); /* c6 */ + tmp11 = tmp2 + tmp0; + tmp14 = tmp2 - tmp0 - tmp0; + + tmp0 = MULTIPLY(z1 + z2, FIX(1.328926049)); /* c2 */ + tmp2 = MULTIPLY(z1, FIX(1.083350441)); /* c4 */ + tmp3 = MULTIPLY(z2, FIX(0.245575608)); /* c8 */ + + tmp10 = tmp1 + tmp0 - tmp3; + tmp12 = tmp1 - tmp0 + tmp2; + tmp13 = tmp1 - tmp2 + tmp3; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + z2 = MULTIPLY(z2, - FIX(1.224744871)); /* -c3 */ + + tmp2 = MULTIPLY(z1 + z3, FIX(0.909038955)); /* c5 */ + tmp3 = MULTIPLY(z1 + z4, FIX(0.483689525)); /* c7 */ + tmp0 = tmp2 + tmp3 - z2; + tmp1 = MULTIPLY(z3 - z4, FIX(1.392728481)); /* c1 */ + tmp2 += z2 - tmp1; + tmp3 += z2 + tmp1; + tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */ + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS); + wsptr[8*7] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp13 + tmp3, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp13 - tmp3, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp14, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 9 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 9; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[4]; + z3 = (INT32) wsptr[6]; + + tmp3 = MULTIPLY(z3, FIX(0.707106781)); /* c6 */ + tmp1 = tmp0 + tmp3; + tmp2 = tmp0 - tmp3 - tmp3; + + tmp0 = MULTIPLY(z1 - z2, FIX(0.707106781)); /* c6 */ + tmp11 = tmp2 + tmp0; + tmp14 = tmp2 - tmp0 - tmp0; + + tmp0 = MULTIPLY(z1 + z2, FIX(1.328926049)); /* c2 */ + tmp2 = MULTIPLY(z1, FIX(1.083350441)); /* c4 */ + tmp3 = MULTIPLY(z2, FIX(0.245575608)); /* c8 */ + + tmp10 = tmp1 + tmp0 - tmp3; + tmp12 = tmp1 - tmp0 + tmp2; + tmp13 = tmp1 - tmp2 + tmp3; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z4 = (INT32) wsptr[7]; + + z2 = MULTIPLY(z2, - FIX(1.224744871)); /* -c3 */ + + tmp2 = MULTIPLY(z1 + z3, FIX(0.909038955)); /* c5 */ + tmp3 = MULTIPLY(z1 + z4, FIX(0.483689525)); /* c7 */ + tmp0 = tmp2 + tmp3 - z2; + tmp1 = MULTIPLY(z3 - z4, FIX(1.392728481)); /* c1 */ + tmp2 += z2 - tmp1; + tmp3 += z2 + tmp1; + tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 10x10 output block. + * + * Optimized algorithm with 12 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/20). + */ + +GLOBAL(void) +jpeg_idct_10x10 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24; + INT32 z1, z2, z3, z4, z5; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*10]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z3 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z3 += ONE << (CONST_BITS-PASS1_BITS-1); + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z1 = MULTIPLY(z4, FIX(1.144122806)); /* c4 */ + z2 = MULTIPLY(z4, FIX(0.437016024)); /* c8 */ + tmp10 = z3 + z1; + tmp11 = z3 - z2; + + tmp22 = RIGHT_SHIFT(z3 - ((z1 - z2) << 1), /* c0 = (c4-c8)*2 */ + CONST_BITS-PASS1_BITS); + + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c6 */ + tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */ + tmp13 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c2+c6 */ + + tmp20 = tmp10 + tmp12; + tmp24 = tmp10 - tmp12; + tmp21 = tmp11 + tmp13; + tmp23 = tmp11 - tmp13; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp11 = z2 + z4; + tmp13 = z2 - z4; + + tmp12 = MULTIPLY(tmp13, FIX(0.309016994)); /* (c3-c7)/2 */ + z5 = z3 << CONST_BITS; + + z2 = MULTIPLY(tmp11, FIX(0.951056516)); /* (c3+c7)/2 */ + z4 = z5 + tmp12; + + tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */ + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + + z2 = MULTIPLY(tmp11, FIX(0.587785252)); /* (c1-c9)/2 */ + z4 = z5 - tmp12 - (tmp13 << (CONST_BITS - 1)); + + tmp12 = (z1 - tmp13 - z3) << PASS1_BITS; + + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) (tmp22 + tmp12); + wsptr[8*7] = (int) (tmp22 - tmp12); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 10 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 10; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z3 <<= CONST_BITS; + z4 = (INT32) wsptr[4]; + z1 = MULTIPLY(z4, FIX(1.144122806)); /* c4 */ + z2 = MULTIPLY(z4, FIX(0.437016024)); /* c8 */ + tmp10 = z3 + z1; + tmp11 = z3 - z2; + + tmp22 = z3 - ((z1 - z2) << 1); /* c0 = (c4-c8)*2 */ + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[6]; + + z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c6 */ + tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */ + tmp13 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c2+c6 */ + + tmp20 = tmp10 + tmp12; + tmp24 = tmp10 - tmp12; + tmp21 = tmp11 + tmp13; + tmp23 = tmp11 - tmp13; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z3 <<= CONST_BITS; + z4 = (INT32) wsptr[7]; + + tmp11 = z2 + z4; + tmp13 = z2 - z4; + + tmp12 = MULTIPLY(tmp13, FIX(0.309016994)); /* (c3-c7)/2 */ + + z2 = MULTIPLY(tmp11, FIX(0.951056516)); /* (c3+c7)/2 */ + z4 = z3 + tmp12; + + tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */ + tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */ + + z2 = MULTIPLY(tmp11, FIX(0.587785252)); /* (c1-c9)/2 */ + z4 = z3 - tmp12 - (tmp13 << (CONST_BITS - 1)); + + tmp12 = ((z1 - tmp13) << CONST_BITS) - z3; + + tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */ + tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 11x11 output block. + * + * Optimized algorithm with 24 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/22). + */ + +GLOBAL(void) +jpeg_idct_11x11 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*11]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp10 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp10 += ONE << (CONST_BITS-PASS1_BITS-1); + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp20 = MULTIPLY(z2 - z3, FIX(2.546640132)); /* c2+c4 */ + tmp23 = MULTIPLY(z2 - z1, FIX(0.430815045)); /* c2-c6 */ + z4 = z1 + z3; + tmp24 = MULTIPLY(z4, - FIX(1.155664402)); /* -(c2-c10) */ + z4 -= z2; + tmp25 = tmp10 + MULTIPLY(z4, FIX(1.356927976)); /* c2 */ + tmp21 = tmp20 + tmp23 + tmp25 - + MULTIPLY(z2, FIX(1.821790775)); /* c2+c4+c10-c6 */ + tmp20 += tmp25 + MULTIPLY(z3, FIX(2.115825087)); /* c4+c6 */ + tmp23 += tmp25 - MULTIPLY(z1, FIX(1.513598477)); /* c6+c8 */ + tmp24 += tmp25; + tmp22 = tmp24 - MULTIPLY(z3, FIX(0.788749120)); /* c8+c10 */ + tmp24 += MULTIPLY(z2, FIX(1.944413522)) - /* c2+c8 */ + MULTIPLY(z1, FIX(1.390975730)); /* c4+c10 */ + tmp25 = tmp10 - MULTIPLY(z4, FIX(1.414213562)); /* c0 */ + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp11 = z1 + z2; + tmp14 = MULTIPLY(tmp11 + z3 + z4, FIX(0.398430003)); /* c9 */ + tmp11 = MULTIPLY(tmp11, FIX(0.887983902)); /* c3-c9 */ + tmp12 = MULTIPLY(z1 + z3, FIX(0.670361295)); /* c5-c9 */ + tmp13 = tmp14 + MULTIPLY(z1 + z4, FIX(0.366151574)); /* c7-c9 */ + tmp10 = tmp11 + tmp12 + tmp13 - + MULTIPLY(z1, FIX(0.923107866)); /* c7+c5+c3-c1-2*c9 */ + z1 = tmp14 - MULTIPLY(z2 + z3, FIX(1.163011579)); /* c7+c9 */ + tmp11 += z1 + MULTIPLY(z2, FIX(2.073276588)); /* c1+c7+3*c9-c3 */ + tmp12 += z1 - MULTIPLY(z3, FIX(1.192193623)); /* c3+c5-c7-c9 */ + z1 = MULTIPLY(z2 + z4, - FIX(1.798248910)); /* -(c1+c9) */ + tmp11 += z1; + tmp13 += z1 + MULTIPLY(z4, FIX(2.102458632)); /* c1+c5+c9-c7 */ + tmp14 += MULTIPLY(z2, - FIX(1.467221301)) + /* -(c5+c9) */ + MULTIPLY(z3, FIX(1.001388905)) - /* c1-c9 */ + MULTIPLY(z4, FIX(1.684843907)); /* c3+c9 */ + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*10] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*7] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 11 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 11; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp10 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp10 <<= CONST_BITS; + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[4]; + z3 = (INT32) wsptr[6]; + + tmp20 = MULTIPLY(z2 - z3, FIX(2.546640132)); /* c2+c4 */ + tmp23 = MULTIPLY(z2 - z1, FIX(0.430815045)); /* c2-c6 */ + z4 = z1 + z3; + tmp24 = MULTIPLY(z4, - FIX(1.155664402)); /* -(c2-c10) */ + z4 -= z2; + tmp25 = tmp10 + MULTIPLY(z4, FIX(1.356927976)); /* c2 */ + tmp21 = tmp20 + tmp23 + tmp25 - + MULTIPLY(z2, FIX(1.821790775)); /* c2+c4+c10-c6 */ + tmp20 += tmp25 + MULTIPLY(z3, FIX(2.115825087)); /* c4+c6 */ + tmp23 += tmp25 - MULTIPLY(z1, FIX(1.513598477)); /* c6+c8 */ + tmp24 += tmp25; + tmp22 = tmp24 - MULTIPLY(z3, FIX(0.788749120)); /* c8+c10 */ + tmp24 += MULTIPLY(z2, FIX(1.944413522)) - /* c2+c8 */ + MULTIPLY(z1, FIX(1.390975730)); /* c4+c10 */ + tmp25 = tmp10 - MULTIPLY(z4, FIX(1.414213562)); /* c0 */ + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z4 = (INT32) wsptr[7]; + + tmp11 = z1 + z2; + tmp14 = MULTIPLY(tmp11 + z3 + z4, FIX(0.398430003)); /* c9 */ + tmp11 = MULTIPLY(tmp11, FIX(0.887983902)); /* c3-c9 */ + tmp12 = MULTIPLY(z1 + z3, FIX(0.670361295)); /* c5-c9 */ + tmp13 = tmp14 + MULTIPLY(z1 + z4, FIX(0.366151574)); /* c7-c9 */ + tmp10 = tmp11 + tmp12 + tmp13 - + MULTIPLY(z1, FIX(0.923107866)); /* c7+c5+c3-c1-2*c9 */ + z1 = tmp14 - MULTIPLY(z2 + z3, FIX(1.163011579)); /* c7+c9 */ + tmp11 += z1 + MULTIPLY(z2, FIX(2.073276588)); /* c1+c7+3*c9-c3 */ + tmp12 += z1 - MULTIPLY(z3, FIX(1.192193623)); /* c3+c5-c7-c9 */ + z1 = MULTIPLY(z2 + z4, - FIX(1.798248910)); /* -(c1+c9) */ + tmp11 += z1; + tmp13 += z1 + MULTIPLY(z4, FIX(2.102458632)); /* c1+c5+c9-c7 */ + tmp14 += MULTIPLY(z2, - FIX(1.467221301)) + /* -(c5+c9) */ + MULTIPLY(z3, FIX(1.001388905)) - /* c1-c9 */ + MULTIPLY(z4, FIX(1.684843907)); /* c3+c9 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 12x12 output block. + * + * Optimized algorithm with 15 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/24). + */ + +GLOBAL(void) +jpeg_idct_12x12 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*12]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z3 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z3 += ONE << (CONST_BITS-PASS1_BITS-1); + + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */ + + tmp10 = z3 + z4; + tmp11 = z3 - z4; + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */ + z1 <<= CONST_BITS; + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + z2 <<= CONST_BITS; + + tmp12 = z1 - z2; + + tmp21 = z3 + tmp12; + tmp24 = z3 - tmp12; + + tmp12 = z4 + z2; + + tmp20 = tmp10 + tmp12; + tmp25 = tmp10 - tmp12; + + tmp12 = z4 - z1 - z2; + + tmp22 = tmp11 + tmp12; + tmp23 = tmp11 - tmp12; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */ + + tmp10 = z1 + z3; + tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669)); /* c7 */ + tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384)); /* c5-c7 */ + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + MULTIPLY(z4, FIX(1.982889723)); /* c5+c7 */ + + z1 -= z4; + z2 -= z3; + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + tmp11 = z3 + MULTIPLY(z1, FIX_0_765366865); /* c3-c9 */ + tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065); /* c3+c9 */ + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*11] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*10] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*7] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 12 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 12; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z3 <<= CONST_BITS; + + z4 = (INT32) wsptr[4]; + z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */ + + tmp10 = z3 + z4; + tmp11 = z3 - z4; + + z1 = (INT32) wsptr[2]; + z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */ + z1 <<= CONST_BITS; + z2 = (INT32) wsptr[6]; + z2 <<= CONST_BITS; + + tmp12 = z1 - z2; + + tmp21 = z3 + tmp12; + tmp24 = z3 - tmp12; + + tmp12 = z4 + z2; + + tmp20 = tmp10 + tmp12; + tmp25 = tmp10 - tmp12; + + tmp12 = z4 - z1 - z2; + + tmp22 = tmp11 + tmp12; + tmp23 = tmp11 - tmp12; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z4 = (INT32) wsptr[7]; + + tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ + tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */ + + tmp10 = z1 + z3; + tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669)); /* c7 */ + tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384)); /* c5-c7 */ + tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716)); /* c1-c5 */ + tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580)); /* -(c7+c11) */ + tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */ + tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */ + tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) - /* c7-c11 */ + MULTIPLY(z4, FIX(1.982889723)); /* c5+c7 */ + + z1 -= z4; + z2 -= z3; + z3 = MULTIPLY(z1 + z2, FIX_0_541196100); /* c9 */ + tmp11 = z3 + MULTIPLY(z1, FIX_0_765366865); /* c3-c9 */ + tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065); /* c3+c9 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 13x13 output block. + * + * Optimized algorithm with 29 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/26). + */ + +GLOBAL(void) +jpeg_idct_13x13 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*13]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z1 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z4 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp10 = z3 + z4; + tmp11 = z3 - z4; + + tmp12 = MULTIPLY(tmp10, FIX(1.155388986)); /* (c4+c6)/2 */ + tmp13 = MULTIPLY(tmp11, FIX(0.096834934)) + z1; /* (c4-c6)/2 */ + + tmp20 = MULTIPLY(z2, FIX(1.373119086)) + tmp12 + tmp13; /* c2 */ + tmp22 = MULTIPLY(z2, FIX(0.501487041)) - tmp12 + tmp13; /* c10 */ + + tmp12 = MULTIPLY(tmp10, FIX(0.316450131)); /* (c8-c12)/2 */ + tmp13 = MULTIPLY(tmp11, FIX(0.486914739)) + z1; /* (c8+c12)/2 */ + + tmp21 = MULTIPLY(z2, FIX(1.058554052)) - tmp12 + tmp13; /* c6 */ + tmp25 = MULTIPLY(z2, - FIX(1.252223920)) + tmp12 + tmp13; /* c4 */ + + tmp12 = MULTIPLY(tmp10, FIX(0.435816023)); /* (c2-c10)/2 */ + tmp13 = MULTIPLY(tmp11, FIX(0.937303064)) - z1; /* (c2+c10)/2 */ + + tmp23 = MULTIPLY(z2, - FIX(0.170464608)) - tmp12 - tmp13; /* c12 */ + tmp24 = MULTIPLY(z2, - FIX(0.803364869)) + tmp12 - tmp13; /* c8 */ + + tmp26 = MULTIPLY(tmp11 - z2, FIX(1.414213562)) + z1; /* c0 */ + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651)); /* c3 */ + tmp12 = MULTIPLY(z1 + z3, FIX(1.163874945)); /* c5 */ + tmp15 = z1 + z4; + tmp13 = MULTIPLY(tmp15, FIX(0.937797057)); /* c7 */ + tmp10 = tmp11 + tmp12 + tmp13 - + MULTIPLY(z1, FIX(2.020082300)); /* c7+c5+c3-c1 */ + tmp14 = MULTIPLY(z2 + z3, - FIX(0.338443458)); /* -c11 */ + tmp11 += tmp14 + MULTIPLY(z2, FIX(0.837223564)); /* c5+c9+c11-c3 */ + tmp12 += tmp14 - MULTIPLY(z3, FIX(1.572116027)); /* c1+c5-c9-c11 */ + tmp14 = MULTIPLY(z2 + z4, - FIX(1.163874945)); /* -c5 */ + tmp11 += tmp14; + tmp13 += tmp14 + MULTIPLY(z4, FIX(2.205608352)); /* c3+c5+c9-c7 */ + tmp14 = MULTIPLY(z3 + z4, - FIX(0.657217813)); /* -c9 */ + tmp12 += tmp14; + tmp13 += tmp14; + tmp15 = MULTIPLY(tmp15, FIX(0.338443458)); /* c11 */ + tmp14 = tmp15 + MULTIPLY(z1, FIX(0.318774355)) - /* c9-c11 */ + MULTIPLY(z2, FIX(0.466105296)); /* c1-c7 */ + z1 = MULTIPLY(z3 - z2, FIX(0.937797057)); /* c7 */ + tmp14 += z1; + tmp15 += z1 + MULTIPLY(z3, FIX(0.384515595)) - /* c3-c7 */ + MULTIPLY(z4, FIX(1.742345811)); /* c1+c11 */ + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*12] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*11] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*10] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + wsptr[8*7] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp26, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 13 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 13; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z1 <<= CONST_BITS; + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[4]; + z4 = (INT32) wsptr[6]; + + tmp10 = z3 + z4; + tmp11 = z3 - z4; + + tmp12 = MULTIPLY(tmp10, FIX(1.155388986)); /* (c4+c6)/2 */ + tmp13 = MULTIPLY(tmp11, FIX(0.096834934)) + z1; /* (c4-c6)/2 */ + + tmp20 = MULTIPLY(z2, FIX(1.373119086)) + tmp12 + tmp13; /* c2 */ + tmp22 = MULTIPLY(z2, FIX(0.501487041)) - tmp12 + tmp13; /* c10 */ + + tmp12 = MULTIPLY(tmp10, FIX(0.316450131)); /* (c8-c12)/2 */ + tmp13 = MULTIPLY(tmp11, FIX(0.486914739)) + z1; /* (c8+c12)/2 */ + + tmp21 = MULTIPLY(z2, FIX(1.058554052)) - tmp12 + tmp13; /* c6 */ + tmp25 = MULTIPLY(z2, - FIX(1.252223920)) + tmp12 + tmp13; /* c4 */ + + tmp12 = MULTIPLY(tmp10, FIX(0.435816023)); /* (c2-c10)/2 */ + tmp13 = MULTIPLY(tmp11, FIX(0.937303064)) - z1; /* (c2+c10)/2 */ + + tmp23 = MULTIPLY(z2, - FIX(0.170464608)) - tmp12 - tmp13; /* c12 */ + tmp24 = MULTIPLY(z2, - FIX(0.803364869)) + tmp12 - tmp13; /* c8 */ + + tmp26 = MULTIPLY(tmp11 - z2, FIX(1.414213562)) + z1; /* c0 */ + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z4 = (INT32) wsptr[7]; + + tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651)); /* c3 */ + tmp12 = MULTIPLY(z1 + z3, FIX(1.163874945)); /* c5 */ + tmp15 = z1 + z4; + tmp13 = MULTIPLY(tmp15, FIX(0.937797057)); /* c7 */ + tmp10 = tmp11 + tmp12 + tmp13 - + MULTIPLY(z1, FIX(2.020082300)); /* c7+c5+c3-c1 */ + tmp14 = MULTIPLY(z2 + z3, - FIX(0.338443458)); /* -c11 */ + tmp11 += tmp14 + MULTIPLY(z2, FIX(0.837223564)); /* c5+c9+c11-c3 */ + tmp12 += tmp14 - MULTIPLY(z3, FIX(1.572116027)); /* c1+c5-c9-c11 */ + tmp14 = MULTIPLY(z2 + z4, - FIX(1.163874945)); /* -c5 */ + tmp11 += tmp14; + tmp13 += tmp14 + MULTIPLY(z4, FIX(2.205608352)); /* c3+c5+c9-c7 */ + tmp14 = MULTIPLY(z3 + z4, - FIX(0.657217813)); /* -c9 */ + tmp12 += tmp14; + tmp13 += tmp14; + tmp15 = MULTIPLY(tmp15, FIX(0.338443458)); /* c11 */ + tmp14 = tmp15 + MULTIPLY(z1, FIX(0.318774355)) - /* c9-c11 */ + MULTIPLY(z2, FIX(0.466105296)); /* c1-c7 */ + z1 = MULTIPLY(z3 - z2, FIX(0.937797057)); /* c7 */ + tmp14 += z1; + tmp15 += z1 + MULTIPLY(z3, FIX(0.384515595)) - /* c3-c7 */ + MULTIPLY(z4, FIX(1.742345811)); /* c1+c11 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 14x14 output block. + * + * Optimized algorithm with 20 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/28). + */ + +GLOBAL(void) +jpeg_idct_14x14 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*14]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z1 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ + z3 = MULTIPLY(z4, FIX(0.314692123)); /* c12 */ + z4 = MULTIPLY(z4, FIX(0.881747734)); /* c8 */ + + tmp10 = z1 + z2; + tmp11 = z1 + z3; + tmp12 = z1 - z4; + + tmp23 = RIGHT_SHIFT(z1 - ((z2 + z3 - z4) << 1), /* c0 = (c4+c12-c8)*2 */ + CONST_BITS-PASS1_BITS); + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + + tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */ + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + tmp15 = MULTIPLY(z1, FIX(0.613604268)) - /* c10 */ + MULTIPLY(z2, FIX(1.378756276)); /* c2 */ + + tmp20 = tmp10 + tmp13; + tmp26 = tmp10 - tmp13; + tmp21 = tmp11 + tmp14; + tmp25 = tmp11 - tmp14; + tmp22 = tmp12 + tmp15; + tmp24 = tmp12 - tmp15; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + tmp13 = z4 << CONST_BITS; + + tmp14 = z1 + z3; + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + tmp12 = MULTIPLY(tmp14, FIX(1.197448846)); /* c5 */ + tmp10 = tmp11 + tmp12 + tmp13 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */ + tmp14 = MULTIPLY(tmp14, FIX(0.752406978)); /* c9 */ + tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426)); /* c9+c11-c13 */ + z1 -= z2; + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - tmp13; /* c11 */ + tmp16 += tmp15; + z1 += z4; + z4 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - tmp13; /* -c13 */ + tmp11 += z4 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + tmp12 += z4 - MULTIPLY(z3, FIX(2.373959773)); /* c3+c5-c13 */ + z4 = MULTIPLY(z3 - z2, FIX(1.405321284)); /* c1 */ + tmp14 += z4 + tmp13 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + tmp15 += z4 + MULTIPLY(z2, FIX(0.674957567)); /* c1+c11-c5 */ + + tmp13 = (z1 - z3) << PASS1_BITS; + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*13] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*12] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*11] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) (tmp23 + tmp13); + wsptr[8*10] = (int) (tmp23 - tmp13); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp26 + tmp16, CONST_BITS-PASS1_BITS); + wsptr[8*7] = (int) RIGHT_SHIFT(tmp26 - tmp16, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 14 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 14; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z1 <<= CONST_BITS; + z4 = (INT32) wsptr[4]; + z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ + z3 = MULTIPLY(z4, FIX(0.314692123)); /* c12 */ + z4 = MULTIPLY(z4, FIX(0.881747734)); /* c8 */ + + tmp10 = z1 + z2; + tmp11 = z1 + z3; + tmp12 = z1 - z4; + + tmp23 = z1 - ((z2 + z3 - z4) << 1); /* c0 = (c4+c12-c8)*2 */ + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[6]; + + z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ + + tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */ + tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */ + tmp15 = MULTIPLY(z1, FIX(0.613604268)) - /* c10 */ + MULTIPLY(z2, FIX(1.378756276)); /* c2 */ + + tmp20 = tmp10 + tmp13; + tmp26 = tmp10 - tmp13; + tmp21 = tmp11 + tmp14; + tmp25 = tmp11 - tmp14; + tmp22 = tmp12 + tmp15; + tmp24 = tmp12 - tmp15; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z4 = (INT32) wsptr[7]; + z4 <<= CONST_BITS; + + tmp14 = z1 + z3; + tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607)); /* c3 */ + tmp12 = MULTIPLY(tmp14, FIX(1.197448846)); /* c5 */ + tmp10 = tmp11 + tmp12 + z4 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */ + tmp14 = MULTIPLY(tmp14, FIX(0.752406978)); /* c9 */ + tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426)); /* c9+c11-c13 */ + z1 -= z2; + tmp15 = MULTIPLY(z1, FIX(0.467085129)) - z4; /* c11 */ + tmp16 += tmp15; + tmp13 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - z4; /* -c13 */ + tmp11 += tmp13 - MULTIPLY(z2, FIX(0.424103948)); /* c3-c9-c13 */ + tmp12 += tmp13 - MULTIPLY(z3, FIX(2.373959773)); /* c3+c5-c13 */ + tmp13 = MULTIPLY(z3 - z2, FIX(1.405321284)); /* c1 */ + tmp14 += tmp13 + z4 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */ + tmp15 += tmp13 + MULTIPLY(z2, FIX(0.674957567)); /* c1+c11-c5 */ + + tmp13 = ((z1 - z3) << CONST_BITS) + z4; + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 15x15 output block. + * + * Optimized algorithm with 22 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/30). + */ + +GLOBAL(void) +jpeg_idct_15x15 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*15]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + z1 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + z1 += ONE << (CONST_BITS-PASS1_BITS-1); + + z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + z4 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + + tmp10 = MULTIPLY(z4, FIX(0.437016024)); /* c12 */ + tmp11 = MULTIPLY(z4, FIX(1.144122806)); /* c6 */ + + tmp12 = z1 - tmp10; + tmp13 = z1 + tmp11; + z1 -= (tmp11 - tmp10) << 1; /* c0 = (c6-c12)*2 */ + + z4 = z2 - z3; + z3 += z2; + tmp10 = MULTIPLY(z3, FIX(1.337628990)); /* (c2+c4)/2 */ + tmp11 = MULTIPLY(z4, FIX(0.045680613)); /* (c2-c4)/2 */ + z2 = MULTIPLY(z2, FIX(1.439773946)); /* c4+c14 */ + + tmp20 = tmp13 + tmp10 + tmp11; + tmp23 = tmp12 - tmp10 + tmp11 + z2; + + tmp10 = MULTIPLY(z3, FIX(0.547059574)); /* (c8+c14)/2 */ + tmp11 = MULTIPLY(z4, FIX(0.399234004)); /* (c8-c14)/2 */ + + tmp25 = tmp13 - tmp10 - tmp11; + tmp26 = tmp12 + tmp10 - tmp11 - z2; + + tmp10 = MULTIPLY(z3, FIX(0.790569415)); /* (c6+c12)/2 */ + tmp11 = MULTIPLY(z4, FIX(0.353553391)); /* (c6-c12)/2 */ + + tmp21 = tmp12 + tmp10 + tmp11; + tmp24 = tmp13 - tmp10 + tmp11; + tmp11 += tmp11; + tmp22 = z1 + tmp11; /* c10 = c6-c12 */ + tmp27 = z1 - tmp11 - tmp11; /* c0 = (c6-c12)*2 */ + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z4 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z3 = MULTIPLY(z4, FIX(1.224744871)); /* c5 */ + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp13 = z2 - z4; + tmp15 = MULTIPLY(z1 + tmp13, FIX(0.831253876)); /* c9 */ + tmp11 = tmp15 + MULTIPLY(z1, FIX(0.513743148)); /* c3-c9 */ + tmp14 = tmp15 - MULTIPLY(tmp13, FIX(2.176250899)); /* c3+c9 */ + + tmp13 = MULTIPLY(z2, - FIX(0.831253876)); /* -c9 */ + tmp15 = MULTIPLY(z2, - FIX(1.344997024)); /* -c3 */ + z2 = z1 - z4; + tmp12 = z3 + MULTIPLY(z2, FIX(1.406466353)); /* c1 */ + + tmp10 = tmp12 + MULTIPLY(z4, FIX(2.457431844)) - tmp15; /* c1+c7 */ + tmp16 = tmp12 - MULTIPLY(z1, FIX(1.112434820)) + tmp13; /* c1-c13 */ + tmp12 = MULTIPLY(z2, FIX(1.224744871)) - z3; /* c5 */ + z2 = MULTIPLY(z1 + z4, FIX(0.575212477)); /* c11 */ + tmp13 += z2 + MULTIPLY(z1, FIX(0.475753014)) - z3; /* c7-c11 */ + tmp15 += z2 - MULTIPLY(z4, FIX(0.869244010)) + z3; /* c11+c13 */ + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*14] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*13] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*12] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*11] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*10] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp26 + tmp16, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp26 - tmp16, CONST_BITS-PASS1_BITS); + wsptr[8*7] = (int) RIGHT_SHIFT(tmp27, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 15 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 15; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + z1 <<= CONST_BITS; + + z2 = (INT32) wsptr[2]; + z3 = (INT32) wsptr[4]; + z4 = (INT32) wsptr[6]; + + tmp10 = MULTIPLY(z4, FIX(0.437016024)); /* c12 */ + tmp11 = MULTIPLY(z4, FIX(1.144122806)); /* c6 */ + + tmp12 = z1 - tmp10; + tmp13 = z1 + tmp11; + z1 -= (tmp11 - tmp10) << 1; /* c0 = (c6-c12)*2 */ + + z4 = z2 - z3; + z3 += z2; + tmp10 = MULTIPLY(z3, FIX(1.337628990)); /* (c2+c4)/2 */ + tmp11 = MULTIPLY(z4, FIX(0.045680613)); /* (c2-c4)/2 */ + z2 = MULTIPLY(z2, FIX(1.439773946)); /* c4+c14 */ + + tmp20 = tmp13 + tmp10 + tmp11; + tmp23 = tmp12 - tmp10 + tmp11 + z2; + + tmp10 = MULTIPLY(z3, FIX(0.547059574)); /* (c8+c14)/2 */ + tmp11 = MULTIPLY(z4, FIX(0.399234004)); /* (c8-c14)/2 */ + + tmp25 = tmp13 - tmp10 - tmp11; + tmp26 = tmp12 + tmp10 - tmp11 - z2; + + tmp10 = MULTIPLY(z3, FIX(0.790569415)); /* (c6+c12)/2 */ + tmp11 = MULTIPLY(z4, FIX(0.353553391)); /* (c6-c12)/2 */ + + tmp21 = tmp12 + tmp10 + tmp11; + tmp24 = tmp13 - tmp10 + tmp11; + tmp11 += tmp11; + tmp22 = z1 + tmp11; /* c10 = c6-c12 */ + tmp27 = z1 - tmp11 - tmp11; /* c0 = (c6-c12)*2 */ + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z4 = (INT32) wsptr[5]; + z3 = MULTIPLY(z4, FIX(1.224744871)); /* c5 */ + z4 = (INT32) wsptr[7]; + + tmp13 = z2 - z4; + tmp15 = MULTIPLY(z1 + tmp13, FIX(0.831253876)); /* c9 */ + tmp11 = tmp15 + MULTIPLY(z1, FIX(0.513743148)); /* c3-c9 */ + tmp14 = tmp15 - MULTIPLY(tmp13, FIX(2.176250899)); /* c3+c9 */ + + tmp13 = MULTIPLY(z2, - FIX(0.831253876)); /* -c9 */ + tmp15 = MULTIPLY(z2, - FIX(1.344997024)); /* -c3 */ + z2 = z1 - z4; + tmp12 = z3 + MULTIPLY(z2, FIX(1.406466353)); /* c1 */ + + tmp10 = tmp12 + MULTIPLY(z4, FIX(2.457431844)) - tmp15; /* c1+c7 */ + tmp16 = tmp12 - MULTIPLY(z1, FIX(1.112434820)) + tmp13; /* c1-c13 */ + tmp12 = MULTIPLY(z2, FIX(1.224744871)) - z3; /* c5 */ + z2 = MULTIPLY(z1 + z4, FIX(0.575212477)); /* c11 */ + tmp13 += z2 + MULTIPLY(z1, FIX(0.475753014)) - z3; /* c7-c11 */ + tmp15 += z2 - MULTIPLY(z4, FIX(0.869244010)) + z3; /* c11+c13 */ + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[14] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp27, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + + +/* + * Perform dequantization and inverse DCT on one block of coefficients, + * producing a 16x16 output block. + * + * Optimized algorithm with 28 multiplications in the 1-D kernel. + * cK represents sqrt(2) * cos(K*pi/32). + */ + +GLOBAL(void) +jpeg_idct_16x16 (j_decompress_ptr cinfo, jpeg_component_info * compptr, + JCOEFPTR coef_block, + JSAMPARRAY output_buf, JDIMENSION output_col) +{ + INT32 tmp0, tmp1, tmp2, tmp3, tmp10, tmp11, tmp12, tmp13; + INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27; + INT32 z1, z2, z3, z4; + JCOEFPTR inptr; + ISLOW_MULT_TYPE * quantptr; + int * wsptr; + JSAMPROW outptr; + JSAMPLE *range_limit = IDCT_range_limit(cinfo); + int ctr; + int workspace[8*16]; /* buffers data between passes */ + SHIFT_TEMPS + + /* Pass 1: process columns from input, store into work array. */ + + inptr = coef_block; + quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; + wsptr = workspace; + for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) { + /* Even part */ + + tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]); + tmp0 <<= CONST_BITS; + /* Add fudge factor here for final descale. */ + tmp0 += 1 << (CONST_BITS-PASS1_BITS-1); + + z1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]); + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + tmp2 = MULTIPLY(z1, FIX_0_541196100); /* c12[16] = c6[8] */ + + tmp10 = tmp0 + tmp1; + tmp11 = tmp0 - tmp1; + tmp12 = tmp0 + tmp2; + tmp13 = tmp0 - tmp2; + + z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]); + z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]); + z3 = z1 - z2; + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + z3 = MULTIPLY(z3, FIX(1.387039845)); /* c2[16] = c1[8] */ + + tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447); /* (c6+c2)[16] = (c3+c1)[8] */ + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */ + tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */ + + tmp20 = tmp10 + tmp0; + tmp27 = tmp10 - tmp0; + tmp21 = tmp12 + tmp1; + tmp26 = tmp12 - tmp1; + tmp22 = tmp13 + tmp2; + tmp25 = tmp13 - tmp2; + tmp23 = tmp11 + tmp3; + tmp24 = tmp11 - tmp3; + + /* Odd part */ + + z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]); + z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]); + z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]); + z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]); + + tmp11 = z1 + z3; + + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + tmp2 = MULTIPLY(tmp11, FIX(1.247225013)); /* c5 */ + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + tmp11 = MULTIPLY(tmp11, FIX(0.666655658)); /* c11 */ + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + tmp0 = tmp1 + tmp2 + tmp3 - + MULTIPLY(z1, FIX(2.286341144)); /* c7+c5+c3-c1 */ + tmp13 = tmp10 + tmp11 + tmp12 - + MULTIPLY(z1, FIX(1.835730603)); /* c9+c11+c13-c15 */ + z1 = MULTIPLY(z2 + z3, FIX(0.138617169)); /* c15 */ + tmp1 += z1 + MULTIPLY(z2, FIX(0.071888074)); /* c9+c11-c3-c15 */ + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + z2 += z4; + z1 = MULTIPLY(z2, - FIX(0.666655658)); /* -c11 */ + tmp1 += z1; + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + z2 = MULTIPLY(z2, - FIX(1.247225013)); /* -c5 */ + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + tmp12 += z2; + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + tmp2 += z2; + tmp3 += z2; + z2 = MULTIPLY(z4 - z3, FIX(0.410524528)); /* c13 */ + tmp10 += z2; + tmp11 += z2; + + /* Final output stage */ + + wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp0, CONST_BITS-PASS1_BITS); + wsptr[8*15] = (int) RIGHT_SHIFT(tmp20 - tmp0, CONST_BITS-PASS1_BITS); + wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp1, CONST_BITS-PASS1_BITS); + wsptr[8*14] = (int) RIGHT_SHIFT(tmp21 - tmp1, CONST_BITS-PASS1_BITS); + wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp2, CONST_BITS-PASS1_BITS); + wsptr[8*13] = (int) RIGHT_SHIFT(tmp22 - tmp2, CONST_BITS-PASS1_BITS); + wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp3, CONST_BITS-PASS1_BITS); + wsptr[8*12] = (int) RIGHT_SHIFT(tmp23 - tmp3, CONST_BITS-PASS1_BITS); + wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*11] = (int) RIGHT_SHIFT(tmp24 - tmp10, CONST_BITS-PASS1_BITS); + wsptr[8*5] = (int) RIGHT_SHIFT(tmp25 + tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*10] = (int) RIGHT_SHIFT(tmp25 - tmp11, CONST_BITS-PASS1_BITS); + wsptr[8*6] = (int) RIGHT_SHIFT(tmp26 + tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*9] = (int) RIGHT_SHIFT(tmp26 - tmp12, CONST_BITS-PASS1_BITS); + wsptr[8*7] = (int) RIGHT_SHIFT(tmp27 + tmp13, CONST_BITS-PASS1_BITS); + wsptr[8*8] = (int) RIGHT_SHIFT(tmp27 - tmp13, CONST_BITS-PASS1_BITS); + } + + /* Pass 2: process 16 rows from work array, store into output array. */ + + wsptr = workspace; + for (ctr = 0; ctr < 16; ctr++) { + outptr = output_buf[ctr] + output_col; + + /* Even part */ + + /* Add fudge factor here for final descale. */ + tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); + tmp0 <<= CONST_BITS; + + z1 = (INT32) wsptr[4]; + tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ + tmp2 = MULTIPLY(z1, FIX_0_541196100); /* c12[16] = c6[8] */ + + tmp10 = tmp0 + tmp1; + tmp11 = tmp0 - tmp1; + tmp12 = tmp0 + tmp2; + tmp13 = tmp0 - tmp2; + + z1 = (INT32) wsptr[2]; + z2 = (INT32) wsptr[6]; + z3 = z1 - z2; + z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ + z3 = MULTIPLY(z3, FIX(1.387039845)); /* c2[16] = c1[8] */ + + tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447); /* (c6+c2)[16] = (c3+c1)[8] */ + tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223); /* (c6-c14)[16] = (c3-c7)[8] */ + tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */ + tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */ + + tmp20 = tmp10 + tmp0; + tmp27 = tmp10 - tmp0; + tmp21 = tmp12 + tmp1; + tmp26 = tmp12 - tmp1; + tmp22 = tmp13 + tmp2; + tmp25 = tmp13 - tmp2; + tmp23 = tmp11 + tmp3; + tmp24 = tmp11 - tmp3; + + /* Odd part */ + + z1 = (INT32) wsptr[1]; + z2 = (INT32) wsptr[3]; + z3 = (INT32) wsptr[5]; + z4 = (INT32) wsptr[7]; + + tmp11 = z1 + z3; + + tmp1 = MULTIPLY(z1 + z2, FIX(1.353318001)); /* c3 */ + tmp2 = MULTIPLY(tmp11, FIX(1.247225013)); /* c5 */ + tmp3 = MULTIPLY(z1 + z4, FIX(1.093201867)); /* c7 */ + tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586)); /* c9 */ + tmp11 = MULTIPLY(tmp11, FIX(0.666655658)); /* c11 */ + tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528)); /* c13 */ + tmp0 = tmp1 + tmp2 + tmp3 - + MULTIPLY(z1, FIX(2.286341144)); /* c7+c5+c3-c1 */ + tmp13 = tmp10 + tmp11 + tmp12 - + MULTIPLY(z1, FIX(1.835730603)); /* c9+c11+c13-c15 */ + z1 = MULTIPLY(z2 + z3, FIX(0.138617169)); /* c15 */ + tmp1 += z1 + MULTIPLY(z2, FIX(0.071888074)); /* c9+c11-c3-c15 */ + tmp2 += z1 - MULTIPLY(z3, FIX(1.125726048)); /* c5+c7+c15-c3 */ + z1 = MULTIPLY(z3 - z2, FIX(1.407403738)); /* c1 */ + tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282)); /* c1+c11-c9-c13 */ + tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411)); /* c1+c5+c13-c7 */ + z2 += z4; + z1 = MULTIPLY(z2, - FIX(0.666655658)); /* -c11 */ + tmp1 += z1; + tmp3 += z1 + MULTIPLY(z4, FIX(1.065388962)); /* c3+c11+c15-c7 */ + z2 = MULTIPLY(z2, - FIX(1.247225013)); /* -c5 */ + tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809)); /* c1+c5+c9-c13 */ + tmp12 += z2; + z2 = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */ + tmp2 += z2; + tmp3 += z2; + z2 = MULTIPLY(z4 - z3, FIX(0.410524528)); /* c13 */ + tmp10 += z2; + tmp11 += z2; + + /* Final output stage */ + + outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[15] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp0, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[14] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp1, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp2, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp3, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp10, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp11, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp12, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp27 + tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp27 - tmp13, + CONST_BITS+PASS1_BITS+3) + & RANGE_MASK]; + + wsptr += 8; /* advance pointer to next row */ + } +} + +#endif /* IDCT_SCALING_SUPPORTED */ #endif /* DCT_ISLOW_SUPPORTED */ diff --git a/jpegcomp.h b/jpegcomp.h index 1b9e0a4f..ed9eeab8 100644 --- a/jpegcomp.h +++ b/jpegcomp.h @@ -11,6 +11,8 @@ #if JPEG_LIB_VERSION >= 70 #define _DCT_scaled_size DCT_h_scaled_size +#define _DCT_h_scaled_size DCT_h_scaled_size +#define _DCT_v_scaled_size DCT_v_scaled_size #define _min_DCT_scaled_size min_DCT_h_scaled_size #define _min_DCT_h_scaled_size min_DCT_h_scaled_size #define _min_DCT_v_scaled_size min_DCT_v_scaled_size @@ -18,6 +20,8 @@ #define _jpeg_height jpeg_height #else #define _DCT_scaled_size DCT_scaled_size +#define _DCT_h_scaled_size DCT_scaled_size +#define _DCT_v_scaled_size DCT_scaled_size #define _min_DCT_scaled_size min_DCT_scaled_size #define _min_DCT_h_scaled_size min_DCT_scaled_size #define _min_DCT_v_scaled_size min_DCT_scaled_size diff --git a/libjpeg.txt b/libjpeg.txt index c781757f..01535424 100644 --- a/libjpeg.txt +++ b/libjpeg.txt @@ -1113,7 +1113,8 @@ J_COLOR_SPACE out_color_space unsigned int scale_num, scale_denom Scale the image by the fraction scale_num/scale_denom. Default is 1/1, or no scaling. Currently, the only supported scaling ratios - are 1/1, 1/2, 1/4, and 1/8. (The library design allows for arbitrary + are M/8 with all M from 1 to 16, or any reduced fraction thereof (such + as 1/2, 3/4, etc.) (The library design allows for arbitrary scaling ratios but this is not likely to be implemented any time soon.) Smaller scaling ratios permit significantly faster decoding since fewer pixels need be processed and a simpler IDCT method can be used. diff --git a/testimgfst1_4.ppm b/testimgfst1_4.ppm deleted file mode 100644 index c4eda857..00000000 --- a/testimgfst1_4.ppm +++ /dev/null @@ -1,4 +0,0 @@ -P6 -57 38 -255 -0/-51.72.92,80-80-80-80-5-*4,)5-*5-*1.'41*63,96/B<0H@3JA2MA1YB4C3?2F;CHAD:@?=@-?-?,@*>.=+=,?+?6B4E9_>/;5572/62/41,.0-0/-5,-=13yD@`lXTPGbopubcSYSa,,,0/-2.+3.*2-*2-*2-*2-*2-*1,)3.+3.+41,41,52-850<5-@7.C9/I=1JG6fA/;*E6E>@?;=B3?-?,?.?+>-=,<-=.B3A;PHPF<@6494043.02--3/02/21/3/.P5*sTY|~YXJ>fDCUMVQQYNaXQ,-/---.-+/+(.*).*)/+*/+*/+*0,+1-,1-,1-*2.+1-*40-:2/=4/?4.E80J=5V93r7/;1A5D:F?C2@.=-=-=,<,;-<0B7H;OJ}mhseKI=77-01+/0+.0-//-00.00.:/7jhivhoiyxj{k`Z@,03./1....-+-+,+)*+)*+)*+)**(),*+/-./+*.*)0,+3/.;23<21<1/@2/?82A83X6-;.>4A3C6?3?-;-<.;-9)9+>5IAKEnc|yZfR?E710+2)*1++1++1-,1-,6,-cqMƧg~bOO312,32-74/72.7/,3--/-.,+0/(//)+.-+/0*///2.+70*=3*?6->5.<1-<1/D1+B0.D,*\4,x>0:3?2A3<1>.<.;+w;0v>/C:MB\X~x^bWpS>D:.-+-)*1(-/*0+,10,+^cLlu}w~y`r\?A4671872=:5?:6?74;629527327./50-41,43.540;62@7.G:1G=4C90?61?61D65M34A9.K8*m61==A;=7B1;.<,{>,KFG>tMVLjeGkPOV+I;UL]Wgcl`lQfL_DKR3.E=2cZ9y`sdxf{|YrRURC671;:5B?:GB>HC=LE=MC9L@4H>2D<1A:2<71<8-C;0K?/O?/M=0F:.A:0A?3EH17<%=+:0A8AFA>J5H9U;`?mArFjTrWalLA~uק`w][eJ10.762<<4BB8JH71>;6F?5P?-A>-D65>;4h;5;-:'>*9+;,>-?/;/7+7..+7&6#=1FBADA><.G<@FDMAYBjIxKwVuJknnӻ͗74/52+:70@=4OE9TK+9*9/919/:07-1)/*/)7"5#9/MEE:<)<-A;IJDJK]EdNwUySn\m`iٞC?4<8/84+>93MC7WJ:a\p欶vtbXGDWD@=[OSsfIR<(:(;,9/:372=790D891**1,2&<(:,?:EE<'9+H?IAKGOTWiQoTwXo\kWcunPJ9@2=17.5,:06,4&9%;/475555216*K?DE=6;/@.>-E9MHdmXm[stxftȉbaOXO@TK-<.@2f^ijbollbo[iFZN>YM=WK;WK;SK>YL9ZRPsrЅqsYm7OFA>KDBB997C99);':*6,0402342>/18(9+<2B29(:10371>2C6;,<.=-_XlrnxpwNb~yxaֺھ͟ԭZM5C9:;84+8(:0J@;280:,OHxykxE`mdpXhpczlwνZK8ZK8ZK8\M:^K<_N<_P=aP>cQ_uqZi9PCCAEB<;,=/9:H@G98,6/1/,<(<,D/XS_IZ4>;*E9D@A99(<(=1?:51-.7.@7z{zdvA[VEiPh~pmony°]L8]L8]L8]L8^M=[O?^RFfSOkZd|wsP[AL:;?2>-<57.9%A:=/867E*-)*)/=LT\@=?08->9CCA991:6>:;300022-:,{xwQnAaqM?jPzf{g}c}j}ap[gg_N<_N<_N<_N<`N6\SNqlxqt|ҥ¶|SIGH:;@291YM?36-70?01,94;W\_kRN@?G@93+97>4-5..21-8+tqj{AcCZWQ9mVwbr[w_y_xYd~las]\O>^Q@_RA`SBaTNnjwymqüޢѝxe[RT:;<7G9VI4,>86*0(60ACS[Zd]c2<1?U^Xa<864<3948:636-0+031.9/deWs?bEHCG0bwLpVjOqYtVoOgKNh8G^4UH8]P@bUEdWGpksvcj|˥DzyxthboibbE@B8>/=-FG;360:-=,;;MYSY:7CI7;597330<36467408,1(332.80_gBdCaaK=RG5LZ7gIeFjSjN`G[|E]tHZuB@@6TG>^SAjgrol``qrŽᘗәӘˋn_drWLYStmzxKC8&:*9,9+8-<);1<2D:F<7(*6'?!<#96;:585446-9'7$5+7)B>Qj:a;F8<+BA-_h=g~RcBkKjIfKdIeFcC/4-A<8OJDabwYYfh~ׅֆ̆Ս}xxUS^bGSQagqiK><(9)6+;)@29+:,8+;0:/24/=18696998<6892:)<):$=3G^@akC;><0[J8o~YuEeAhKeDhLiKjItWA?2??5EG/RPC]]Qzwyvxtyqob\n[Ll\Mu^NL@7/4.5(<$9*:':-E>=+;-;1;698:7LMID;8:4667;7=8:=4;):&:*OMHZ]SHG3R^6v\bWdHGT6iDcHiHlPnQrOvZZQBZQB[RC_VGd[Jj_]qeij^`ZWNYSGaYFi^Hp_ORK?0807-7,7+8+:*9(7-D6;8<:4996;-;*@5766:959299<<<2<*8&:,UUVO_VpI`Rd:>D6<>1AM7jHlKnTlJqMuW]Lf]Nf]Nf]Ng^OiaLiaNiaLhaG`[HOL;JK9ORA^THUQ;<@+8)9*9):)<-;"<-807?9:5861>+<(:,;685<4@8=<<19(<(8%?/SGZN]VcmJ6A08?7>>29;.>J4mKqPqOsOz[bJXHi`Qi`Qi`Qi`Qj_]j`WjaRjaRiaL]XEFI8?E7AI4wT>VQA>9*:+;-;-;3;(B7E@B?@0A1@-;+=,;+:/<2?4J4nLqPpLz[hOdMY~Ji`Qi`QkbSkbSlbXldQldQlbVnbThaQWQAHE4MG/BBIH^`G@E>FAGCGIIGACB?>;A2=0<2;3=1};-;,:/9,:);,8*{5)v6,q9,M?UHSPn]MP`;YoA;L*:@49;.A=HBHGB>E=CDCDECC?B=A9:0?381;,:,9-~:/}90|90z:0x:/t8.p6+l3(p:.QJRN[LbiJNd>HW89A,=>04<16V?7PSJIEADFDCE@G=A:>1?.;,:,9-~:/}:1y:1v7.s9.r8-p5-l3*i3)k7,OIZO\UE@G74:,6>/6XSP춬UXIGBC@?B=@:>4=.=,9-|8-}:1{;2s:1m7-l8-j8-l7/g5,a1'd5+~QKSG94?/5;168516/1=/7F307046)Q`?oZUuCWwE\|J\|J>V=8<3=1~:/{8/{;2w81j8/i7.f7-d8-i70i81e6.qE767/58-57,08+08+.9+2=-9B146(TbIWzPNk=Ol>ZwIVsE,6.heVheVheVheVhdXmd[khUɋt緭TFI>H8C6A7;3z;2u9/s9.o6+j81i70h6/h70j92j@2jUBtq^39/17-17-/5+/4./4..3-.3-.:04@2BO;AO6Ic@Hb;YsNF_B&+/heVheVheVheVjdXmd[mlXػxeG=?7m>6i>5cA5_J9L?,DH/XX49?5:?99>88=75:4051,1--10/325G19K39K53D4-4,\hPfkUjhYnfYkg[ieZemXŷֽRK.UO/QP4PN5IO5EN1KQ/agC]`CTT5AU0Kk<:M:EXF;>H=0dC2A2BB=;?,@+>-=-B5F;:5232./1.5//uKLkjSNdci_\VX-.0.-+,*+,*+,*+.,-0,+2.-<20A4.H94w9.A5C7>,=,;,A8TKsGK<0/+/.,0/-PMF~wwWV:45/:728302012,.10,32.?5,B8/>3/F21K4,;4?6>0<-C8M@xcmfFJ<1,)1+-NO?yhvkg@>29:4C@;GBA?1?4@3:::8G?bM?H>QKcLlJanE?mwuX[F43/==3OI9kllgIDJ>;6H@3C?26:7:9?@DKHEC?86:5/00XQ\tIKr[x`z`oYi^[N>aTDlhqvǭukWVB:B5=86-CAV^8>GM74:4664*21MLFhcG;bzJjOkN\yCPj;A>5^Z[ccԏыn\Ra^`Y:(9*;,:0@704)<0996539&9)GX;NEG1w\iHiJfHhJ780JKComʀ|sgkm^KLA8/8):+?3:,93@6?0<.:,<0:,9+v8+NAXPTb>CK4;B0nMqTdKTyFjaRjaRkbSlcTumbjZJnC?5<0:,~:/y9/u9.p6+l6*SL`XE?M4:A/6<0gJdMaJIj=gdSgdSlcTneVؿ[ZHカWOB>?9<0}9.z:1m9.h8,i70g80RD;4:.28.2?.39-ZtMSp@[xH1B2heVheVkeYy{pԵqD:?9u<5o:2l71f:1eE6gbN28.06,.3--2,/90;G3EZ;NbG%*-heVifWlfZtqƻt{UHeD5]F6TN8JN3VXB8>47=36;5271-2.1628G2=K:+2+akSliZjfZwzxTO2LN6OV5r~VRP9KH79A4:B72F@2GA3IA4JB5KC6KC6LC4NE6MD5MD5MD3LC2NB2OC3OC3PD4QE5QE5T>1U?2\?1_B4oA4sE8E6H9F8H:C5I;E8G:E9F:F>G?H@H@G@G@CNCNCLDMDKDKCFCF?C>B@=?A@>=>:=9@.@.@.@.?-?-?-?-?-?-@-?,A.@-A-@,A+@*A+A+A*A*?/?/?/?/>,>,>,=+<+<+<+>-?+>*=*=*=*>+>+?,@,@,?8?8>4>4>0A3A2D5C2D3C4>/@2@2F9E8J=D7jE5`;+J7(E2#:65:659548438437326215105//5//50-72/72/72/72/61.61-61-50,50,50,50,.0-.0-.0-.0-//-//-0/-0/-2.-2.-3--2,,4+,3*+3)*3)*4(*6*,=.1B36H92E?1GA3IA4JB5JB5JB5KB3MD5MD5LC4LC2LC2NB2NB2OC3OC3PD4PD4S=0T>1\?1_B4n@3rD7C4G8D6F8A3E7B5C6A5C7C;DF?F?ALALBKBKDKDKDGCF@D?C=B@=?A@>=>:<8@.@.@.@.?-?-?->,?-?-@-?,A.@-A-@,A+@*A+A+A*A*?/?/?/?/>,>,>,=+<+<+<+>-?+>*=*=*=*=*>+?,?+@,?8?8>4>4>0A3A2D5C2D3C4?0A3A3G:E8J=C6iD4_:*J7(E2#:65:65:659548437326215106005//50-72/72/72/72/61.61-61-50,50,50,50,.0-.0-.0-.0-//-//-0/-0/-2.-2.-3--3--5,-4+,4*+3)*4(*6*,<-0B36G8;J;>m0@2@2B4A6C8E:G;@:??@?@B@?=@:>8A.A.@-@-@-@-?,?,?-?-A-@,@-@-A,@+B-A,A+@*A*@)?/?/?/>.>.>.>,=+=+=+<+=,=,=,>*>*>*>*>+?,?,?,A7@6>4?5=1@4B1E4C4D5B5@3C7C7I=F:J>C7eD5\;,F9)B5%<66<66;55;55:4493382271172/61.61.72/62/62/62/51.52-52-41,41,41,41,,1-,1-.0-.0-.0-.0-//-//-0/-0/-3--4..6-.5,-5+,4*+5)+6*,9-/>24E69H9>E>E@EBGBFCGCFDGADAD>D;@;@@A?@B@>,>,@,?+@-@-A,@+A,@+@*@*@)@)?/?/>.>.>.>.=+=+=+=+<+=,=,<+=)=)=)>*=*>+?,?,A7@6?5?5>2A5C2E4C4D5B5C6F:E9K?G;J>B6dC4[:+G:*C6&=77=77<66<66;55:4493382283072/72/72/62/62/62/51.52-52-41,41,41,41,,1-,1-.0-.0-.0-.0-//-//-0/-0/-3--5//7./6-.6,-5+,5)+6*,8,.<02B36E69_62e<8u@<{FBEBJGOQXZbqgvpu}yvnw_hYUMI{OBnM@lLA_ODbPGbQHcNI]MH\OMXZXcjko|}~ssughiY^_OYWHUSDZTbZTbZTbZTbZTb.-+/.,/.,/.,0/-10.10.21/40-51.51.51.61-61-61-61-81+81+81+81+81+81+61.50-50-50-4/,4/,4/,50-50-50-61.61.61.61.61.61.61.61.61.61.61.61.3.+3.+3.+3.+3.+2-*2-*2-*2-*1,)1,)4/,4/,4/,4/,4/,4/,4/,4/,4/,4/,4/,2/*2/*30+30+30+41,41,52-52-52-52-52-52-63.63.74/74/850850961961961>7-?8.@:.A;/B<0C=1E=2F>3F>1F>1G=1G=1G=1G=1G>/G>/I=/J>0K?1L@2L@0MA1JD4KE5PE3QF4]C2`F5mD2oF4|A/~C1>,<*9';):*=-?1B4E8H;J=K>@CADBDCEDEEFCCDD@C@C<>B@A?E=A9B6?3A-A-@,@,?-?->,>,?,?,@.?-?,?,@-?,A,@+@*?)A)@(?.?.>.>.>.=-=-=-=+<*<*=+=+=+=+=+=+=+>,?-?-?-B6A5>3?4>1A4@4C7B5B5A7D:H?G>MDH?LA|C8^D7V64>64=53:5294183083073062/62/62/43/32.32-32-21,21,21,21,-2.-2.-2.-2./1./1./1./1.00.00.10.32051040/4..3--4+,4+,6,-:01=34?56W6-\;2j>3pD9}D9H=LHTP]idpmr{y~|uq{hpZbURKHM@uL?tN@dPBfQFhQFhNE`KB]HEVPM^\\djjrrvwy}~{z~}~zzvuykkoabdWZ\OUVHSTF\U\\U\\U\\U\\U\.-+.-+.-+/.,/.,0/-10.10.40-40-40-40-50,50,50,50,70*70*70*70*70*70*50-50-4/,4/,3.+3.+3.+4/,4/,50-50-50-50-50-50-50-50-50-50-50-50-50-3.+3.+3.+3.+2-*2-*2-*1,)1,)1,)1,)4/,4/,4/,4/,4/,4/,4/,4/,4/,4/,4/,30+30+30+41,41,41,52-52-52-52-52-52-52-52-63.63.74/850850961961961=6,>7->8,@:.A;/B<0D<1D<1D0J>0K?/L@0KE5LF6QF4RG5]C2_E4lC1mD2z?-{@.<*:(7%8&8(;+=/A3D7H;J=L?@CADACCECDDEBBBB>A>A:?:?:?:?<><>B@@>D<@8@4=1@,@,@,@,>,>,>,=+>+>+?->,?,>+@-?,@+?*?)?)@(@(?.?.>.>.=-=-=-<,<*<*<*=+=+<*<*<*<*=+=+>,?-?-B6B6?4@5?2B5A5D8B5B5A7C9G>G>MDH?J?zA6[A4T:-A9,>6)@86@86@86?75>64=53:52:5294183073062/62/62/43/32.32-32-21,21,21,21,-2.-2.-2.-2./1./1./1./1.00.00.10.3205105105//4..4+,4+,6,-8./:01<23U4+Y8/f:/k?4x?4{B7EALHVb_kinxv|zs}nxemYaVSMJOBwM@uOAePBfODfODfLC^I@[FCTIFWPPXXX`\`akopmrlotnoukmsiim_bfX\^QXZMWXJVWI]V]]V]]V]]V]]V],,,,,,.-+.-+/.,/.,0/-10.3/,3/,40-3/,3/,3/,4/+4/+4/+4/+4/+4/+6/)6/)4/,4/,3.+3.+2-*2-*2-*3.+3.+4/,4/,4/,4/,4/,4/,4/,4/,4/,4/,4/,4/,4/,3.+3.+2-*2-*2-*2-*1,)1,)1,)1,)1,)4/,4/,4/,4/,4/,4/,4/,4/,4/,4/,4/,41,41,41,41,41,41,52-52-52-52-52-52-52-52-63.63.74/74/850850961961<5+<5+=6,>7-?8.@9/B90B90B:/B:/C9/D:0D:.D:.D:.D:.G;-H<.I=/J>0K?1K?1FI8GJ9MH5NI6VG4WH5dE3eF4qB0qB0|?,{>+;(<):)>-@.E3G7K;N>O?EBEBEAFBEAFBA@A@====9;;=9<9<=>=>C?A=F:A5B2?/@,@,@,@,@,?+>->-?->,>.>.?-?-@,?+?,?,?+>*?*>)?.?.>->->->-=,=,=,=,=,=,=,=,<+<+=,=,>->-?.?.B4B4?0A2?3B6@6C9A8A8A;@:G@G@NEI@zKApA7RA7J9/8:-68+A75A75A75@64>63=52<41<4194083/73062/43/43/34/23.23.23.02-02-02-02-,2.,2.,2.,2.-2.-2./1./1./1./1.00.22032032051040/3--2,,2,,4..600711M5)P8,Z:-^>1i?1kA3pC=vICxT^`j}jovvzzr{mvelZaWTOLNDKA~QBmPAlO@iN?hJ@bI?aFBYGCZHGUIHVGLPW\`X^\[a_\c[[bZY_UU[QSYMRXLUXMVYN`XV`XV`XV`XV`XV,,,,,,-,*.-+.-+/.,/.,0/-2.+3/,3/,2.+2.+2.+3.*3.*3.*3.*3.*3.*5.(5.(3.+3.+2-*2-*2-*1,)2-*2-*2-*3.+3.+3.+3.+3.+3.+3.+3.+3.+3.+3.+3.+3.+2-*2-*2-*2-*2-*1,)1,)1,)1,)0+(0+(4/,4/,4/,4/,4/,4/,4/,4/,4/,4/,4/,41,41,41,41,41,41,41,41,41,41,41,41,52-52-52-63.63.74/850850850961;4*;4*<5+=6,>7-?8.A8/A8/A9.A9.B8.C9/C9-C9-C9-D:.F:,G;-H<.J>0J>0K?1FI8FI8MH5MH5UF3VG4bC1cD2o@.o@.z=*z=*:';(9(<+>,C1E5I9L@-=,>,>,>.=-?->,@,?+?,>+>*=)>)>)>->->->->-=,=,=,=,<+<+=,<+<+<+<+<+<+=,>->-?.B4B4@1B3?3C7A7D:A8A8A;>8F?G@OFKB{LBqB8RA7J9/8:-68+A75A75@64@64>63=52<41;3094083/73062/43/43/34/23.23.23.02-02-02-02--3/-3/-3/-3/.3/.3/02/02/02/02/11/11/21/32051040/4..2,,2,,3--4..5//K3'L4(U5(Y9,d:,f<.k>8qD>uQ[`jmszz}}t}oxho_f]ZTQQGKA~QBmO@kM>gK`I?aGCZFBYCBPA@N7/?6-?6-?6-?6-@6,C9/C9/C9/C9/C9/F:.G;/H<0J>2K?3K?3EH7EH7IF5JG6QE5RF6[D4[D4fA/gB0q>-r?.};+};+:*<,=-A1C3G7I:KG>F=H?E>G@C>C>?=?=:;:;9:9:=<=*@-@-@-@-@-?,?,?,>.=-?-?-?.?.?->,>,>,?+>*?*>)>->->->-=,=,=,=,<-<-<-<-=-=-<,<,=-=-=0=0>1>1C2C2@1B3?4C8A:CB=KENHXPTLwWLlLAOI=GA56@54>3A83A83@72?61>71=60:5194083/83/63.63.43.43.34.23-13.13..3-.3-.3-.3--3/-3/-3/-3/.3/.3/.3/.3/02/02/02//1.11/22032032010.0/-1-,2.-3/.3/.C2+C2+I3(M7,U9-X<0]>9eFAlU_~gq~r|ys{msfldbYWQJIBO?lN>kI`F?aEC[EC[@BQ=?N7>D8?E;DC?HGBKFDMHDNEEOFHPEKSHOWLQYNaYNaYNaYNaYNaYN+++++++++,,,,,,---/.,/.,0/-0/-2.+1-*1-*1-*1-*1-*2-)2-)2-)2-)2-)2-)2-*2-*1,)1,)0+(0+(0+(1,)1,)2-*2-*0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(0+(2-*2-*2-*2-*1,)1,)1,)0+(0+(0+(0+(2-*2-*2-*2-*2-*2-*2-*2-*2-*2-*2-*30+30+30+30+30+30+30+30+30+30+30+41,41,41,52-52-63.74/74/850850850:3+:3+;4,<5-<5-=6.>5,?6->5,>5,?5+B8.B8.B8.C9/C9/F:.G;/H<0J>2K?3K?3CF5CF5GD3HE4OC3PD4YB2YB2d?-e@.o<+q>-{9){9)7'9):*=-?/C3E6G8D;ED?@>A?<=9:9:89=<<;C+=-=-?->,?.>-?->,>,=+>*>*>)>)>->->->-=,=,=,<+<-<-<-<-=-<,<,<,<,=-1>1C2D3A2C4@5D9B;D=B=A`DBZDBZACR?AP;BH?FLBKJFONJSNLUPLVMLVMOWLPXMS[PU]RaYNaYNaYNaYNaYN+++++++++,,,,,,---......0/-0/-0/-/.,1-*1-*1-*1-*1-*1-*2-)2-)2-)2-)1-,0,+0,+/+*/+*/+*/+*/+*0,+0,+1-,/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*1-,1-,1-,1-,0,+0,+0,+/+*/+*/+*/+*1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,3/,3/,3/,3/,3/,3/,3/,3/,3/,2.+2.+40-40-40-51.51.62/73073084184184192,:3-:3-;4.<5/=60>5.>5.>5.>5.?5,B8/B8/B8/C90C90F90G:1I<3J=4K>5K>5EA5FB6IA6JB7OA4PB5X@4X@4b>2c?3k;-m=/u:,u:,7)8*8*;-=/A3B5D7F:G;F;I>G>JAG?IADAEBA@<;;;;;@;@;F/>/@/?.?/>.@.?-@,?+>,>,>+>+>->->->-=.=.>.=-=-=-=/=/=/<.1>1?2D2E3B2D4@5D9BD@C?HCOJ\S`Wkah^zh\o]QUXMMPEAND>KA?80?80>7/>7/=6.<5-94.83-63,63,43.43.34.34.25.14-13.13..3-.3-.3-.3--3/-3/.3/.3/.3/.3/.3/.3/02/02/02/.0-/1.02/22022011///-//-//-0/-10.8,08,0<-*@1.H5.M:3Q?;[IEhZg}o|~ʋʂ|v{pukm]_PODCH=eGDP?EQ=HJGRTJVRO[WS`WUbYUbXS`VS_ST`TUaUVbVbZGbZGbZGbZGbZG------------------------.-+.-+.-+/.,1-*1-*1-*0,)0,)0,)1,(0+'0+'0+'/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+0,+/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+1-,1-,1-,1-,2.-1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,0,)0,)1-*2.+2.+3/,3/,3/,3/,3/,3/,3/,3/,3/,3/,3/,3/,40-51.62/73073081+81+92,:3-;4.<5/=4->5.>5.>5.?5,?5,?5,@6-@6-@6-C6-D7.F90G:1H;2I<3D@4EA5H@5IA6N@3N@3U=1U=1^:.^:.e5'j:,s8*t9+7):,9+<.<.>0?2?2?3@4@5C8C:F=DB?C@?>>=>>??D?B=E;@6C1?-C+B*A.A.@-?,>,=+=+=+<-=.?.<+<,<,=+=+>*=)=+<*=*=*<+<+<+<+;,;,<,<,;+;+;-=/=/<.1?2@3A4A4D2E3C3G7F;I>C=BEALGTOaXf]qgoesgmahk`^aVKXNDQGRKCNG?IB:D=5?80<5-94.83-63,52+32-54/34.34.14-14-02-02--2,-2,,1+,1+,2.,2.-2.-2.-2.-2.-2.-2./1./1./1.02/02/02/11/11/11/11/11/11/21/21/6*.9-1@1.B30F3,H5.O=9_MIpboxЕԎ↌{qvkmbd]\XWRGoMBjE=bA9^>;X?ATBEXGMYOUaS^`alniuqs{vzswn{qjwmhthbnbYeYS_Sc[Hc[Hc[Hd\Id\I,-/,-/,-/,-/,-/,-/------------.-+/.,/.,/.,0,)0,)0,)0,)/+(/+(/+(/+(/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*0,+0,+0,+1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,0,)0,)1-*2.+2.+3/,3/,3/,3/,3/,2.+3/,2.+2.+2.+2.+3/,40-51.62/62/73080-80-91.:2/;4.<5/=4/>50>50>50?4.?4.?4.?4.@6-@6-C6.D7/E80G:2H;3H;3H>5H>5K>6L?7O>6P?7U<5U<5Z90Z90b6-f:1p7.q8/{7,~:/8-;0;/=1>1>1A4B5C5E7E9HF>G?D?D?D@EAHBF@H;C6F3B/C.B-B0A/A/@.?-?->->->.?/?/<,=.=.>->->,=+>-=,=,=,=+=+=+=+<,<,<,;+;-;-;.2?3@6A7B8B8G6G6D6H:H?KBGBE@GCJFTL]Uk_pd|mzk|myvggrd\gYM]RFVKPLAMI>HF:CA5?=1<:.:7.85,55-33+22*44,34.23-23-12,02-/1,/1,.0+.0-.0-/1./1./1./1./1./1./1./1./1./1./1.02/11/11/11/11/11/11/11/11/11/11/4)77,:;06=28>42B86JB?ZROmgq|̕ώۇ|s{mufn`i\eUUqQQmKMdHJaFK^HM`IS]OYcUcd_mnevpk|vryz|x~svorm{nftg\j[UcT`ZBa[Ca[Cb\Dc]E,-/,-/,-/,-/,-/,-/------------.-+.-+.-+.-+0,)0,)/+(/+(/+(/+(.*'.*'.*).*).*).*).*).*).*).*).*).*).*)/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*/+*.*)/+*/+*/+*/+*0,+0,+0,+0,+1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,0,)0,)1-*1-*2.+2.+3/,3/,2.+2.+2.+2.+2.+1-*1-*2.+2.+3/,40-51.51.62/80-80-91.:2/;4.<5/=4/>50>50=4/>3-?4.?4.?4.?5,@6-C6.D7/E80F91G:2G:2G=4G=4J=5K>6N=5O>6T;4T;4Z90Y8/a5,e90n5,p7.z6+|8-7,:/:.<0=0=0@3@3@2B4A5D8C7F:B:DC?D@GAE?H;C6E2A.C.B-A/A/@.@.?-?-=,=,>.>.>.<,=.<->-=,>,=+=,=,=,<+=+=+<*<*<,<,;+;+;-;-;.;.<.<.=1=1>2?3@6A7B8B8I8I8E7H:H?KBGBGBIENJXPbZqevjtrt}nnykcn`TdYL\QQMBOK@JH;2;8/55-22*00(33+12,12,01+01+/1,.0+.0+.0+.0-.0-/1./1./1./1./1./1./1./1./1./1./1.02/11/11/11/11/11/11/11/11/11/11/5*87,:9.4;06=31C97MEB^VSqku~̔΍ڇ~xu}rzoxlukkggacz^`w\at^cv_isdnxkyzu{~~z}wxn|oao`XfW^X@_YA`ZBa[Cc]E,-/,-/,-/,-/,-/,-/,-/,-/------------.-+.-+-,*-,*-,*-,*.*'.*'.*'.*',*+,*+,*+,*+,*+,*++)*+)*+)*+)*+)*-+,-+,-+,-+,-+,-+,-+,-+,-+,-+,-+,,*+,*+-+,-+,-+,-+,-+,.,-.,-.,-.,-.,-.,-.,-.,-.,-/-./-./-./-./-./-.0,+0,+0,+1-,2.-2.-2.-2.-2.-1-,1-,1-,1-,1-,1-,1-,1-,2.-3/.40/51051080.91/91/:20;30<41=31=31=31=31>3/?40?40?40?4.?4.B5/C60D71E82F93F93I:5I:5J;6K<7M;7N<8R:6R:6V95U84\50_83h6/i70t5,w8/7/91:/<1<1<1@5A6@4A5B3D5C6F9D:G=DD8E5A1C/B.C/B.A/@.?-?->->->/>/?0<-=-=-=.=.>->-=,=,=-=-<*<*<,<,;+;+<-<-:-:-;-<.<0<0=2>3>5@7A8B9C;DHBKEJGKHSKXPfYqdnt}{|}vspiwf]k^VdWOQCNPBKM?GI;DF8AC5>@3:7*>7-68.7850@=8KKA^^TosrĈ}|}{{|urnnm}ot}||ppbsaWhVZV9\X;]Y<_[>a]@-.0-.0-.0-.0-.0-.0-.0-.0.........---.-+-,*-,*-,*-,*,+).*'.*'.*'.*',*+,*++)*+)*+)*+)*+)*+)*+)**()*(),*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+-+,-+,-+,-+,-+,-+,.,-.,-.,-.,-.,-.,-.,-/-./-./-./-./+*0,+0,+1-,1-,1-,1-,1-,1-,0,+0,+0,+0,+0,+0,+0,+0,+1-,2.-3/.40/40/91/91/:20;31;30<41=31=31=31=31>3/>3/>3/>3/>3->3-A4.B5/C60D71E82E82H94H94I:5I:5L:6L:6Q95P84T73T73[4/^72g5.h6/s4+v7.6.919.<1;0<1@5?4>2?3>/@1@3C6A7C9A9E=E>G@I@G>H,>,=,=,=.>/>/<-=-<,=.<->-=,<+<+=-<,<*<*;+;+;+;+;,;,:-:-;-;-;/;/=2=2>5@7A8C:DGAKEJGLIVN]Uk^wjtz|zwp~mdre]k^TVHRTFOQCKM?GI;CE7?A4;=079.35*01)01)/0*/0*./)-.(-.)-.)..,..,//-//-//-//-//-//-//-//-//-//-//-//-//-00.00.00.00.00.00.00.00.00.00.00.8+?7*>5+46,574/A>9NNDaaWrvu‡}|~rrar`TeSYU8ZV9\X;^Z=`\?+/2+/2+/2+/2-.0-.0-.0-.0-.0-.0...----------,*-,*-,*,+),+),+).*'.*',*+,*+,*++)*+)*+)**()*()*()*()*(),*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+,*+-+,-+,-+,-+,.,-.,-.,-/-./-./-./-./+*/+*0,+0,+1-,1-,1-,0,+0,+/+*/+*/+*/+*/+*/+*/+*0,+1-,2.-2.-3/.40/91/91/:20;31;31<42=32=32=31<20=20>31>3/>3/=2.>3/@2/A30B5/C60D71D71E74E74F85G96G96H:7I:7I:7M85L74R51V95_60`71m6/o81{8/~;2;/=1=2>3@6@6?5?5@2A3B3E6D7F9D:H>G?H@JAH?H=C8D6@2A0@/B.B.@-?,?,>+=-=-=->.>0<.<.<.=/=/=.<-=-<,<,<,;+;+;+;+:*:*;,:+:,:,:.:.<1<1=4>5@7B9C:EJ@JDMGPLSO_Wg_werz|{rqmxhep`W`MT]JPWEKR@EL4?1@2@1C4A4D7A7C9B:D+>+=*<,<,<,=-=/<.;-;-=/<.<-<-<,<,;+;+:*:*:*:*:*9):+:+:,9+9-:.<1<1=4>5A8C:E>2KS<_gPp|hxĹ}znk\nXOaKTS5TS5VU7WV8YX:,03,03,03,03,03,03./1./1./1./1///........./.,.-+.-+.-+-,*-,*-,*-,*-+,-+,-+,-+,,*+,*++)**()*()*()*()+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*,*+,*++)*+)*+)*+)*+)**()*()*()*(),*+,*+,*+,*+-+,-+,.,-.,-/-./-./-./+*/+*/+*0,+0,+0,+/+*/+*.*).*)-)(0,+0,+/+*/+*0,+0,+1-,2.-3/.3/.40/:12:12;23;23<42<42=32=32<21<21<1/=20=20<1/<1-<1->0-?1.@2/@2/A30A30>71?82?82@93?:6?:6A96A96C84C84H5/K82T6.V80b6-e90r8-v<1;.>1?0@1>7>7?5?5A4B5C2E4D4E5D4E5D7F9F2?3>2@.@.?->,=,<+<+<+<.<.<.;-0:<135*33+11)1.)/,'/*'/*'2)*3*+4+,4+,1++1++1++1++1++1++1++1++1++1++1++2,,1-,1-,1-,1-,1-,1-,1-,1-,1-,1-,;)99'74*)4*)35=?)HT.[gAl|U}fxž͟ѣɬɬʫˬ˩ţ~~yxsjeYmRL`EQQ5QQ5RR6RR6SS7,03,03,03,03,03,03./1./1./1./1////////////0/-/.,/.,/.,.-+.-+.-+.-+.,-.,-.,--+,-+,,*+,*++)*+)**()*()+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*,*++)*+)*+)*+)**()*()*()*())'()'(+)*+)*,*+,*+-+,-+,.,-.,-/-./-./-./+*/+*/+*/+*/+*/+*/+*.*)-)(-)(,('0,+0,+0,+0,+0,+0,+1-,2.-3/.40/40/:12;23;23;23<42<42=32<21<21;10<1/<1/<1/<1/<1-<1->0->0-?1.?1.@2/@2/=60=60>71?82=84>95@85@85B73A62G4.H5/Q3+S5-_3*b6-p6+s9.}9,4@3A4B1C2A1B2@0@0?2A4B8B8B9?6?3=1>2>2?-?-?->,<+<+<+<+;-;-;-;-;.;.<.;-;,;,;-;-;,;,9)9)9)9):+9*9*9*:+~9*}9.<1<3=4?6A8CIAKCKFLGJAI@GAJDOKUQ\Xb^sf|ox~~|y|sw~niw`es\^lUWeNP\HJVBFO>BK:>D6;A3<>357,55-22*2/*0-(/*'/*'1()2)*3*+4+,0**0**0**0**0**0**0**0**0**0**0**1++0,+0,+0,+0,+0,+0,+0,+0,+0,+0,+:(89'74*)4*)24;='EQ+Xd>iyRzcvßΠѣѴѴѲбͫţ{{vtof}aWkPJ^CNN2NN2NN2MM1MM1,03,03,03,03,03,03./1./1./1./1///000000000//////0/-/.,/.,/.,/.,/.,/-./-./-..,--+,-+,,*++)*+)*+)**()+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)**()*()*())'()'()'()'(+)*+)*+)*,*+,*+-+,.,-.,-/-./-./-./+*/+*/+*/+*/+*/+*.*).*)-)(,(',('1-,0,+0,+0,+1-,1-,2.-3/.40/40/510:12;23;23<34<34<34=32<21<21;10<00<00<1/<1/;0.;0.=/,>0->0-?1.?1.@2/96/:70872983:94:94:94:94<94<94@5/?4.I2*K4,X3*[6-g6(j9+w9*y;,<,=-9595<4=5A4A4B2B2A0B1?/?/=0@3@7A8B7@5@5>3>4=3@-@->,=+=+<*;,;,;,<-<-;,<.<.;-;-;.:-;-:,;,;,9)9)9)9)9*9*9+8*~8,~8,}9.=2~>4?5@7B9E=G?IDKFNHOIICICGDLIQPYXc^id{mv~~{~yt|okzchw`bqZ\kTVcOO\HJUDDO>BH:=C5=?479.66.44,4/+1,(1)'1)'2()3)*4*+4*+2)*2)*2)*2)*2)*2)*2)*2)*0**0**0**1++1++1++1++1++0,+0,+0,+0,+0,+0,+;'3;'34+&5,'25:= BO!Ta3fxFwWir~}ÉψҋЩЩϦΥ˟×z|tvnphbzZSgKG[?JM0IL/HK.GJ-EH+,03,03,03,03,03,03./1./1./1./1///0000000000000000/-0/-0/-/.,/.,/.,0./0.//-./-..,--+,,*+,*++)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)*+)**()*())'()'()'()'((&'*()+)*+)*,*+,*+-+,.,-.,-/-./-./-./+*/+*/+*/+*/+*/+*.*)-)(-)(,(',('1-,1-,1-,1-,1-,1-,2.-3/.40/510510;23;23;23<34<34<34=32<21<21;10<00<00<1/<1/;0.;0.=/,=/,>0->0-?1.?1.96/96/872983983:94:94:94;83;83@5/=2,G0(I2*V1(Y4+e4&i8*u7(x:+}:*~;+8484;3<4@3A4A1A1@/@/=-=-;.>1?6@7A6?4?4=2>4=3@-?,>,=+<*<*;,;,;,;,<-;,<.<.;-;-;.:-;-:,;,;,9)9)9)8(9*9*9+8*~8,~8,}9.=2~>4?5@7B9E=H@IDLGNHOIICICHEMJSR[Ze`lg}oy~~{zu~qm|ejybet]_nWZgSTaMNYHHSBDJ<>D6>@58:/77/55-50,2-)2*(1)'2()3)*4*+4*+2)*2)*2)*2)*2)*2)*2)*2)*0**0**0**1++1++1++1++1++0,+0,+0,+0,+0,+0,+:&2:&25,'5,'259<@MR_1dvDvVho{{}˄·ǠǠǞƝĘ~yzrskld_wWQeIEY=IL/HK.FI,DG*BE(/0*/0*/0*/0*01+01+01+01+21,21,21,32-63.63.63.63.63.52-50,4/+4/+3.*8.,8.,6.+6.+5-+5-+2-*2-*1++1++0,-0,-.,/.,/--/--/-,1,+0*+/)*.()-()-/(//(//(//(//(//(//)-/)-.)-.)-.*+/+,-,*-,*-,(.-).-).-)-.(./)./)./)--/--/------/-./-./.,0/-2.+2.+3.+2-*4,)4,)6-(7.)8/(90):/);0*<2)<2)<5+<5+=4+>5,>5.>5.=4-=4-<3,<3,<1-=2.=2.<1-<1/;0.;0.;0.>0/>0/?11?11F-&F-&=3)=3)2:+2:++=-*<,.:..:.;2-90+H()H()R&'T()W+([/,Y9.^>3[D4]F6wC-xD.A/C1@2A3=1<0:/9.8-:/>.?/C1D2E1D0B.@,>+=*6363:392>2=1@0@0|A/|A/~A/D2B2A1>1=0;/;/:.9-:-:-u9.{?4{A5v<0n9)q<,tA0tA0t<-v>/A2z<-<1@5E:H=K@LAOBOBRCRCHKKN\Ub[tcyhumzrwy|~wr}fycvfeba_\XzUZsSXqQ]kRWeLWXHNO?OF=F=4G85B30?,.;(*9&,8%+8$-8$-7#.7#.$.-#-,&,,&,,()+()+,'+-(,0&.1'/3&/4'04'14'14'14'13'13'10(30(30(30(3-(,/*.0,+0,+//%44*AD1VYFjpTzdfupqrtsrsx}zx{{}~{wvsolj{h_p]TbQKYHLPAGKB3?C4/0*/0*/0*01+01+01+01+12,21,21,21,43.63.63.63.63.63.63.61-50,4/+4/+8.,8.,7/,6.+6.,5-+2-*2-*1++1++0,-0,-.,//-0..0--/-,1,+0*+/)*.)*.()-/(//(//(//(//(//(//)-/)-.)-.)-.*+/+,-,*-,*.-).-).-).-)./)./)./)./)--/--/---.../-./-./.,/.,2.+2.+3.+2-*4,)5-*6-(7.)8/(90);0*<1+<2)<2)<5+<5+>5,>5,>5.>5.>5.=4-<3,<3,=2.=2.<1-<1-<1/;0.;0.;0.>0/>0/>00?11F-&G.'=3)=3)2:+2:++=-*<,.:.-9-;2-90+H()H()R&'S'(V*'Z.+X8-\<1ZC3\E5uA+vB,@.B0@2A3=1=1;0:/9.8-<,=-@.A/B.B.B.A-?,?,6363:392>2=1@0@0|A/|A/~A/C1A1A1=02t:.n9)p;+s@/r?.r:+s;,z<-{=.=2A6E:H=K@LAOBOBRCRCGJKN\Ud]ve|kxp}uy{xs~gzdwhgcba^[}X]vV[tT`nU[iP[\LSTDSJAJA8J;8E63B/1=*,:'-9&,8$-8$-7#.7#.$.-$.-&,,&,,)*,)*,-(,-(,1'/1'/4'04'04'14'14'14'13'13'10(30(30(30(30+/1,01-,0,+--#22(?B/TWDioSzdfrmnoqpopu|{ywzz~|~~{wvsolj{h^o\TbQKYHJN?EI:?C4<@1=A201+01+01+01+01+12,12,12,32-32-32-43.63.74/74/74/74/63.72.61-50,50,7/,7/,7/,7/,6.,5-+3.+2-*2,,1++0,-1-./-./-./-0/-0--/--/,+0+*/)*.()-1'/1'//(//(//)-/)-/)-/)-.*+.*+.*+0,-.-+.-+.-).-)/.*/.*./)./)/0*/0*............/-./-./.,/.,1-*1-*2-)3.*5.(6/)7.)8/*90):1*<2)=3*=3*=3*>5,>5,>5,?6-?6/?6/>5.>5.=4-<3,=2.=2.<1-<1-;0.;0.;0.;0.;0.<1/>0/?10C0)C0)E0+E0+G/-G/-G-.G-.E,/E,/A-,A-,@-)@-)D,(E-)N-&R1*]2,a60h70j92n=,p?.x>0z@2=4?6=5=5;4;4;3910?1@1A2B3C4A4A4<2<2=1=1>0>0?/?/>.>.=.>/=/=/;.;.;-:,<,;+~=+~=+x8.z:0w;0t8-q9*t<-u@0t?/t:,s9+w9,|>1>3B7E4+>4+?5,?6-?6-@7.@7.@70@70?6/>5.>5.=4->3/=2.<1-<1-;0.;0.;0.;0.;0.<1/>0/?10D1*D1*E0+E0+G/-G/-G-.G-.E,/D+.A-,A-,A.*A.*D,(E-)N-&P/([0*^3-d3,f5.j9(k:)t:,v<.:1<3:2;3929291:2=0=0>0?1?0@1A2B3A4B5<2;1=1=1>0>0?/>.>.>.<-=.<.;-:-:-:,:,;+;+}<*}<*}=3|<2w;0v:/t<-v>/vA1vA1w=/v<.y;.~@3@5C8F=H?J@J@LAMBPCQDDJIOXV`^tezkot|{}|zak^hZeVaYaX`[`W\WuYPnRQgRF\GDUE>O?9E;2>4.80*4,*0,(.*&,*&,*.(*.(*0'*0'*0'*0'*1(-1(-2).3*/1*10)0/*0/*0,+0,+0+,1+,1(-1(-1(-1(-14.24.22.-.*)**"..&;>-PSBdmRvd}gk}giimnm}loty|{ywvtuuwwzy}~{}{wutqnki{e^pZTcPKZGFH;AC6;=08:-9;.23-23-23-23-34.34.34.34.54/54/54/650850961961961961961:5194094083/91.91.91.80-80-7/,50-4/,4/,3.+2.-2.-3/03/01/00./0.1/-0--/,,.,,.++-2).2).2).2).0*.0*.0*,0*,0*,0*,/+*1-,1-*1-*0/+0/+0/*0/*10+10+10+10+00000000000010.0/-2.-2.-2.+2.+3.*61-81+92,:1*;2+=3*>4+?5,@6-@6-@6-A8/A8/A8/A8/A8/A8/@70?6/>5.>5.>3/=2.=2.<1-<1-;0,;0.;0.<1/<1/=20=20?4.?4.K/.K/.Z'0Z'0`"1_!0W#/V".G*.H+/83-83-55)55)B1'D3)Y.([0*k++l,,d:.e;/o:2q<4|;7~=9;8<9:998;6>9@9@9B8B8C9C9B9C:B:B:B/B/B/A.@.?-=-<,;,:+9+9+9+8*:*:*<)<)x>(x>(t@(t@(>4:0z8,{9-z0z@4z@4z>3~B7B8E;G>I@I@JAKAMCNFOGQIUM_Uf\tayfinyu~zy}~~{ynmkjjifeefdedfac_~_YxYYsXMgLL_KEXD?M<7E44-PSBbjRs{cxf}kyh{j{jn~p}oykzl}ptutrq}q}q}s~t~v~v~y|w~{|y{wuqrnlhh|c]qXRdLI[CHF:CA5=;/:8,;9-34.34.34.34.45/45/45/560650650650761961:72:72;83;83;83;62;62:51:51;30;30:2/:2/91.91.61.61.50-50-40/40/4014012012012031/2//1..0--/--/3*/3*/3*/3*/1+/1+/1+-1+-1+-1+-0,+2.-2.+2.+0/+10,10+10+21,21,21,21,11111111111121/21/40/3/.3/,3/,4/+83/:3-;4.<3,=4-?5,@6-A7.A7.B8/B8/B90B90B90C:1B90B90A81@70?6/>5.?40>3/=2.=2.<1-<1-<1/<1/<1/=20=20>31@5/@5/L0/L0/[(1[(1a#2`"1X$0X$0H+/J-194.94.66*66*C2(D3)X-'Y.(i))j**e;/g=1p;3s>6}<8>:<9=::9:9<7=8?8@9B8C9C9C9B9B9@8@8B/B/B/A.@.?-<,<,:+:+9+8*8*8*9)9)<);(x>(x>(t@(t@(<2{5+v4(z8,{=0x:-r7)t9+y?3|B6}A6C8C9E;G>H?I@JALBNDPHQITLWO`Ve[r_ub|fkws}yy}}|~~|zonmllkjiijijjlgiffaaa{`VpUUhTM`LGUD>L;;C65=036-/2)-.(+,&9$)8#(7$(7$(4%(4%(0'*1(+.*+/+,,,,+++(,-(,-'--'--%-/%-/$./$./$./$./.%(0'*1++2,,1.'74-@C2RUDaiQow_r`zhvewfwf|k{m{mwiwiyl|o}o|n{mzlym{o|r}s}u}u|wyt|yzwyutpqmkgg{b]qXRdLJ\DGE9B@4<:.97+:8,45/45/45/560560560560671761761761872;83;83<94<94<94<94=84=84<73<73=52=52<41<41;30;3083083072/72/72/72/6216216216214313202011/00./0./4+.4+.4+.4+.4+,4+,2,,2,,2,,2,,2-*4/,3/,3/,3/,40-21,21,21,32-32-32-22022032032032.32.51.51.61-61-81+<5/=4-=4->5,?6-A7.B8/E8/E8/F90F90E;2E;2E;2E;2E;2D:1C90B8/A60@5/@5/?4.>3/>3/=2.=2.=2.=2.=20>31>31?42>71?82H32H32U,4U,4[)4Z(3S*2S*2D0/E1088.88.4:,4:,=7)>8*M2'N3(Z/)[0*a91c;3l95o<8x;:z=<;<;<:<9;;997}<8~=9}@;~A3D9{E9|F:|H;~J=K>L?MBNCNDQGSIUKhmMjoOrqSvuW|wZz]~agpw|{~}}{zv|vytwonlk}l}l{nyltkpgpfeu[coY[gQW\HNS?KH9DA2B8.<2(;-$9+"7''7''4)'3(&1)&0(%+*&,+'(-'(-'(.*'-)(-)(-)*,+*,+.*+.*+1(+1(+2'+2'+-#!1'%6/):3-:8,@>2HK8VYFakPkuZl}[udo`papcuhuiuiqgqgtjvlwmvltjtjumwozt{u{xzw{xwtyvxuwtqnokjfe|_ZqTQeJI]BHA9C<4=6.;4,<5-560560560671671671782782872872872983<94<94=:5=:5>;6>;6?:6>95>95>95?74?74?74>63>63=52:52:529419419419418438438438436535424233122012016-06-06-06-06-.6-.4..4..4..4..4/,50-40-40-40-40-32-32-32-43.43.43.331331431542540540841841940940;4.=60?6/?6/@7.A8/B8/C90F90G:1G:1H;2F<3F<3F<3F<3F<3E;2D:1C90B71A60A60@5/@51?40?40>3/>3/>3/?42?42@53@53?82?82I43I43V-5W.6]+6\*5V-5U,4G32G32::0::05;-5;-?9+?9+N3(O4)Z/)[0*[3+]5-f3/i62s65v987889797986~75{:6|;7z=8{>9~?8@9@:@:@;@;~E1}D0C0C0@/?.<.;-9-9-8,7+8+8+:+:+|=+|=+w@+w@+rB+rB+4-0):3MFZQNE<3{8/~B7H=I=|F:|H;~J=K>L?LANCOERHVLXNinNlqQtsUxwY~y\|_cirx}z}}~}{zw}wzuxponnppr}pxovmvlm}ckwadpZ`eQX]ITQBMJ;I?5C9/@2)=/&;++:**7,*6+)3+(2*'-,(-,().().((.*(.*).*).*+-,+-,/+,/+,2),2),3(,3(,0&$6,*>71D=7FD8LJ>RUB]`MdnSjtYizXq`k\k\k^pcpdqendndpfrhuktjrhqgskvnysztzwxuyvurwtvsurpmnjied{^ZqTQeJI]BHA9C<4=6.;4,<5-671671671782782782893893983983983:94<94=:5>;6>;6?<7?<7@;7@;7?:6?:6A96A96A96@85@85?74<73<73;62;62;63;63;63;63<74;63:6395284173062/62/8.-8.-7/-7/-7/-7/-7/-7/-50-50-50-50-41,52-52-52-52-63.43.43.43.43.540540540651952952:72;83<71<71?80?80@7.@7.B8/C90D:0E;1H<0H<0I=1I=1H>4H>4H>4G=3G=4F<3E;2D:1C90B8/A60A60@70@70?61?61?61?61?61@72@72@72=84>95@85A96C97C97E:6D95D95D95D93C82C90B8/B8,B8,C:+C:+F:*F:*G:)H;*],%_.'h.*l2.w30z6366889999:7<9>9=8~>5}=4<4=5<6=7=9>:~C3~C3B3A2?2>1=1<0<0;/a]snc^KC?7I>LA|N?wI:qM=rN>nQ?oR@rSAtUC{VDZH\L^NV}NYQo{UtZu]w_nbqerlwqtvy{~~~z{wyuqqqqqq|szqtormonhggca]`tXXlPTaGLY?KM8CE0@=*<9&<1+<1+92*70(30'2/&-0'-0'*0&*0&,/(-0)1.)1.)6+)6+)?&*?&*D#*D#*I!*I!*;1%B8,JC3RK;UR?ZWD]aHeiPftSjxWg|Um[hXgWfXk]m`namamaocqeslqjojniqmuqxuyvzwxuwwttututtrpnmihdc|\YrROgGG_?LC7A81>5.?6/782782782782893893893893:94:94:94;:5=:5>;6>;6?<7@=8@=8A<8A<8@;7@;7C;8C;8B:7B:7A96A96>95=84=84=84<74=85=85=85=85=85;74;74:63952841841:0/:0/91/91/91/91/91/91/72/72/72/61.52-52-52-63.63.63.43.54/54/54/540540651762:63;74<94=:5>93?:4A:2@91A8/A8/C90D:1E;1F<2I=1I=1J>2J>2H>4H>4H>4H>4H>5G=4F<3D:1C90B8/B71C82A81A81@72@72@72@72@72A83A83B94=84>95A96B:7D:8E;9F;7F;7F;7F;7F;5D93D:1D:1D:.D:.D;,E<-G;+G;+I<+I<+a0)c2+l2.q73}96=:>>AABBCCEBIFIDE@B9~>5~;3}:2:4<6<8>:~C3~C3B3A2?2>1<0<0;/;//}>/|>/|>/|>/|>/|>/|>/}>/}>/-)2.NJxtꏊzuZRF>K@LAzL=wI:qM=rN>nQ?oR@rSAtUC|WE[I]M`PYQ\TsYx^x`yamamakemgshvy{~|}y{wsssstt~u}twrvqsrmlmihdg{_`tX]jPTaGRT?IK6EB/A>+A60@5/=6.;4,63*52)03*/2),2(,2(.1*03,41,41,9.,9.,B)-B)-G&-G&-L$-L$-F<0MC7VO?^WG`]JdaNeiPkoVjxWlzYi~Wn\hXgWfXk]l_nanbocqesgrkpinimhplsowtxuxuurttrrtssrsqomlhhdc|\YrROgGG_?PG@LC;6?<7@=8@=8@=8A<8A<8A<8A<8B=9A<8A<8A<8@;7@;7?:6>95>95>95=84>95>95>95>95>95=84=84<73;62:51:51:0.:0.:0.:0.:0.:0.91.91.91.91.72.61-61-61-72.72.63.63.74/74/74/74/540651850961:72;83>93?:4B;3B;3D;2A8/A9.B:/D:0D:0G;/H<0I=/J>0K=0K=0K>5K>5K>5K>5J=4I<3F<3E;2C90B8/B8/C90B92A81A81A81?82@93@93@93A:4A:4=84>95>;4?<5>>4??5B@4B@4H>4H>4Q:2M6.U4-U4-X3*X3*V4(W5)S7)S7)O:'P;(q3&s5({7,<1=6CD7=07,5*5*8-90:1<8<8<8;7<7;6<5<5y?4y?4sB4sB4qC4qC4uA4uA4<4<464644545!!**MM||^XE?K@I>nK8pM:bS`Y?dZ?f\Aq]EvbJ~dMgP|rNuQmXq\`__^L\IY@Z@ZD[\sjtmw}|~̊~ˉ}{xwurrssssutrqr|mzjvfu{_ntXljScaJaTAWJ7TA0O<+T1/S0.O0-M.+H/*F-(?.'>-&;.&:-%8.%;1(>/*>/*B-*B-*H*,H*,N',N',P%,P%,QE-XL4^W;f_CfeGjiKjpNouSm|Un}ViTnYiUhTgVl[n_paq`ratdvftnrlpkojqnuryyzzyzvwuuuuvuvuuqpllhhdb{[YrRNhEF`=TKBOF=I@7G>5H?69:49:49:49:49:49:4:;5:;5<;6=<7=<7<;6?<7?<7@=8@=8A>9A>9C>:C>:D?;D?;E@:C>:C>:B=9B=9@;7@;7@;7@;7@;7@;7@;7?:6?:6?:6?:6A75A75A75@64@64@64>63>63>63>63;62<73<73<73;62;6296185085074/74/74/762762961961961:72<71=82@91A:2C:1C:1C;0D<1F<2H>4K?3L@4L@2MA3N@3N@3M@7M@7L?6L?6K>5J=4G=4F<3F<3E;2E;2C90B92A81A81@70?82?82?82@93@93@9383/E@0YD1ZE2K>J=I>LALELEEA@<>8A;F?OHSGUI[N]PWLMBA6<1;2>59595:6848383=6@9}C8x>3n=/tC5oA2l>/n:-o;.|91<46431,-)*AA__``EEQNtq{uXRI>K@~[HrO1)F91G=4A7.C4/A2-E0-F1.K-/H*,L%*N',U*1Y.5TH0[O7aZ>f_CdcEhgIlrPu{Yt\s[kVkVjVmYn]q`parcsbuduevfoiqksnrmpmolrruuxywxwwwwtsonlhjfiefbb{[XqQNhEHb?TKBSJARI@PG>NE<9:49:49:49:49:49:4:;5;<6=<7>=8>=8=<7?<7@=8@=8A>9A>9B?:C>:D?;D?;D?;E@8E>8E>8E>8D=7D=5D=5C<4C<4C<4C<4C:3C:3C:3C:3B92B92A81A81A81A81A81@70?80?80?82>71<71<71;60;60:5/94.85.74-74/74/96196196/96/:5/;60<8/=90A:0B;1C;0C;0D:0E;1I=1J>2K?1L@2M?2N@3NA1NA1N@5N@5M?4M?4K>5J=4I<3H;2F<2E;1E;2C90B90B90@91@91?80?80>:1>:1?:4?:4>5.D;4M83H3.S++X00h22g11j-,o21x;8x;8y>6z?7z>4x<2}:1>5@:D>C?C?E5D4C3E5D8D8>49/8,;/@2F8F7E6I7L:L;H7B4A3D6H:GNDK@F8>37/36598A:@9qC6n@3pF8uK=I?{E;43/.&//83D;LDCSRRR==BA[ZlgTOE:C8z[FxYDc_Ba]@\cBahGjiJjiJsdGteHgLlQUN\UZ][^CX7L!DBDG#K)Q1Q4TBZJbWhYj\i\i_kamhqhqlrmsququuvuvxvxvyxyxxyvwqtnqfn`hXcS^NZLXL[BQ;H8E:C4=t37r15d23[)*H"W1.M1-J.*D0)G3,G6.H7/H70J92N=6Q@9XN+^T1e\;i`?heBliFouOyYx`w_pZpZm[n\o\r_tavcxdyeyeyermtoxtxtwuwu{z~~zzttomljjegbazZXqQOiFIc@UOCUOCSMARL@QK?8938938938939:4:;5;<6<=7>=8?>9?>9?>9A>9A>9A>9B?:B?:B?:D?;D?;D?;D?;FA=FA=E@:E@:E@:E@:D?9D?9F?9F?9E>8F?9F?7F?7E>6E>6D=5D=5D;4D;4D;4D;4B92B92B92B92B92B92B92B92A:2A:2A:4?82<71<71<71;60:5/:5/85.85.74/74/96196196/96/;60;60<8/>:1A:0B;1C;0C;0E;1F<2I=1J>2K?1L@2M?2N@3NA1NA1N@5N@5M?4M?4K>5J=4I<3H;2E;1E;1E;2D:1C:1B90A:2@91@91@91?;2?;2@;5@;5I@9E<5I4/G2-Z22d<0C5@1;,;)?-B1E4E7H:L>PBFMGNGMEKCG@DDCBAD=|=6l>1k=0nD6uK=I?{E;32/.+4Za@cjIqpQrqRxiLwhKiNnSb[c\X[SV;P4I#F$G I!J#K%M,L,L7O9@?:@?:@?:B?:C@;C@;C@;C@;C@;D?;D?;D?;E@5F=4F<3F<3E;1E;1D:0D:0D:1D:1C:1D;2D;2D;2D;2D;2C<4?80?80>7/<71;60;60:5/:5/94.94.94.96/96/96/96/;7.<8/?8.@9/A:0B;1C;0D<1E;/F<0I=/J>0L?/M@0M@0NA1P@1O?0P?5O>4M?4L>3K=2K=2I<3H;2E;1E;1D:1E;2C:1C:1A:0A:0?;2?;2@<3@<3A=4A=4YE0=/9-6*6(9+=-E5A-:&6"7#:'?,>,A/A1C3,42:;CBJHOJQMPHKEB:78/7.w7+u5)|/'~1).0798EDQEZI^GD7441744275XS`[UHI3U?4DA0=:)3<)7@-:L6BT>ZM-_R2cZ9g^=fcBnkJtyYdl|ivezivhugtftfuewgyhzi{i{iy|zxsqkhf}c_xZWpROjGJeBWVDWVDXWEXWEYXF7827827828939:4:;5;<6=>8?>9@?:A@;BA5G=4F<3E;1E;1D:0D:0D:1E;2D;2D;2D;2D;2E<3E<3D=5@91?80?80=82<71;60;60:5/:5/94.94.96/96/96/:70;7.<8/?8.@9/A:0B;1D<1D<1F<0G=1J>0K?1M@0M@0M@0M@0O?0O?0O>4O>4M?4L>3K=2J<1H;2H;2E;1D:0D:1E;2D;2C:1B;1B;1@<3@<3A=4A=4B>5B>5S?6I5,b,,wAAKWZfTgZm]kWeVW45?4@5C5F8F>NFGLIN>K:GI6G4D3D3@2@2=1=1>0@2D4H8F2@,<(;';(=*:(9'6&6&194<9A;C>EAHILNQURSPWNA8|<0r2&x+#3+:S7L?<0-/,749775RM^Y^QQDaK|XBkdGpiLqrPuvT{pPxmMfKnSw`jNZJVAP]B_B_DbDbCdBc?c?c?fAhBkEnGrHsXyWxXyXyZuUp^reyly[hSWr+/`30_2/Q;0Q;0C@/@=,6?,7@-6H2;M7VI)\O/aX7h_>jgFspOz_kqmyh{jykykykxjwgwgyh|kmp}uskhd{a]vXVoQOjGKfCXWEXWEYXFZYG[ZH6716717827828939:4;<6=>8?>9@?:A@;BA4G=1F<0G;/G;/D:.D:.D:.E;/E;1E;1D<1D<1E<3E<3E<3A8/@91@91?80?80<71;60;60:5/:5/:5/;7.;7.;7.;7.;7,<8-?8.@9/C;0C;0E;/F<0H<.I=/J>.K?/M@0M@0P@0O?/O?/O?/O>4O>4N=3N=3K=2J<1I;0H:/G:1F90D:0E;1D;2D;2B;1B;1@<1A=2@=4A>5B?6B?6\1*X-&~).DIM^UfE]BZ@T3G22**8(8(='?)>/G8??AA5?1;F6F6C5B4?3@4?3A5C7E9I;B4B0?-=+<*9':(7(7(4'3&C@B?=<76.1.148?CNNUU^X>8@5=2<3C:FCNKFM@G1>+88.3)1*4-8372B=8?>9@?:A@;C@;DA4G=1G=1H<0H<0E;/E;/E;/E;/E;1E;1D<1D<1D;2D;2D;2B90A:2@91@91?80=82<71;60;60;60:5/;7.;7.;7.;7.<8-<8-?8.A:0C;0D<1E;/G=1I=/J>0K?/L@0M@0NA1P@0O?/O?/O?/O>4O>4N=3M<2K=2J<1I;0H:/F90F90D:0E;1D;2C:1B;1B;1@<1A=2A>5B?6B?6C@7b70e:3>2<0:B2B2@2?1<0>2?3C7F:H,>,<*:(7%9':+>/?2@3B?DADCDC>A=@>BCGIIJJOID>PEYN]T]TROIF9@5<0=1>3):06/.'72835/82YM^R[G}M9v^BhLjMydG[BcJgWtdsgrf;H8E8D6B9Bb@d@h@hAjAj@l@l@o?n?n>m>o>oEp>i=fClLpImIiIiXo[rercpY];?Z/(T)"H;+SF6KS=8@?:B?:B?:C@;C@;DAGB>GB>GD=GD=HC=HC=HC=ID>IE0I=/I=/G>/G>/F=.F=.F<0F<0E;/E;/D<1C;0C:1B90A:0A:0@91@91?82?82<71<71;60;60;7.;7.;7,;7,>7-?8.@:.A;/C;.D/J>0J>0L?/M@0M@/NA0P@0O?/O@-O@-P>2O=1N>1M=0L;1K:0I;0H:/F:.F:.C9/D:0B<0B<0@<1@<1@<1A=2A?3B@4B?6C@7z0-<9HL\`WbP[>L9G5<,3-%-%8#7"; :;"@'>-A0:07-:.;/:09/6,8.;3A9D1;+8(5'8*;1C9E=G?8'?.@6F?>7=4:06*0*+01>8ICRIPGD=92.,.,/1461"<-7,+ 4,800)1*ZPkalZR@ZCZCU>SF?A<>B?A>G?JBPHXPWWSSHOBI8G7F3E1C0B2D6G:Ki?l@mAo@n@p>n=m=mIp?f:_@eJmLoKkJjRnSoYmmhuQ^EH47f5.b1*T8,X<0UE5ZJ:]M@jZMxkb{rſ»·vskyh_v\YpVTmOSlNU_DU_DV`EWaFWaF560560560560671671782893;:5;:5<;6>=8@=8A>9B?:C@;DAGB>HC?HC?GD=GD=ID>ID>ID>ID>JF=JF=LE;LE;NE7-?8.@:.A;/C;.D0K?1M@0M@0NA0NA0P@0O?/O@-O@-O=1O=1N>1M=0L;1K:0H:/G9.F:.E9-C9/C9/A;/A;/?;0?;0@<1A=2@>2A?3B?6C@7u+(?5=4926/0.1//1022#8)4).#4,7/5.81[QqgăqaO_HU>P9V?ZLj\fac^QSIKEM@HAC=?A>?e;`@eIlKnNnRr\xZv]qmsmzknX[{JCg6/P4(U9-[K;gWGl\Ozj]}tʾzwo}lby_\sYXqSVoQ[eJ[eJ[eJ[eJ[eJ560560560560560560671782983:94:94=<7?<7@=8A>9B?:C@;DAHC?HC?ID@HE>HE>HE>HE>JE?JE?JF=KG>MF7-?8.@:.A;/C;.D:/?;0><0?=1@>2A?3@@4@@4()BCUWTV=?13--//0'/&4$2";!=#C$A"A A B!B!?!<6-8/807/3.50:6A=D=A:?7?7A5?3<0:.;1B8F>G??:;6?#A%9&7$& ## )$-*.!%)%($.$/%2&3'1'1'.&-%:%5 4$7'7-4*:2=5MCaẂqhX`MR?N?\MbZjbWZNQ?K>JBH>D?@<=B;@9@5=2<6C=?BIL;6?<7@=8A>9C@;DAHC?ID@ID@HE>HE>HE>HE>JE?JE?KG>KG>MF2G=1E=2D<1D<1C;0B;1B;1A:2A:2@93?82=82<71<71<71<8-<8-<8-<8->7-?8.@:.A;/D:/>:/><0?=1@>2A?3@@4@@445QRce[]=?/1,,..-$,#2"6&@&D*J+H)G&F%E$D#@"> 8/:1;3:25072<8B>E>B;?7:2<0<0;/<0A7J@LDJB=8506< :'>+1+/)"("('%"%).*/+6,5+6*4(1'0&-%-%@+34$?/9/1'<4=5>4MCxhn^cPUBUFiZnfmePSFI9:89@9>7=27,2,4./2EH9H6E2F4H5I5I7H8I?LAN?Z>Y=X;V7X6W5Y6Z6_7`8g;j;m;m;p:ot?t?tDaJgSpUrLj?]?_Oochh\vbubunxr|z~txnka^ZSUN}Ļȿѿ˽utg~dby_^wY\uWcrSbqRapQ`oP_nO201201312534653764875986984984983;:5;;3<<4==5??7@@6BB8CC9DD:EE9EE9HH@HH@HH56;55:44F85F85C86C86@78@78<:;<:;<<>==?===???@?;A@>2?6-:1*A/0G55H20C-1;"3=$AD)KN3dVVHC57)7'9):'8%:%=(A*:#;%>(>*?+;*9(5&4%2$2$8'8'8':)=+@.C1D2D0D0B/>+>*>*;*<+?0E6F8B49,1$6+6+9,:-=/>0=/=/9/9/2/1.----/,/,4,4,;*:)?)>(:&5!227&7&7&5$;/H6@:DDHCGDE@AB==8>2;/?/?/@.R@QCRDIBF?=E@G:E7BGMFLENFOESDR?S=Q=WA[DeHiEk@flCsGwJ|L~MyLxQwPvUrQnOiPjSqbecIv>kT}YYr\uinsjaxöŹzyszrqynpxm}tzqv}mt{ku|l1/0201201423542653764875984984983;:5;;3<<4==5>>6@@6AA7CC9DD:EE9EE9HH@HH@HH==?===???@?;A@5-D21H65H21D.5?&:D+KN3UX=WIJ<;-3%5%8(:'8%9$<'@);$<&?)?+@,<+;*7(6'4&4&:):)9(:)=+?-B0C1D0C/A.@-=)=)<+A0D5G8B4>08+5(6+6+9,;.=/>0=/=/9/9/2/2/----/,/,4,3+:)9(>(=';'7#5 6!:):)8'5$9-C7LCI@IEOKPRUWLRDJ9A7?8B.>.?-K9L>QCKDIB?>@?ilAoEuHxK}L~MyKwNtMsUrVsZt[uXv[yU{NtAn;hIrJsRk[tv{W\g^Uzʺ~{~{~{w~uv0/-0/-10.21/431542651762762873872:94;;3;;3==5>>6??5AA7BB8CC9DD8EE9JG>JG>JHF=>E<=D;63=82>93>93>93=82<71;4.;4.<5/=60<73=84=:5>;6?<7@=8@=6B?8E>4F?5I?3I?3M@0M@0P?-P?-P>*P>*8B)9C*>@+>@+D<1C;0F74E63B44A33;63@;8?<7?<7G:4H;5U4/S2-d-*n74@>JHE7<.3%/!5#9':'7$8$:&>(;%;'>*@,A->-=,:+9*7*7*;,:+9*9*;+=->,@.?.?.>-@/;)9'<-F7KA=@?DCHEEDDEBA>@9;4<09-;*<+<+@/D7NAMFLEBB@@=CAG?JALDJCICLENESFTBU?R=W@ZBcFgEkBhAjAjCqEsIxJyK{L|GxEvGsFrNrUy_|bZzQqEjChIoEkFeBaXgjyxx{MM_YKȤȿ/.,/.,0/-10.21/32043/540651762761983::2;;3<<4==5??5@@6BB8CC9DD8DD8IF=IF=JHQOCUST^\]fdqmkxpnpnlkjie\_`WZYPSQHKLCFI@CH?@G>?E<=D;63>63<71=82>93>93>93=82:3-;4.<5/=60=84>95>;6>;6?<7?<7?<5B?8E>4F?5I?3I?3M@0M@0P?-P?-P>*P>*5?&6@';=(<>)B:/B:/E63D52A33@22941=85>;6@=8G:4E82P/*R1,h1.t=:ECMK9+5'0"1#7%;);(8%7#9%<&<&<(?+A-B.@/?.=.<-;.;.?0>/<-:+;+<,=+>,>->-=,A0;):(?0J;N?F76*1%6*=15,5,7+8,:-;.;/;/7/7/1,2-.+.+.+.+2(1'7&6%:$9#7$5"6#8%?/?/<-6'8-=2B:<4<6@:DAJGIJHIAD?B=B>CCCBBC@?1J=MFMFBB@@;A@FALEPAGAGAJDMESGUCV@S=W?Y@aDeDjCiDmEnGuJxL{L{L|K{DuFwKwJvPtTx_|c[{Oo@eFkQwIo>]<[crxJJXRDz|š÷/.,/.,/.,0/-10,21-32.43/54/650650983991::2;;3<<4>>4??5AA7BB8CC9CC9JF;JF;KG;KG;NH8OI9PK7PK7QL9QL9OL=LI:NKFURM\Zegepppxxz}{~z{yzumphg`^WyVOnPIhLG^HCZEARA=NA;GC=IA<@>9=<85:63;60<71=9.=9.=9-=9-88088099/::0=;/><0@<0@<0A;-A;-B;+F?/I=-J>.L?.L?.O?/O?/P?/P?/P=.P=.;=';='>=+>=+?;/?;/=:1=:1:94983893893B94D;6T21Q/.i"(n'-&22>2D7I7)5'5$7&>+?,=*9&8"9#:&:&;'>*>-@/>/>/;-<.;.8F@KGNJLGGBB=?:C;B:B8?5>1:-9*7(9*:+:,3%9-E9IDKFDDAA>CDIHPMU?E?E@HDLFSIVFXCU@WAX@^CaCfDgFoHqKwMyN{MzKzJy?sEyN~M}MtJqPsVyXxQqIgFdSnGbAUMaƔMFS<.xaSxoĒັý0/-0/-0/-0/-0/+10,21-32.43.54/54/872880991::2<<4==3>>4@@6AA7BB8BB8IE:JF;JF:LH<0><0@<0@<0A;-A;-B;+F?/I=-J>.L?.L?.O?/O?/P?/P?/P=.P=.AC-@B,A@.@?-@<0?;/=:1=:1;:5<;6;<6:;5B94C:5S10R0/o(.x171=9E4F3E:,9+;*=,A.B/>+:':$<&<(9%:&=)=,?.>/>/<.=/=0>1B7@5>0;-9+9+9+:,:*:*9*9*=/B4C6B5<16+3)4*7,:/3*3*5+6,7-8.7,8-3,3,/*1,/,.+/).(2'0%5!4 76/.0 3#8+:-<3:38193@:FBMILGGB>972=5=5>4<2FABBBB?DEJIQNV>D>D?GCKFSJWHZEWAXAX@^@^AdCfFoIrLxNzO|MzKzIx@tH|SPMtFmJmQtVvSsNl?]Hc@[L`mץZSL5'U>0mdױȽø21-21-10,10,0/+10,10+21,32-43.44,77/77/880991;;3<<2>>4??5@@6AA7AA7KC8LD9ME8OG:PI7RK9SJ9TK:SL(J?)K@,K@,L@0L@0J@6J@6I?6I?6R=:Q<9M;9J86B86@648948942<42<40=32?59;08:/I2*M6.n42z@>?BCF9@5<<+<+>,@.A/@.>*<(;'=)>+8%7&:):+<-:,;-:.;/;1<2@7>5;28/6-6-6+7,7,6+6*5);1C9A68-/%/%3*8/7/4,0)0)2*3+4,4,3+3+0*0*-*/,.*-)0)/(3%1#5!4 66000 1!4(5)8-9.<4@8D6?7F=MDOFJAC9<2<-<-=-<,;,9*9):*<->/?3;/:2=5>9B=BBEEFHJLNSQV@D?C?FCJHRLVJYHWDZDZC_A]BaDcFlJpMvOxOzNyKxIvLxQ}VR{LsIpNoUvWsQmLeF_LaI^dsde840,f`~xܥĿȿŽŽ54054043/32.21-10,10+21,32-43.44,66.66.77/880::2;;1==3>>4??5@@6AA7KC8LD9ME8OG:QJ8RK9TK:TK:SL(E?)G?(G?(I>(J?)K@,K@,L@0L@0J@6J@6I?6I?6P;8O:7K97I75A75?53672672/91/91-:02?568-35*F/'O80t:8FDBEAD5<07;*<+>,?-?-?->*>*?+@,@-8%7&:):+<-:,:,:.;/;1<2@7?6<3:190909.9.9.8-8,8,>4E;@55*,"/%7.=4913+0)1*2*3+4,4,3+3+0*0*-*/,.*-)0)/(3%1#6"4 764#3"3#2"2&3'6+7,:2=5@8YQVMOFH@C;D;G>I@F=A7<29*9*;+:*:+9*:*;+>/A2A5B6>6=5<7@;BBFFFHIKJOMR@D?C?FCJHRMWL[IXF\F\Ea@\A`CbEkHnLuNwOzNyLyKxO{P|PyMvLsOvXy\}XtLhD]RkUjPejy茍rsWSOKjd~x֟;83:7296174/52-41,41*41*52+52+63,74-85.96/:70;81=:1>;2?<3A>5A>5B?6KA7LB8PD6RF8TH8VJ:WK;WK;UL=TK+F@(F@(F@*GA+EB/EB/CC7CC7AD=AD=>BA>BAF8IG9JE:JE:J@>I?=H9@F8?E4BB3AA5B99F=:>059+F6&QA1qG7{QAK;G7=/:,<*=+=+>,>*?+?+@,?-?-=,7&6'9*8*9+7,8-7.8/91;3<5;4927070818080706/5.92<4>6:22*-$2):1=4904+0(0(0)1*0*1+/)/)-(-(,(.*.).)1)0(5%4$8#6!8 8 9&8%7&6%5&4%5)6*7.8/:3TMXPWOTMMFI?F;C@FEIHIHJIKMMOCEBDAFDIIQOWP\NZK\K\IaD\C`DaEhHkLqOtOxOxNwMv[|YzVvUuUt[z^{^{WqLfFZVjYiN^UchvcrTcYhYhN]N]iewsՔ>;6=:5;8396174/52-41*41*52+52+63,74-74-85.96/;81<90>;2?<3@=4A>5A>5KA7LB8PD6SG9UI9VJ:WK;WK;UL=TKF>=;<;9>:/?;0C<)D=*E?'F@(F@*GA+EB/EB/CC7CC7AD=AD=>BA>BAH:KJBF8SC3_O?}SCWGK;E5=/=/>,?-?-?-?+@,A-B.?-=+:)8'8):+9+:,8-8-7.90:2;3;4:3929292:3;3;392816/@9=5916.5-6-:1=4<3906-0(1)0)1*1+1+/)/)-(-(,(-).).)1)1)6&5%8#7"9!9!7$7$7&6%5&5&5)6*7.6-6/B;NFZR`Y[TSII?D8@4?1=/<&<&<&<&;':&9(;*<.?1@4E9A;@:B?GDJIIHGFFEGIIKEGCEAFDIIQOWP\O[M^M^KcE]DaEbEhHkKpNsOxPyPyPyXyXyWwYyZy[zXuUrQkOiQeVj_oRbLZTbP_GVP_SbN]RagcplɈ夠@=6?<5=:3:7085.63,52+52+52+52+63,74-74-85.96/:70<92=:3?<5@=6A>7A>7MA5NB6PD6SG9VI9XK;YL;YL;WK=WK=SIGSIGWQ_d^lonĕћ좪ꝡ蚞ݖٖГ͏zynmec][YUxUQtRNoPLmPJlNHjKEaF@\D=M@9I>9=>9=?;2@<3@>/B@1@A1AB2@D6@D6:FD:FD7EH7EH0Hd4Lh&@(A-A-A-A-@-A.A/A/=,:)5&7(7(9*8,9-6-7.6-7.80:2727261617283828271604/A<;34,2*5-:1=4<3907.7.0'0'/'0(/)/)-)-)*(*(+(,)/)/)3)3)6(5'9&8%9$8#:$:$9%8$7&7&8*9+8,6*4,/'A:VOe]c[YQJBA9;3907.?&?&>&=%;%:$8&9':.=1=3C9B:B:FBKGNKKHHDFBHFKIGGEEDFGILQRWT]S\Q_Q_ObI\H`H`GdIfLnOqRvSwRyRyZt\v]yb~`{\wQkLfMdUl\oXkgx\mM^SdQeNbRhNdAZD]d_kf{ܛA>7@=6@=6>;4=:3<92:7096/85.74-63,52+52+52+63,74-85.:70=:3?<5A>7B?8K?3MA5PD6RF8UH8VI9WJ9XK:YM?ZN@XNLSIGSM[]Wefeyx͖瞦맫ꩪ㠡ڝϕǎzxqoiea]ZVwWStWQsXRtXRnUOkQJZIBRB=A>9=?;2A=4B@1@>/@A1BC3BF8AE7;E=9C;8DB:FDLO=UqG_{Uk]scsfvpyt}ywpnyscftdg^\_]]R_TXHP@D.?)<$=%=)>*?+A-A.B/A/A/?.>-;,9*7(8)6*8,7.8/8/9091918394:5:5948360607193:5D?A9:26.=5NEf]rih_OF:1.%0'2*3+0*.()%($'%)',),)/)/)2(0&0". 3 4!9$;&<&<&;';';*;*:,:,8,8,80B:;492KCbZf^RJD4@8G?PLWSURJG?;<8CAJHEEEEFHIKMRQVOXMVJXKYJ]QdOgMeIfHeIkMoQuRvPwOv^x]wYu[w[v^y\vZtXoWnViex[lVg]n^oOcAU@VKaMfIboje`qmѐᰬÿC?4B>3A=2@<1?;0=9.<8/:6-95,84+84+62)62)62)73*84+94.;60>93@;5B=7C>8I?5KA7OC7RF:UH8VI9XH8YI9YK>[M@YNJUJFTLY]Ubedwv̔蛤顢㚛ܒ҈~vuokfb_[\X_R_R^R\PTLqMEjGBXB=S?>D@?E@@>==;>A:BE>CE@BD?>BA<@?>BECGJILSNQXJ`SieslzxxzzvyofWmWmP^P^MOJLE;?5:(7%9 :!8%8%8&9':(;):)9(7(7(5&5&3'5)5*7,8/:192:393:4<7;6;6;6;7<8=9=9>8>8>8A;A9?7=4;2=4C:K@QFTITI9.7,1(.%*%,'+),*+,)*))..3.4/7.4+4*1'2%2%6'7(='='<(<(;(;(9*9*7)7)4+<3806.A3@8F>PIXQWQMGD4J@6OC7QE9TG7UH8WG7XH8XJ=YK>XMIVKGUMZ\Tacbtsɑ噢훪룤圜ܓӋƂ{wrnkggcfYeXdXbV[SxVNsPKaJE[EDJBAGAA?::8=@9BE>DFACE@>BA=A@AEHKORVY`]`g]sf|u{vm^tZpVdVdPRHJ@6;1:(;)=$=$9&:'9':(:(;):):)9*9*7(4%3'7+8-<1=4?6=6=6<6;5>9<7;6:5<8@5901() *8-NC^SD9>33*,#'"+&-+0../*+((,,2-3.7.6-6,3)3&2%4%5&<&=';';';(;(8)8)6(6(4+6-7/6.:5D?OKSORPHF:7-*>&>&=&=&<'<'9(9(8+8+9.>3?7D2@<0?;0>:/<8-<8-;7.84+84+84+84+84+94.;60<71>93@;5A<6E>4G@6LB6ND8RF6SG7VG4WH5XH8ZJ:XKCYLDWMV]S\b_~sp{Žߗ虨훛啒ߌփ{xtqpml_k^g]cY^WZSSQvMKpFG\@AV@>I75@?9=E?CN?BO@CS=@T>AaBHnOU\cellrwzwtml`W{JhA_BWEZCK9A5/2,9&:'=$;";);):):);*<+;,<-<-=.;.7*6*9-;1?5?7@8>5=4:2:2715/3-3-71=7C=E?B;>7;4;47.2)3)6,7,1&-0">/I:L?G:=46-.*-)++,,+.*-,,((.,/-4.4.5,3*2)1(1(1(9(9(9':(:);*:*:*9,9,8,4(90=4:583B@RPXYLM:2?4C8KASIWKQEH>D:F;I>KDJCKDNGRNUQSSQQNQORNWYbYg\j\p\pYqUmQlPkPnRpCmHrRxW}ZyWvVpSmVjYm\mYjZh\jcmblahahknmpehY\g[|TH{SKogϨHD8GC7GC7EA5D@4C?3A=2@<1?;0>:/=9095,95,95,84+95,94.;60<71>93?:4@;5E>4F?5KA5MC7QE5QE5UF3VG4WG7YI9WJBZMEWMV[QZ_\{nkv|ܔ喥ꛘ唑ތփ}zyvvisflbg]aZ^WWUzQOtIJ_BCX@>I75@>8BN?BQBEYCF^HKnOU{\bhopwrvyytofaTxKo>\6T;PCXDL;C8260>+?,>%9 7%7%6%7&7&9(8);,;,=.2@4?5@6?7>6;2906.5-0*.(-'.(2,82<6>8;4815.700'(* 3)>3@5<.5'1"0!F9H;E->.?/>1>1>24(@7KBD?61:8OM\]PQAC;==*=*<);(:*:*:*:*8+7*7+<0=2@5G=NDSGOCI?D:D9E:G@G@HAKDOKRNPPMMKNKNKTW`Xf]k_s`t[sUmNiLgMkOmJtMwSyTzUtQpTnVp]qbvfwbsao_mcmblcjbihkgjbeZ]dXuMApH@aY|ÜضJG8JG8IF7HE6FB6EA5D@4B>2A=2@<1@<1;7,;7.:6-:6-:6-:5/;60<71>93?:4@;5B=7D?9HB6KE9NE4OF5RE2SF3VG4WH5VH=\NCWLPZOS]YrlhuyӒݖꖘ发ވׁ~~vyqpkhc`a\]X[RUMNmFGfI?WE;SQ9GT%6%6%6&6&6'8)8);,1<2D:B7B7?6>5;2906.4,3+2*/(/(0)2+5,7.80916/4-4+2)1'.$0"3%9*>/?/<,7&3"A2G8J@NDD@;7+.%(%)*.03145331512.2,0*.+.+.+.+6-6-7.90;/<0>1>1A2A2A44'G=ZPUO=754IHVYMPEJIN;0:/9-8,9,9,:-:-;-9+:-;.<.>0E6J;M?L>G9B4A2A2F=F=G>JAOHRKRMOJLLLLMPZ]Zd`jdsfu`tXlNfLdMfQjMwNxSwPtTmSl[mashvkykwjveq`lcmeonqknnihcl`k_zm\aTC\I;q^Pys̭MJ;LI:KH9JG8IE9GC7FB6EA5C?4C?4B>3>:/=90<8/<8/;7.;60<71=82>93?:4?:4B=7D?9HB6KE9NE4NE4QD1RE2UF3WH5VH=[MBVKOXMQZVoie~rvҐ۔홧횜镗䏑ފۇ؋̅}{vrmijefad\_YZyRSrUKcXNfbJXbJXtFPyKUMVV_Y`^e^f^fIvKxMwMwMoHjD`?[6M0G*<9K?KEQEJ=B>6?7J8J8I0C*A0A0A1A1B3C4D5F7G:I-9*?0B8H>C??;47.1+/+/.13664203/0,0*0*0-1.2/30:1;2;2;2<0<0=0KNFIFKSX?4=2;/8,8+9,;./D;D;E71?82?82@93A96B:7@?:A@;GC8IE:MF4MF4QE/RF0UF/VG0UH8ZM=UKJVLKWTggdwrvʐӔ嘥驪힢뚞疚㓗ݐ؋Ӂy~qzmvlthpiiddn[ws`|VjThIXM\JUQ\MVMVFNDL;G4=4;28/6-5,5,7--#6)=0=.4%./7#=)>);&:);*9->2<8A=>A8:36/7.7.:0;1=1<0=-9)<*>,@.B0B1A0?.>-=,<+E9D8F:J>NERISLQJOJPKOP`a`gelhtnzjzbrUjQfTiYnWvWv[sXpaoftu{ztxgkV`cm`m_lbojwꁆ턉†~umxfzhku]R\DML:\[I}jc{۽SM?RL>QK=PJ4D=5C<4B;3@91@93@93@93A:4B:7B:7@?:BA0>0=0=0;.;.9.9.7,8-5,5,3)3)2)3*3+5-6.7/<2<2<2<2:1907.5,4+3*4*0&4'6)7(5&6%:)>*<(6!09(8'2&4(3/=9>A@C:>37/3'+*+()*'+(/.3277;;;>>7817.7.9/;1=1<0=-:*=+?-@.@.>-=,<+<+<+=,@4@4B6F:KBOFPIOHMHNINObc`gdkgsnzl|euXmTiVk[pUtUt[sYqdrky{y}hlU_eogthuerhu턉ڞʎwrhrZR\DML:YXFub[yr۽TN>TN>SM=RL:A6=3:07=/=/SM=RL6D=5C<4B;5A:4A:4B;5B:7C;8@AGD;IF=NG7NG7QF0QF0UF/VG0WG7YI9RGCSHDUQ`fbqruȑГ㡞좩죫좪뢪뙢嘡䖡ߕޔړٓΐ˖pe|czTeRcDOCN9B9B5<51;.5+3)1&1&0'1(2(4*4+5,5,5,4,4,D9@5:06,5,7.:0:07-3)1$8+3%. 1!6&;'7#35 @)H19&:'8*:,2.2.-/02398>>CKPLOGJFECB@@>>9;57/5,2&.'/*.*..,.,2+2+6*5)9)2"&<-f\f\IEA=FE>=?AQSQNKHC?:66/4-8.9/,6*6*9,>1E:J?JBIAHBICIIaa^b_cdnlvl{fuZlUgVk[p^t_ufsdqopwx⊆씐僀outzwu`qQbnwXpVD\BEN;NWDh[R}pgھXO@XO@WN?WN?VM>UL=TK7>?@?@FBFB;<<:;9A=>:?9C=LBNDI=>27+8,;-:,7,8-6-5,1,1,.-0/1223B2=-5&1"0!4%:)<+:(4"3144543!3!2$4&3(4).(/)4*5+8*8*9'9'7%8&5'5'2+5.2121.2+/*2*2-5.6-2+0+.*-/+1-8-7,8)4%6#+/=*^MfUF<>4LG<72/PMNOLMGFA@<8957.8/:,<.=-:*;(9&9&8%;(<)=+=+=,<+8-:/;/>2?1?1>1?2@2A3A5j^qemac]ictpokcbfepquvk{iygscoagagdghknknkqlwrrwUl^uXpay泯䱭sgy^tNOe?GR2IT4idNmǵYPAXO@XO@WN?VM>UL=TK?>?EAEA;D7@>C@E==::FBC?2097NQHKAG?E9B8A8=8=;<9:;9:8C??;=7@:I?MCK?A5:.8,:,9+7,8-6-6-2-2-0/323456A1>.8)4%2#4%7&8'6$2 37!9!8 9"9"9':(8*8*5*5*0*1+5+6,7)6(6$6$4"5#2$3%0)2+/./.+/*.)1*2,4-5*/).+.+./+0,5*5*7(5&8%;(-3 M:906-5'4&4$;+<):':':'<)=*?-?-?.>-8-:/;/=1>0>0>1>1@2A3A5i]pdl`a[garnmicbfeqrvwrpmyfr`f\b]`bemjspytwrotRiZqVn`x㰬୩nas_uOQgAKV6MX8lgQqμYPAYPAYPAXO@WN?VM>UL=TKUMKWOMYVggduqs~Œɏؓܞ螛螝힝휞잩頦䟥㢣䣤妠꥟饜뤛ꙧ㞟ୖʬŌn]rFSDQ=D=D:=:=;=;==A=A@C@C=C9A7?8;699887;7:6HA@9:2:2B9I@K>E8>09+8)8)6*7+5+6,3-4.30636688=/<.8,7+5(5(7'6&8&6$9#8":#8!9$:%;*=,;.9,6,4*5252807/9+7)7$5"4 5!4"6$1&2'0)0)-,-,.1.10303+,,-2.3/5.3,5(5(8&9'<(H4,2F7>/92MFSNJEDEDENOMNJJFFC??;>6<4-;*;)9':&;'>,?-@/@/>->-:.;/;0=2=0>1>/@1A3C5C6eXlbj`a\gbqnlibcefpqtuiyjzlxhtaj[dY__elluu~zuq}ioLdTlRk^wᪧܥkz[j[tLQjBN\9P^;nlUtǸZQBZQBYPAYPAXO@WN?VM>UL=UL=TK:>=AA@@?C>=852EBYYBB=B=B9A7?7:477676:6;7IB@97/5-=4F=K>G:A3:,7(8)6*8,6,8.5/71639699;;4&5'4(6*5(5(6&7':(;)@*3545 6!7&8'6)5(1'/%>;>;@8>6>0;-9&7$6"7#6$7%1&0%-&-&+*,+,/,/-0,/()*+0,2.4-1*2%2%6$:(>*F2.?,VGD592D=C>FARSUVXYWXTTPPLHFBB:<49,5(6%7&8&6$8$8$;)=+>-=,<+;*:.:.;0;0XL>WK=WK=UI;TH:TH:SG9RF8QE7QE7QE7QE7QE7RF8JF=JF=MG;OI=QJ8RK9VK5VK5WL6WL6WK;XLC>A@A@=D=D:E:E@F:@;=>@FBD@A;9373JF[ZCB>B?C=@;>:;78:6;7?8@9G=?56*4(:-B5I:G8A0;*7'8(6)9,8,:.7/807395;6=81*2+2,4.4-4-6-7.;/<0A26':)9(<*<*<.<.<3<3:3:3?>>=@<=9?2:-<(:&;$;$;%>(:&7#1%0$1'2(3-2,2+0)2)4+7+8,9*7(7$7$:&=)?+@,3"J9_TNC714.//99NQY\vutsolhe`YUNH?<33&+)7&7'6&9&9&;+<,>-=,=-<,<.<.=/=/<-<-<.>0B2E5E9NB[RbYa\lgvtom`c^a`f`fCRN]^igriqgoekiopqstwurpox[dA[F`JdWqۛՕgnS|ZQl?Oj=Td?XhCqqUt\PB\PB\PB[OA[OAZN@ZN@YM?YM?XL>XL>VJLH?NHRK9SL:WL6WL6WL6WL6WK;WK;TLIWOLZVdgcqoozz~Ȍ̑͒ΒԓՓߔ畛镝薞闠㘡䖠ݓڑӎЎΌ̌Љ͉χ{}|~vwigU}PxC_>Z>@HDEA=75/84KGWVDC?C?C>A:B;C1C4B3?.<+9):*9,;.:.<080917395:5<781705/5/4-5.7.7.8,7+9*8)=,>-B0@.=/<.=4@7C*9(D3QFLA710*1166=@HK[Z\[\Y\Y\UYRULOFL?G:F5<+<,:*;(;(<,=-?.?.?/>.<.<.<.=/;,;,;-=/@0D4D8HQIe:a3N3N9C@?IDFA;34,>5OFSOGCBAA@?@>?@>?=D;D;I(:&9%5$7&8*;-=0=0;0:/C3@0<,9)9&:'=(?*=*<)9'?-<.4&7.C:521.:=69',-2,(.*50;6C;H@MBODQEQERD@2A2>/>/<-=->.@0?/>0>0=0=0=.=.<.<.<,>.@1C4D8L@\Te]c_kgsumoaf`ecjbip}rs}lvai]e`iktvzy}{|pqdqTaXL>WK=WK=VJPI?PI?RJ=SK>UM:VN;XM7XM7YM7YM7XLIDE@803+B9OFJFEA?>=<:;:;?=@>F=F=I-;.(:$8$9%7&:)<.?1A4B5A6A6H8D4?/:*9&:'>)?*<);(8&;)=/1#1(C:962/=@8;%*).1-2.507291919.6+4(2&2$C5C4?0=.9*:*9);+;+:,:,/>/<.<.;+<,=.@1@4PD_Wg_c_hdoqkmchglmtnup}rs}mwckaifopyy}vztuno`mS`=ZZN>ZN>ZN>YM=YM=YM=YM=YM=XLUK?XM;XM;ZM:ZM:ZN8ZN8YM=YM=VLCWMDWQU_Y]c_pievmjtqyy~~ʊˋЋЋ͉̌ń~y|twpskmgiceacdebcS^VaF\H^6P3M.C0E:@:@E@E@LBLBHGHG@L@L8P8PEEFFDAA>JBF>7+6*H>PFB;B;;9865465=7@:G.>1NA^Vg_b`genrlpfllrt}u~erjwqzpyirirmvvxpxiohnZiQ`=\9X?\Jg}|؈wvbua{c}eqҲٻҲή˗ɕǖɘ˜ΟΡУѩֵ֮߾ZN>ZN>ZN>ZN>YM=YM=YM=YM=YM=XLUK?XM;YN2@4@5?4=4=4=4>5N=L;I8E4@/<+9&8%8'9(9*4%4*>4B38/'0(2*4,7.90=2>3@4@4C6REOCH0>0=/<+;*;+<,;.C6UMbZa_igrvptjpouu~u~jwp}wt}luirlut}wowioekVeP_>]8W=ZGdyx؈}i{gghq}¢д׺ѳ̮ƨ“Ɨƙǚǟ̤˪ӲӺǿûпνZM=ZM=ZM=ZM=ZM=ZM=ZM=ZM=YLVJ>WK=XL>YL;ZM7?<=:;?=?=CACACFCF@K@K93.!-".)0*1.0-/2,1+3*4+2+4-5.:3;7<8966331202031I?I?G=D:>47-2(1'2)6-807//)<6B>9564/-..>?014*4*5*4)4(4(4)2'2(2(3)YOWLODG=@6=1;/<1<1=2=28-9.<.<.<.;-:+9*9*9*:-8+ME^Vb_mjvyuxltowr}q||zktdmeqo{uq|lvblQdM`=^6W:YCbusچj|g}e~fnwƤӱݺص׳Ьʤœ{{|ŒÎďÒȗɟЦϯֶϾ˺ƵijZM=ZM=ZM=ZM=ZM=ZM=ZM=ZM=ZM=ZM=ZM=XK;XK;XK;XK;YLZMB=GB?@CD7?6>4<;CCD;6?4<1LE6/75860-.+<5D=A55):)B14"7%;(<);(9&9%:&:';(:&;'9(:)6(4&/"/".$4*91>6554402.0)+')#("'!&!&"*$,"* (!.&3(=)>"<753+7$0!( '*,-/0*,&.%4+70817092849563410..,,*,*=3A74*<2VL@6* G>@7-%.&60A;C?>:20,*++005689?5<29.4)2&2&6+9.:08.8.aW_TSHC98.9-<0:/5*4)7,2'2'3%4&5'6(9*;,=.>/?2;.=5JB]Znkrutwu}yup{|ywu}r{t}r~q}ozkviseoPcFY;\;\;Z:Ylj}~i{f}e{cipz~z~v{r{r}svxyuw{˶սͼǶZM\O>ZN@ZN@XMGYNHYOP\RS]S[`V^`XcbZef`|jdnhrlslwp{t{ƉȌŊÐ~|tolqrn`W=0;.8,<0?3D8@8@8>7CF?GBLAKBKAJA:?8?5=3>1^Q@\PB\PBYNHYNHYOPZPQ[QY]S[]U`]U`^Xtb\xgakemfqjwpx~ćƊÎǓ|tpovwrcX6@8=6@9=;=;:<:<;@G=6:3;19/;.9,9):*=0G:HAKDD@>:7452=6C*=)<)<););)9':(6&4$1"4%5):.:1;2807/0%/$."."+#,$)%*&+*,+,.)+'-$*#.&1$9"7620 /,'53>3>17*0,/144602),;>6;5:2705-2-2.30525472-83=872:7OLOK62-)-) 52;8B?D??:713-2,4.6.7/:+8)6(4&4(6*9.;0<2;1;1cY^TPF>63+6-=4=4:1:1=49/9/8.8.9-8,8+6)7(6'7)=/>5H?YVheoqrtw~}|w|{xwuvrp}kxfscocoPcGZ9\:]=[>\khvss~lq[pZrXrX{^bghkg{ek}UeXeXbXdZf[k`pbug{j}l~rtvy|}~»²Һи´\L<\L<\L<\L<\L<\L<\L<\L<\L<\L<\L9A<9>9>8B9C>G>GCH@EBC@A=4;2:/8-;*:)9(;*<0D8E=F><9856497?:E@PFMCB32#9&9&:'<)=+>,=,<+;*:)7)7)3%1#.#3(80>6?7<45.1*9&9&5%5%0$0$-$.%,'-(,*-++,)*'1*4'8&77333)7,:2>5A9E;G=H=H8D1=*61=.;.;,7,7,5,5/1/101010-63?=4220ZXkjED/-31.,97=:A>A;=7906-7+6*6)5(9'8&7%7%9);+<0=1<2<2:3`YZSLE910(3-;5>7;4:2<4;6;6<6;5<4:2:/7,8,5)6):-<2E;UPe`klqry}{{zzywwqn~hxcs`o_nLcCZ7Z8[?[?[g`levaoZdNdNjPlRtWwZ|]|]y]uYmWcxM^~OaR`TdXj]obueyijkprsvxyxy{|{~}ƸȺ˶ʵ[K;[K;[K;[K;[K;[K;[K;[K;[K;[K;[K;ZJ:ZJ:ZJ:ZJ:[K;[K;[K;\L<\L<\L<\L<]K=]K=]K=]K=]M=]M=]N;^O<^O<^O<^OC@A=>>5<3:/8-;*;*:);*;/C7C;@85252:8?=C>GBVLWML=7(:'9&8%9&;)>,>-=,;*:)7)5'2$1#1&6+;3@8?7:22+-&;(:'7'6&1%0$-$-$*%*%)'*(()'(&0)3'8%6868:6D,:'3/;DPUaXcMX?K8D5A+7(5*7+6-8.7-6-/)+'(%&0-30:81/53^\tsTS:8>H=F;H=A>EB=B>CHCJAHFEA@B=?:A5>2<.9+<+;*9):*9,@3>8B<6576??BB@>@>QGXNPB>0<,9)5%4$8(<,=,<+8*8*7+2&1&3(3,81;4=69450.**&4,4,3-3-1-1-0/10021315+/+3+3+9.<-C+A&D'E(I,M?L2?)55AR_huixXgEU>N=N->-=.>2=4?8<6:732./&,#2+3,1,3.EA`\jh[YFDDBMK@>>9:581707,8-9)7'4"2 :%9$8&:(=->.;.9,7.:1<5SLNIC>4//*4/?:@:;5819244447575;5:4<29/:.8,:/6+7-=3MF]Vigrp|~w~w~xzxxql|gwaq_nXgI`BY4V6XA\B]`UWLXtDTp@Vr?XtA^vDbzHk{NoRuVwXu[v\q\vaqaueuhyl{n~qopqqqssuuusstuyy{v{}ƺλϼ[K;[K;[K;[K;[K;[K;[K;[K;[K;[K;[K;ZJ:ZJ:ZJ:ZJ:[K;[K;[K;\L<\L<\L<\L<^K=^K=]L<]L<^M=^M=^M;_N<^O<^O<^O<^O<^N>^N>\O?\O?\NA]OB]OD^PE^PE_QFbM^dO`aQkcSmaV~g\kgtp|u}vs|Ɋȉ|wi_~NoEf>LAOKPJOOKHDH=F;E:H=B?EB>C>C=G>HCJAHED@?A<>9A5=1;-8*;*;*9)9)8+>1;5KE@??>BBAA;986I?VLYKQCD4>.6&3#6&:*;*;*7)8*7+1%2'7,81;4:3813.0+,(+'4,5-4.6040626576798:82=4837622.1(.%1*0)*%:5YU\XVTVTHF<:GEDB@;946/6/7,9.;+8(6$4":%9$8&:(=-=-8+5(5,;2>7LEIDA<502-72@;@:;57081..//20318282;19/<0:.<15*5+:0IBZSfdqo|~u|v}xzxxpk{fvaq_nVeJaD[5W7YD_C^]RPEQm=Ok;Vr?YuB`xFe}Kn~QqTwXz[z`}cyd}hxhzjzm}p~qsoooorsstttqrstxy{vz}ŹĽƿʴZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8[L9[L9[L9\M:\M:\M:\M:^K<^K<^K<^K<_L=_L=^M;_N<^O<^O<^O<]N;]N;]N;^O<^O<`O=aP>aP>aP>bQ?bQ?eLRfMSaO_cQa^Toe[vhfqowuxvqx|ֈՇvp|_nVeDTS?TEO>H@@??C@FCDCGFBFBFBECFEFDEGAB0:+7(9(:)9'9'7*7:4220B:RJaVeZRDH:;-5'5(9,:,9+5*7,7,0%1)7/94:5733/.,-+,+-,0=1>0<1=.=/>.@.@.A.A0D.B1F2G3N4O2T/Q,T/W5a;g6BDPVbamao\jVgRcJ\AS8IBS>M7F5:056060>.>.B+A*:.8,4)NCkd^WKGRNGC62?,>,8*5'6-?6D>ICEAA=412/51=9:6401,2-(+(++,,-1.2/8/7.<0;/>15(3)5+D;TKb^nj{|v}w~y{wvni{dv`r^oTeLbG]7X8YF^E]]PL?Ii7Jj8ZuB^yFf|MlStXw[|]`ei~kmzl|nzm|o~opllllqrqsrrnnoqvuuqy}˹Žֳ̤ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8[L9[L9[L9\M:\M:\M:\M:^K<^K<^K<^K<_L=_L=^M;_N<^O<^O<^O<^O<^O<^O<_P=_P=aP>aP>aP>aP>aP>aP>eLReLR`N^aO_]SndZugeqowuwuqvzӅӅup|apXgFV>N&E,K;P3@2<.8)6'9(;*;)<*:-?2:5D?==9936032031>6KCbWqfcUVHE7:,7*:-:,8*5*7,8-3(4,919494401--+.,0/217D6C5A4@0?.=+=);(;&9';,@/D1F2M3N1S.P+S0X7c>j=IP\dpiu]kP^J[L]HZ=O1BBS;J2A-2&++%-'7'9)?(@)<07+<1WLf_TMD@GC>:3/;8SPJE?:807/9,;.;*:);';'@)=&:&;'<*<*6(4&7.C:JDHBFBC?743051;7732.1,4/+.+.-../2/309090>2=1A48+4*3)@7NE[Wieyzyz{|wul~fxas]o\mQbKaH^6W7XE]D\XKF9Ee3Jj8[vC_zGjQrY{_~bceknqtrr|o}p}n~okllmopoppoklnputtqzñͻǻ԰ɡZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8[L9[L9[L9\M:\M:\M:\M:`J<`J<^K<^K<_L=_L=^M;_N<_N<_N<^O<_P=_P;`Q,@.=1B6>9;66846,1,133555094RHf\sgcWOA@2;.<;:=>"D%G)O*P(S&Q&X-_6k>sVa^iepbmWeO]L\L\FW;L/A>P;G1=/.*)0$2&>$@&F%F%>-6%E6[LUIH';%;%;*;*5(4'9/H>PJJDGDDA85303/732./+.*3/).(-+-*,.,.,2-2-8/8/>0<.7,2':2G?UOe_vw|}xti{cu^pZlYjL]H`F^4U4UCZAXTE@1@b/Gi6WqA]wGmRw\dhkmosuzwv~q}p|m|mijjjmnmnkk~ijlnrruryï˷̾ԩșZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8ZK8[L9[L9[L9\M:\M:\M:\M:`J<`J<^K<^K<_L=_L=^M;_N<_N<_N<^O?CDAC@B@A@AB?A>C9@6?2=0?1;-9)8(<+?.A/D2A5F:B=834635+0-277770++&@6VL}ql`UGE7>1>1:/8-5*8-:190718250501/1/00336587< ===>=<;;:=7>A#I&L$O#N$V,^7l@ujuep]hVaQ_Q_P`M]CT8I/A9K7C/;/.+*3'4(?%@&D#C"9(/E6UF?38,A97/.*<8D?ZUPIB;9/6,6(6(4#4#7!9#B+>':$:$:):)4'4':0KATNKEIFFC96302.511-.*/+51(-',)+(*+)*(.).)4+4+:,>08-2'80C;QKb\uv~xshzbt\nXjWhHYE]D\2S1R@W>UPA<-<^+Fh5Sm=[uElQx]gkopsvx}zxr|o{lzk}g}gghklkljj}h~ikmqtvt{dzǹȺҧƗ]K7]K7]K7]K7]K7]K7]K7]K7]K7]K7]K7^L8^L8^L8^L8^L8^L8^L8^L8^L8^L8^L8[I=\J>\L?]M@\L=\L=ZM]R@_TB_TB_RA_RA`P@aQAcRBcRBdQCcPBcM@bL?nKGnKGgLQiNScXimbskpv{z~|sjpgiVfSMZGT?M=K?LBOAM>J=;<:?8>7>4;1:-8+8%@-B1=,4':-@8E=>893409571717+7+9(:)=';%9 752FCXPWOJ?9.8'?.C3B29-0$C@B?+0059D/:*8=K,>,8260:7DA;:2111552277B@KILFICD;<35,4+3*4+3+2*>1;.4)-"&&,$6.?7E=G=QGI?A77.3*-*1..013.4.414141212/0/01.0-5+5+;/>23$6'@1;,MDf]rozgayZwXuVrOkGfFe7Y9[:\5WWgVfyM@e9,EZ9I^=Wv;`DkQv\zc{dzf|h~klmll~k~j}i}f}feeee|o~q}npkk~efdfgjnnvvƣǩǩ|{]K7]K7]K7]K7]K7]K7]K7]K7]K7]K7]K7^L8^L8^L8^L8^L8^L8^L8^L8^L8^L8^L8\J>]K?]M@^NA^N?]M>ZM<[N=[P>]R@^SA_TB_RA^Q@_O?_O?aP@bQAcPBcPBdNAdNAnKGnKGgLQjOTeZkodumrw||v|zultklYgTVcP]FTCQERHUGSDP?I=G=;<:?8>7?5<2:-9,;(@-?.:)5(3;*;*=->.:.6*FCDA-2169D0;,:6D@66-3*.+1./113-3-314141212/0/01.0-5+5+;/?34%6'?0;,MDf]tq~xgayYvXuUqOkHgEd8Z9[<^:\TdM]uIWv;`DkQu[xazcxd{g}j~k~k~k}j}j}i|h|e|e~d~ddd{n}p|m~o~j~j}d~ecefgklts}oz|cnpbmo\K7\K7\K7\K7\K7\K7\K7\K7\K7\K7\K7]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8]L8^K<_L=_N>`O?_O?^N>\O>\O>[O?]QA\SB]TC^RD]QC\OF[NE_NG_NGbOKcPLcPLdQMgOKgOKcRZgV^c_zmintx~{Àȉ˘ڣʜî{yv~~|}{ten_^iVaLXGSFRJVJUGRBL>H8=<:<:?7?7A4>1=.;,?,@-<+9(9+B4B8=34.82>76/4.4.5*5*6'7(9%:&;%;%4/83@9G@M@G:>/5&4$9);0<1IEEA/225:C3E=A7;16-6-7.:19281=8;6847362736385<8A=G@G@C:=46-3*/+2.1122030304040202/0/00./-4+4+;/?35&5&=.:+KBe\vs{vf}`wYuXtRqMlFgAb:^9]C`FcT_CNkE8b\O>[O?\P@[RA[RA]QC]QC\OF\OF`OHaPIdQMfSOhUQiVRlTPmUQiX`n]ejftpsy|DŽ̌ΒԠǞų{ԁ~~xitebmZeNZGSDPFRGRFQCM?I=G5?8=7<;9;9?7?7A4>1>/<-@-?,;*;*?1I;G==30*2,816/4.5/6+7,7(7(8$9%<&='4/3.70@9OBOBE66'1!9)?4=2GCC?/2259B4=3ABPBP1?(+&) ##&-.01*+&'$$((13%'3715*1'.(3;FQ`DS@Q_p_gYaQYMULRIOCD:;7496B85+>11-.45;4:1;2=4A8A:A:D?B=?;A=C?D@@==:?;EAMFB;?6;25,4+0,3/1122/2/204040202/0/00./-4+4+;/@48)5&:+8)I@cZyvytd{_vWsUqPoKjEf=^<`9]FcMjMX2=f@3d>1DW7PcC[z?bFkQrXt]u^u`xczf{gzgyfyfxeycxbybyb{a{a}b}byjzk|i}j{e{ez`z`|^}_`emntqwtx{qslmfVbbKWW`Q>[O?[O?YOCYOCYPGYPGZPN[QO]ST_UVaT[cV]dWafYcjZgk[hh_bjadgdulizlotwu~}ɂ߆㌋與䙈؝ܯ~؄tvlpeiY_QWJQIPEOCM@I=F=C5;7:69:7:7@6@6C4A2@/?.;-<.<.=/C7NBQFG<7/3+2+:391:2:.<0;-9+5%5%7%9'401-4,=5MAPDH9:+5$<+B78-?;=9/0126>4<6@GQMYCO9=6:(,$(/012-,0/-+*(33??#$"#4714.4:@KSX`\fT^GIGIEIEIBG?D;<896767;863928194;6B=IDJKGH>B7;2-1,:5HCFECBGHOPNMSR_[73<4@8A8@7>4?5@8C;C=B<9A=C>D9>498;ADNK:782604+4+3,5.304111110404/2/2.0.00./-3+3+:/?4:+4%7(7(F=`W{w~vpdy_tUqRnIkEg?d6[?b:]OeWmOS-1[A0`F5IZ:WhH^{CeJmStZt\u]t_wbyezfyfwdwbwbwawax`x`z`{a{a|bxezg{f|g{czbz]z]{\}^~_flnurwrsxjneg^Q`YHWP;JC4C<4C<^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;^M;]K5^L6`N:aO;`Q>_P=[O?ZN>XNBYOCXOFXOF[QO_USdZ[h^_l_fm`gnakoblrborboqhkrilpm~urtwz}y˃㍌銉曊ڞݭ~qnooxxotptmqfl_eW^QXISDN>G;D9?5;7:69:7:7A7@6D5B3A0?.8*=/@2>0?3K?UJTIE=910)927/80:.>2>0;-6&4$6$8&403/7/=5J>L@I:@1=,A0B73(7384/00119196@ISUaT`LPKO59'+-.,-.-:975*(..55'(0125'*>DQW?G;CDN7A/179>BAE;@7<78:;:;675263:3:3>9E@RM^YcdbcX\QU@;>9GBYT_^dcklkl\[NMOK2.91?7B9B9?5?5?7@8>8=7:@7=2:4<7=7=380569BEOL63604.4+5,3,5.304111110404/2/2.0.00./-3+3+:/>3=.4%5&7(B9[R|x~tn}bw]rRnMiDfAc2@49-5+A7WLbWZPLB?5;18,8,8->3>2=16*4(4(6*0,2.92<5B6C7D5D5B2@0<10%3,6/././-1-14:GMV^[c_caeGK2635-/13GICC.../,-<B=LH`\ffiillffOM;9834/<5C5:3926.5--=*:(6'5(6'5(3(338?DKJ0/3,3,3+4,4,6.5.5.4/4//4/4.2.2-0-0/..-3+3+9/<2?14&3%5'>5ULzv|xqk{bu]pOlIfDLTU]\`eiLP7;8:.0/1HJDD--013433!!*-PSSW9=9=<@,1#')57BCDE9=/3,21738-2)+13@ASTbehkgldi`kal_m`nOJLGRN^ZYYRROOJJ:81/4/?:G@MFPHLDE<@7:3814,2*-=,<+9)7'5&4)4.9:?BGKJ/.3,3,4,5-5-6.4-5.4/4//4/4.2.2-0-0/..-3+3+9/:0A35'2$6(:1NExt{un~hx`s[nMjGd9_7]5_1[BbBbQ^FS{@:i.(PE/]R-B1D6I;G@LELIOLGJAD:=;>:=9<;:;:@:?9B5?2>/<-90>5>62*-#8.QFdYk^gZcVK>@38+3'9-9/:03,2+3-60/+2.70708,9-?0D5C4<-2'4)1)3+1//-,-,-0369@DGKRWafOTBGJO;@15FJBF04=@3602),LOCE-/7957)+570279=@?B6EMU]eksltfr_kYhYhYlZmb\[UXUXUIG:855663063A=GCNGSLUKOEE=?7:2805/4.+:--<)7(6-:5B@FBHGF/.3,4-5,5,4,5-3,5.4/50.4.4.2.2-0-0..--3+3+9/8.C56(3%6(6.G?spuoh{bu^rZnKhEb6`6`5`3^FdIgV[?D_B2Y<,II1SS;[aG`fLc{KhPnVt\v^x`zb|dybw`t]qZqZqZqZr[t\u]v^w_z`{ax_y`z_{`z]y\wXwXwVyX|Y~[adkjpquqo{jvprll~fgyadv^_P=_P=_P=_P=_P=_P=_P=_P=_P=_P=_P=^O<^O<^O<^O<^O<^O<^O<^O<^O<^O<^O=<<;A;?9B5?2>/<-;2>5>66.5+?5RG]RbUdWgZ[NL??25)8,8.9/3,2+3-602.2.5.5.:.=1B3C4@1:+1&7,0(1)0./--.012503268@NQORHJFH<>"$')HJ@B>@/8+42:?GNUZa`hfniqfnam_k\k[jXkWjjd_YVSSPA?2000444185EAGCMFQJQGJ@@8;380918293%4+:1@0?+9)70=9FBH=C=<0/4-5.6-5,4,5-3,5.5061.4.4.2.2-0-0..--3+3+9/6,D67)3%7)3+B:pmqk~dw_r[oYmKhEb7a7a8c6aGeKiRW05Y<,^A1HH0OO7Y_EZ`F`xHf~NlTs[u]x`ya|dxau^qZoXoXoXoXpYrZs[u]v^y_y_w^x_y^z_y\x[uVuVvUwVzW|Y_ahflkn}iveq`k}ehzbbt\\nVYkS_O?_O?_O?_O?_O?_O?_O?_O?_O?_O?_O?^N>^N>^N>^N>^N>^N>^N>^N>^N>^N>^N>cR8cR8bQ=aP<]OD]ODZPO]SR]Wcb\h`^vtruu||{|xxwwwwwwt{v}z}̂ʶƺͿàŚØϾʹuYmQ[DM6@0F6LDZRZWXUNOBC>@=?;=;==;<:<6937/5-72:5;481=4G>UHXK[N`ShYj[YKI;:-;.8/:13-3-2.51513/3-4.;2@7E6C4;F;F2@+96CLYcmnxmxgrbm\g\i_laq`p[lWh^WSLKFHC:80.11550./-95A=G?JBH@A9814-2,6083:5$.,63=3=.8,64;=DCD:;42205.5.6-6-3*3*0+3.3.4/.4.4.2.2-0-0..--2+2+8/4+C67*2%6)2*?7mlke}`u[pYnWlJjDd7a8b\L<]M=_O?aQAcSCbRBaQA`P@eT:cR8`O;`O;_QF_QFZPO\RQa[gnhtsqzxzz}}~zzuuqqooqxszx}̆Ō˗ğ̭óɻƻʿ̲̲ͪΫΣ̡ǙÕߢ̏shQYBjZ~naYE=C@XU]^IJ@B9;798:<::88260:2<4;64/:3B;A8?6REYLQDTGhYeV]OTFF9@36-7.5/71403//+.*2,60<3=4<-8)4'6)6*0$-&/(.)0+1021424241416:BFRVZ^SXAF0617IOkqzotkokokndg]_Y[[]`bY^OTCJS2;P/9N-[K;]M=_O?`P@`P@`P@_O?_O?_O?`P@aQAbRBaQA_O?^N>^N>`P@bRBcSCcSCaQA`P@eUEbRB]OD]OD\RP^TR\V`_Ycdbzomttxxxz|~}~y|uxqtornpmottww}~ЄאĘ̧țУԘ؜ڙؚؚ٘נӜΚɕһkx\nˑ}rfXLUNkdnmWVJLAC:=;><>;=89453445<85193>8;28/H>PFM?RDdVl^cUWID7:-1'4*4-703-1+324372:5=4<39-6*5(6)5+5+2+2+1+0*1,0+3-3-5.5.:0:.8.:,8'7!1%4,;8DO[Yb`igofndodoco`lYgUcLHEA;9534141200.1.3083@;A:?8=3<290:1719384959;9;8;8;798:8:6853203,3,6,7-7,7,3+3+0*1+0-2/05050303.1.1//..3,3,90=4=1:.7,0%5/=7UVtxe~b{^vXpPlLhCeBd;b:a@bHjXeFSlD:V.$59 ;?&U+>U+[K;\L<^N>`P@`P@`P@_O?_O?`P@aQAbRBcSCbRB`P@`P@`P@bRBcSCcSCcSCaQA`P@gWGdTD^PE^PE^TRdZXe_ijdnnlvtyyzzz|}}z|ruloiljmmoprvvzz܂Ջޙͤش¾ɸпתۮߣߡۤ֟ϛɕѺŮufpŋwk_UITMjcnmdcUWIK?B>A?A?A=>895634A=:6<6?9;24+@6F9=48/5)4(4'5(2(8.5.3,0*/)/*/*3-4.70706879<@GKTX_cbjai]eZbXcITGRGRNVYafmlsjp`fTWKN+2*1)3,6.:,8%5 0&50?>JKWU^Zcbjdldofqco]iR`KYB>>:866474967542303072<7>7<5<2:090:193;5:6;78:8:697:68797957421/2+3,6,7-7,7,3+3+/)1+0-1.05050303.1.1//..3,3,90:1A5>2:/4)3-:4YZptaz]vYqUmPlMiCe?a9`:aCeFhO\;Hg?5Y1'7;"8<#8A&=F+KI4PN9Qc;XjBavKmWr\v`tZsYoUnTlPjNiNjOkPlQmToVqYrZrZs[uWuWtVtVtTtTrSqRoNnMoOjJiKfHcH]BXu?Pm7Ic3B\,?V(D+2,3.62:3?/;)7&40??NNZFRMTQXX]]bbgej`gW^IP@G9382517397<:;98662406093;2:19090708173:697:8;9;9:9:997:8:684613.3*6-7,8-8,8,3)3).)0+/+0,15150303/1/10//.3,3,805-E:@5:06,.+52\_|kr`{[vSpPmJlHj?f8_:^>bPgPgRV<@[D4U>.=B+8=&:>'@D-KD1LE2M]9Td@^pHj|TpXt\sXrWmPmPiKhJhKhKiLjMlQmRoWpXqYqYuWuWtVtVrTqSoQmOlNjLjMdGcI_E[}AUw;Qn8Jg1G_/C[+AW)@V(B\-D^/Ga2Jd5Mg8WJ:YL<[N>]P@^QA^QA^QA^QA_RB`SCaTD`SC`SC`SC`SCaTDaTDaTDaTD`SC^QA]P@[PL[PL\RSaWXe]jnfsqmwsxx{{{}z|vzuyothm`g]d_egmouu{Dž抈떓⡞ۼ۸ݟդ̛xok{gfZ]Q\SkblhwwggSVJMBEAD=A;?8<6:=9;7@;D?D=;4;/:.9,5(6(QC]Ok]h[YLA66+2)6-4,3+10@?QMTPLD=53*2)3(3(/'/',$,$+%,&/)1+7/:2?4@5,(/+43=<@>@><::6738282:1:190907092739597:8;9;9:9:997:8:684613.3*6-8-9.8,8,3)3).)/*.*0,15150303/1/10//.3,3,803+H=A6:08.,)52be~t{kra|[vQnNkIkFhbQhPgMQ7;]F6_H8GL5>C,>B+CG0LE2HA.HX4O_;YkCdvNkSqYpUpUlOkNgIgIgJgJhKiLkPlQnVoWoWpXtVtVsUrToQmOkMiKgIfHeHaD_EZ@Xz>Rt8Pm7Li3Ld4Kc3Lb4Lb4Ic4Ke6Nh9Rl=Uo@VI9WJ:ZM=\O?]P@]P@]P@^QA_RB`SCaTD_RB`SC`SCaTDaTDaTD`SC`SC_RB^QA^QAUKVYOZ^Wgf_okgrntrxvwyy{x}v{rwmrel_f]c^ddjmsu{zʐᕓ柞઩뷶߱ٵձʴ~vrtjrhmeumto蓎zxff\\PSKNDGBE=@9C>G@?8;19/;04)- 6)I:_PdWZME79+4'6)5)5)12EF]Zeb\WJE=4908/8/4-0).'-&.(-'.'.'3'4(6*6*8+6)4*6,;6ABFJNQTWPTFJ8=/4507295<8=;><=;;995628181:0:0:1:1718263747676<8<8:7:7:8;9:695704-4*7-8+9,8,8,3)2(/'0(/*0+3535232301011/0.3,3,702+F=?6805-)(65ekymvjsa{ZtKlGh@h>f8b2\?]Fd`mWdTMr@9ZMIH3HF1LJ5OG4JB/ES2KY8Td?`pKg}OnVnRoSmNlMhHiIgHhIhKiLjOkPlUmVoXoXuWuWqSpRmOkMgJeHcHbGbH]C]CX|>VuXs@TG7VI9XK;ZM=\O?\O?\O?]P@^QA`SCaTD_RB`SC`SCaTDaTD`SC`SC_RB_RB`SC`SCVLW^T_g`prk{vryuxvzxwyy{w|sxnsgl^e[b^ddjmsv||̀З蛙쥤毮ݯ٫ӯΪĮĹyuylvirhtjjbkchcۆ}~|ssmm`cZ]ORILBE>A<7;6=8A4H=A63&.!<-L=QDM@B4=/9,9,5)2&01EF_\jgd_RMC:=4;2;2815.3,2+2,1+1*.'1%."."-!7*4'1'4*94AIFQP[U`U`Xc`kem_gPUBG9:8959595=7?:E?JHSP[Yc4>4;2959<@EHJMGK@D5:/47294;7<8:8978675845170:3<2<2<3;2828263635454=9<8;8;8;9;9;795815.5+7-9,9,9-8,3)2(/'0(/*0+3535232301011/0.3,3,703,C:=4803+,+?>jpw}jsjs[uUoGhCd;c:b7a5_CaIganLYNGr@9\O>dWFYXCON9LJ5MK6OG4JB/BP/GU4O_:ZjEawIiQkOmQkLkLgGhHgHgHgJhKiNkPlUmVnWoXtVsUoQmOjLhJdGbE`E_D`FZ@Z~@VzWn@[pE\qFVq>Wr?Wr?Wr?Xs@RE5SF6VI9XK;ZM=[N>[N>\O?]P@_RB`SC`SC`SCaTDaTDaTD`SC_RB`SCaTDcVFdWGYTkc^uniyt{y{yxyxyvxvxsxmrfm`g[c[caiksv}~̈́ӆ՘՝ڦܯ幽Źú|}wxsvwrxojtkfohsle_b\aZwpwp؁z|}wtqnccZZMNHIB=?:<7;6A<=892@9SHMB:-4'7*;.=/>0?1B4D4B2;-7)01ABVVaa]XOJB:<4819281:39292:392:08.:.8,:*9)+/7&A0HC?=98;9<:C7@@LMYUaXd[d_hajZcMSBH@:A;A>DAFHKMOURXT]U^X_3:17.40268:<>@:>6:/4,15173:6:653202/2/403/5.;4=4<3=3<29393535333339988888887878765613.4+6-9,:-:+9*4)3(/&1(/)0*4545333311111/0.3,3,706/=4:1811*11KKmtqxdpdpTlQiAe=a1a1a6b8dMfNghjGIhN?aG8WP=]VC\UBVO\O?^QA_RBaTDbUEbUEbUEbUE`SC`SCaTDdWGgZJi\Lfaxmhvq}x|z{yxyxyuwrtmrfkbi_f]e`hgoqy|˄ӊٍܚמۦܮ䶺߻ƽĹw|xrsnstotkfpgbleqja[^X`Yb[d]slws{{xzwooggYZRSMHIDA<<7B=?::3C<[PTI;.=0:-6)6(;-?1D6E5D4?1>034;4>4A5A5E5D4$.<+J9NBH<:61-.1589BD5/71:7?5=4>4=3;5:4646444448877777776877665502-3*7.9,:-:+9*4)3(/&0'/)0*4545333311111/0.3,3,70:37.7.:32+;;[[pwls`l^jLdLd?c<`.^/_7c;gNgIb\^46`F7aG8UN;WP=YR?WP=UJ8OD2MA1MA1>I+AL.FT1O]:Wj=`sFc~GgKhIiJfEeDdCdCdFeGgLhMiRjSkUkUoQnPkOhLfJdHaH`G_F^E_G_G_H]F]{G[yE[uE[uE^uI_vJbwNcxOZuBZuBZuBYtAYtAMA1OC3RF6TH8VJ:WK;XL<4D;:;:;8<9;5:4728381;493828170;2;2@2A3E6E6=#@&C,G0F7B3913+10547YI:P@1L?/OB2;F(>I+BP-JX5Rd:[mCazCgIfGhIeDdCbAcBcEdFeJfKgNhOiSiSmQlPkOiMdJcI`G_F_H_H`I^G_J^I`~J^|H_yJ_yJbyMczNezQf{R\wB\wB\wB]xC]xCL@0NB2QE5TH8UI9WK;WK;YM=ZN>\P@]QAcWGdXHdXHdXHbVFaUEaUEcWGh\LmaQpdTwrytzvyutssrrsstnrgk_fY`[c`hfnksqyxɁЉؑޖ㚣ʝ͡Ϧԫجٯٯٱױ״ղӳϰ̭ǩéz}zifmc^bgbfd[\^UVo][ucavWRxYTc\OHOHZS]Whbnizu|x}yrplj[VVQKED>LFIC@8E=XPH@&1&3%8*@0F6D3:)1 2!=+H6FH?A65213085<6=7;6<7<5<593715.2+4+3*8*9+<-=.Z@Q7C,;$8);,=5=5875416KPKULVNXQ[U_V`U\OVGLBG4)7,7092535336473939288>6;7<:=>A9=48+0*/,1053-71978620-+-+/-403/6/;4=4=4=4=4;4;48697777736251515242434231..+0(6.9-9-:+9*5)4(1&2'1)2*6565434321211/0.3,3,70?8.%5,?94.HJnpqzajXeQ^F^KcAi=e,_+^6c;hLc;RGC]"MB0YN/K>.PC39D&NG?PIAUH@VIA\L=^N?aP0?17*:-?1@2=/8*4&4&7+>2A7:0908/7-6,8*7)<)=*B,C-;3=5A9DF>B:<45-.&+#=5D;LCSJWN[R\S[RULLCE<*=':,6+5376:=;8694:5;4;4:5:583836262252544446464816/7-5+6'9*:(:(9&9&8%8%8#8#7#7#41414/504,4,5*4)7)6(9,;.5-;3:875T_q|avTiPmDaKm<^0W7^TL?OG:BE4?B16H28J4FGGH GK&LP+OY6Xb?\lHcsOb|OeRdJeKbBcCa>c@dAfCjJlLmQnRjIhGiHgFfFfFfIfIdJbHcIeKeJcHc~Gc~GdFdFfFe~Ed}Cc|BX}8Z:\<^>_?>@5@B7CC9FFNG?SF>UH@[K<]M>`O;aP<`R8aS9_T@`UA_XPd]Uebikhopm~spvnxpyszturqnjied`_^]]]ccgflksqzx́|և܎┎蘑՟֠סءآ٢آء֠աԡԠџП˞ʝȚŕ|wnqvilqfdga_bf[Yf[YpWRoVQ~SJVMTITIWL]RZO[P`Wneum{sy~zyml`_PONMYXB=)$2(5+7&7&6%6%7%9'9*<-=/>08+9,<.=/;-9+7)7)7+:.;1;190908.6,9+7)<);(>(>(7/91=5@8B:C;A9>6916.3+7/=4F=MDRIULVMTKMDC:<3:A06H28J4BCGH LP+UY4ZdAakHbrNfvRc}PeRdJdJaAbBa>b?dAfCjJkKlPmQjIiHiHgFfFfFgJfIeKcIdJeKeJcHc~Gc~GdFeGgGfFd}Cc|BZ:\<^>`@aA:=2OD>QF@WI]N;_P=]Q;^R<\SB_VE^YUc^Zfclmjspnsqtntnroqnmjifaa^^\]\][]eghinovt}{΃Ԉٌߐ㔎斐藖җҘӘӚ՚՚ՙԙәӚЛњΙ͙ǙǘÖy}t}itxdol`dg[_d]Wd]Wg[OfZNuUHxXKRGYNXP^VVTVT[Yecngqjvn|t}{spc`]Y]YA9)!3%7)9'8&9%9%8%9&9);+;-<.8,7+9+8*9+:,<-<-9+7)4(<0:09/9.8-:,8*:(8&:%8#4*5+8.;1=3?5@6@6?5>4=34*9/A7G=KAMCNDKAE;;15+6!7"6'8)2.3/-2-2)8*9)>*?*A)@(@'?$=#< ;:9878#9$:*;+<1:2;8:9;=;8694:5;4;4:5:583836262262644557564816/7-5+5(9,;(;(:&:&9%9%8%8%7%7%4,4,5+5+6*6*6'6'8)7(9,=0:1/&67VWcqbpWpIbAbMn:a+?C,AE.b?dAfCiIkKlPlPmJlIjIhGgGgGhKgJfLdJeKeKeJdIcHcHeGeGeFdEe~Dd}C^>`@bBdDeE69.8;0==5??7E@:GBTF9WI<[L9^O<\P:]Q;\SB_VE_ZVe`\hennktqosqsmrlmjjgda`]ZZZZ[\]^]_hjklqrzx}Ѕֈًލ㒌䒑͓ΓΓΕДϔϓΓ͒̔ʔʓǓǓ“}vzq{grvbmk_cg[_c\Vc\VfZNeYMtTGvVIPE\Q\Tc[[Y[Y^\gengohskxp}tqlhb^A9+#4&7)9'8&9%9%8%9&8(:*9+:,:.7+6(5'7);->/>/9+3%-!9-7-6,7,7,:,9+;)9'9$8#5+5+6,8.:0<2>4?5A7B8B8;1>4B8E;F&;&=%<$<#;!: 9887766!7"8):,=4=4=:<9;<:8694:5;4;4:5:583836262262655557564816/7-5+5(8+:':'9%9%8$8$7$7$6$6$2*3+3)4*4(4(5&5&7(6'8+c@eBgDjJkKlPlPnKmJjIhGgGgGhKhKgMeKgMeKeJdIcHcHeGfHfGeFfEe~DbBdDfFhHiI17+39-9:2<=5A>9C@;I@;LC>PFVJYQF]UJ_[\eabhftnlzooppqnnkhfb`[[WWUUXXY\^a_cjnmpsvz{̀Ӆֈًٌڍێ܏͏͏ϏϏяюҍюҎҎώϏɏɎ}}vxq[jWfvY]rUY`]T`]TYaLX`KfZDh\FPC\OVU^]V[V[[_cglklktnysyyy}|tkcG=2(:*:*<(;'<&;%:%;&9(:)9*9*:/7,5(4'7(;,@/@/:*4$. 8*5)5)5)6*9+9+<+:);(:'8.8.8.8.8.9/;1<2=3>4?5D:E;D:B8?5>4@6B8B8?5<24%6'5,8/3131-7,6(9):)<&9&;&;&;&;$:$:#8#8!8!8"7!6#6$7,80<7>8?;<89978694:5;6;6:5:575755454272745456554715/7-5+6(9+9)9):':'8%8%8%8%7$7$7(7(7&8'9(9(;(;(:):);-=/721,ELlsg{QeFe@_:`Gm.Z3_"LA%IV![h3tSjwqzelWa}L_{J]B`E`?bAb?eBiFkHlLlLlRlRoLmJkJiHhHgGiLiLhMgLhLfJeKdJdGdGeGfHgHgHeDdCeEgGiIkKlL/5)06*67/9:2?<7A>9G>9JA+>+;1;1;1:0:0:0:09/9/9/9/E;E;C9?5;19/;1>4@6>4<23$5&4+7.3131-7-7):):)<)<)>)>*?*?*@*@*?*?(?(?$9#8%8%8-90<7>7>:;67648694:5;6;6:5:575755454383856567665715/7-5+6(8*8(8(9&9&7$7$7$7$6#6#6'6'7&8'8'9(;(;(;*:);-;-4/>9U\jqauNb@_A`@f=c0\.Z7^?fTqJgAP~#2G#%H$&77///'*6(.:,7@-;D1BA,?>)D:!H>%PE)VK/bo:tLl~moZb~M_{J]B`Ea@cBdAgDlImJnNnNnTnToLnKkJiHhHgGiLiLiNhMjNfJeKdJeHeHfHgIhIhIgFfEgGiIkKmMnN,4'.6)36/692;:6=<8B=:D?.<0<0<0<0<0;/9.8-6+5*4*<2=3>4<29/8.:0;1:06,3)+$-&.,200516-9-9,<,<-?.@0@1A1A1A1?1?/=/=.=.=,:+9,8,81:3<8=7<8855428694:5:6:697977575545438385959766571607.5,6*7+8)8)9'9'8%8%8%8%7%7%:%:%<&='>'?(@(@(?,?,<19.32MLan`mTpIe7]>d@n0^3a)W:\JlfwM^h;@S&+9/.<21241.0-.5-3:25A-6B.:?!7<D<OG#fT.r`:|VeĎŕrr^cO_K^D`Fa>dAfCjGnKpMqSpRpVoUpMnKkJhGgGgGiLiLiNiNkOgKfJeIdHeIgIhJiIhHgEfDgIhJkMmOnP*2%,4'25.470984;:6?:7B=:F?9IB(>(>(>(<(<(:(:(8*8*3+5-9.9.;-8*9(8':)<+<,=->0A3@4>2:-6)5'6(:*=-:.:.;/;/;/;/9.8-7,6+4*6,9/<2>4>4?5?5?5:04*/%*#,%.,201638/;0<.>/?/A/A0@0@0@/?/=.<+9+9*9*9.<-;.:.:1:2;6;496644428694:5:6:697977575545449495959766582607.5,6*7+8)8)9'9'8%8%8%8%7%7%9$9$;%<&>'>'@(@(?,?,;08-98ZYgtXeKgHd7]>dAo-[3a)W:\Gi]n>OZ-2P#(?54A761302411804;33?+1=)4949H@]U1}kE}Ws}ŏ͗ʚxxdhTbN_E_Ea>eBgDkHpMrOrTrTpVpVoLmJkJhGfFfFhKiLiNiNkOgKfJeIeIeIhJiKjJiIhFgEhJiKlNnPoQ(0#*2%-2+05.463685986;:8@<9B>;EA8JF=IF=IF=JIEQPLWW_^^fbcxdezbcab_]\ZVVRRQQUUY\beilpsqux|z~}ڂ݃ބۃڄՄՇԇԃǃDŽʃɂςσԃԅׅ׈Ӎ،ˋʌ~{vspynktQWNTtSNtSNa`LcbNXhKVfI]bD^cEzWC|YETM_XVYWZV^\d_f`gfilourhwmzpe\aXbXMC8*6(8%:'<(<(<&=';)<*9*9*7+7+0(2*8,9-=-;+<):';(=*=+=+?0F7I;G9?28+4&4&8);,8(9)9):*:*:*9*9*7)7)6(5'8+2@4@4A5@4<05)/#**--.3271;3=1?1?1A1A2A.=0=0=0:/9/6.5+2+2)/)/2<2<5;5;6:5967566554648686979696878777774646495:6:59877684626-5,7+7+8*8*9(9(9(9(8&8&8&8&:";#=#>$@%A&A+A+?.?.;492AH]d_uOeAcAc6d8f8j-_8^6\LcLcW]w63;30<<>;;=:16=49=52>636;'49%/=4BKQ!gm=ThÃȈ͓ϕȕy{gkUcM^B^Ba>eBjCnGqNsPsUrTpVoUoNmLjIgFfHfHhKiLiNiNiOfLeJdIcHdIgHiJiHiHhEgDhJjLlNnPoQ&.!(0#+0).3,241352653875=96?;8B>5HD;GD;HE(<*=+:+:+8,8,-%.&5)7+<,<,>+<);(:'9'8&=.G8M?M?E8;.6(5'9*=.9)9)9)8(8(8(7(8)8*8*8*9+:-2@4>2:.6*22445:8=6@5?2@0>.>-=.=,;.;.;/9/9/6/6-4-4,2,21;2<6<5;6:48453465769786869796968787777746465:5:6:6:877684626-5,7+7+8*8*9(9(9(9(8&8&8&8&8 9!<"=#?$@%?)?)=,=,92:3MT_fWmNd@b=_:h5c0b5g3Y=cSj@Wz?Eh-3A96C;8<<>99;=49?6;>63>637<(8=)7E!AO+\b2yOg{ʊˋʐȎw|hlVbL[?]A`=dAiBnGqNsPsUqSpVoUnMlKiHfEeGeGgJhKiNiNiOfLeJdIdIdIhIiJjIjIiFhEiKkMmOoQpR%- '/"*/(-2+02/130444555986;:8<;6ED?DD30%- ;.C17%9&9&:';(:);*8,8,5,5,,%-&2(5+<.=/A/?-=*:'6%4#:,H:OCPDH=>38,6*;.>1;+:*9)8(6'6'5'6(7)9+7+:.;/:.7,4)3)6,:1<3:18/6;8=9@;B9E7C3B/>.<,:.90;293:5869677856675555596:9<9<9:6744337597;986869788888989696948485:5:6:6:897894728/7.8-8-:+:+;+;+;*;*;*;*;*;*8!9"<#=$@'A(@*@*=0<'B@++<)8'<+,;-XLTH6+/$<0?39,7*;+:*9)8(6'6'4&4&4&5'3'6*9-=1>3>3:07-7.<3B9G>BG=B5<4;2>4@0?,;,:-;2=5@6=4;6969789:78784433;?;?:=9<9:7877667575759797:899:::;:;9<9<8<8<6;6;6:6:9:9:<7:5;27.7,6+8)8)9)9)9(9(9(:):):)7 ;$>%:!66='F0D7><=756A'0H.7J01J01<:%B@+DZ,_uG~Zsz€͌ń|x}ihTYzCWxAY|<]@_9504/6-8/:-9,9(7&8&8&8&9'7)7)5,5,3,3,1'2(7*9,>.?/B/A.>+<)7':*2$?1UIQE9-2&<.>09*6'=+=+;*;*:)9(8(8(6(6(5(6)7+9-9.8-4*2(2)7.<3@7CI=C5<290;17?7:362255;8A>C@C@?<=:<;;:;9:8:796858587878787778899::9;9;9<9<8=8=5:5:69699999<8:6;37/8+8+;+;+;+;+<+<+<+<+;+;+9"=&?):$6 7!<,A1=5;328`fUjNcB`;Y5Y3W6^9a?fBiW\JOuF@f71>?/=>.5C66D7E;9E;9V37Q.2T1-W40KE+VP6Wo=pVdwz~ttba|OVt@XvB\{?_~B`>eCiBlElIlIkMjLiRiRiGgEdCcBcDeFgJhKgMfLeKhNhLhLhJgIfFfFeDhGkJlKmPnQpSrUsV*0"*0")/%)/%+-*,.+.0/02133155367/:;3<>3>@5AD=EHAJKOOPTRTcUWfXXpYYq\Y^[`^fdjhrpyxƁΆ⋊獍녅炂}}Ё~͂΅ƆLJˈ̊ϋЋыэΌ͍ʼn|zv|two~skildbg^Ud[Rb`Kb`Ke^Ke^Kh]Ih]Ii]Gj^Hj^Fk_Gn^DtdJ{]Cz\BTBZHSKYQNSSXO[S_QKLFC><772618/909,8+9(7&8&8&8&9'7)7)5,5,3,3,2(2(6)7*<,>.A.@->+<)8(8(;-F8NBJ>=15)9+:,8)4%=+<*;*;*;*;*9)9)7)6(5(8+7+7+6+4)1'1'2)5,:1<3AG;A3:/6.9/:/=.<1<4?9A3;473677==FCMJMJJGA>=:878786868585859698:9:987778899::9;9;9<9<7<7<494958588888;795:26.7*7*:*:*:*:*;*;*;*;*:*:*8!=&?)8"58":*9)5->6AG`fRgH]8f71@A1=>.1?20>1B86H><]:>O,0U2.^;7[U;nhNsYns}zzz|{zgdRToBOm9Us?]|@^}A_=dBhAlEkHkHjLiKhQhQgEfDdCcBcDeFhKiLiOhNhNiOjNjNiKhJhHgGgFiHlKnMoRpSqTsVuX-1"-1"-0%,/$,.)-/*//-11/23.45046+9;0;=/=?1@B5EG:HJEMOJQRWTUZWVdXWe\Zr^\t`_gfmkvt|{ȋݐ⑐폍쌈戄℀Ձ}}}ȁ~Ł~ņćʼnNJȌnjǎŌÍ~yv|qymqthlqd\m`Xi]OfZLXeKXeK^`J^`Jj[Hj[HpYIqZJq[Fr\Gp_EudJv\AsY>S;[CTG\OPQRSHRIS?:=896746/6/5.5.7*6)7(5&8&8&8&9'6)6)4,4,2,2,6(6(8(9)<*>,@-@-=,;*6(2$B6K?D9@5@3:-8(:*<*8&9(:):):):*:*7)7)5(5(3'9-6,5+3*3*1*3,6/92<5=6;?7;28171:3<4<4<7?9A?C7;?=HFRMZU\X[WRLHB;8528282828274858596:7;8::7788888:9;9<9<8<8<7<7<484857578787;694;17-8+8+:+:+=+=+=+=+=+=+=+=+9%?+@-9&6%:)9-2&,+A@PZ]gOfD[9W6T0?A4CE8FHCJLGNOTQRWSR`TSaXVnZXp]\~dckitr{zƊ܏ᐏ풑艅ㅁց}}~|ǀ}Ā}Ą…ÇʼnNjƋƌÉ}|ztzotizrfjnbfm`Xj]Ug[MfZLXeKWdJ^`J^`Jj[Hj[HpYIqZJr\Gr\Gp_En]CqWH5061526370705.4-6)6)7(5&8&8&8&9'6)6)4,4,2,2,7)6(7'7':(<*?,@-=,;*7)0"J>QE=27,A4=06&8(>,;)7&8'8'9(9)9)7)6(5(4'3'8,4*3)2)4+5.92=6?8?8?84848394:4=3<3;2:5=7?=AHLTR`^jekfb^VRF@<6301.7171717163748596:7;8;;8888999;9;9<9<8<8<7<7<484857578787;694;17-8+7*9*9*<*<*<*;););););)8$>*>+7$5$;*7+-!)(FE^hYcKbAX8V6T>[DaLgIdIaD\nI@iD;TD5P@1AF2@E1;B07>,=5(;3&H-"E*N4#aG6njGcoyutrs|yj\uMI_8BX1F`1Qk)=@+?B-CF1FH:JL>MNIPQLSQTTRUVTUYWX][fcalkhtqzxʎЏݖ䕑擏䐍ދه˂Ɓ}|}~|zyv|p~vjlpdfo`Yl]Vl\Ok[NjZJiYI\aJ\aJa_Ja_JjZJk[KqZJr[KuZIv[Jz[FtU@}P9R;Q;[EWJ[NLGFA7:581,2-3-5/5/4.3+2*5(6);(7$9$9$9&:'8)8)6*6*3,3,<,:*9(8'9(;*<->/;.:-5+1'OGTL910(@5>35&6'A.@-9)9)9*:+:,:,9,9,7,6+4+3*1)1)0*4.83=8>:>:<9:755889<:=7<3817178<<@CDijolqnmhc^QLC>725074:782828271727275757687897868798;8;8<8<8>8>7=7=79687878::::>9<7<390;.8+;+;+=+<*=*=*=)=)=)=):(>,@,:&8'<+7-/%-.NOftR`I_CYAY@XK]M_X`T\WWRRYXDSR>MJ7HE2HF1IG2FF.CC+0=@+>A,AD/CF1GI;JL>MNIOPKRPSSQTVTUXVW[Yda_jgdpmvt~|ƉˋٔⓏ䒎㏌݋ه˂ƀ|~z~{~{~}~~{~wu{q{o}uiwpdfk_ak\UiZSk[NjZMjZJjZJ]bK]bKb`Kb`Kk[Kl\Lr[Ks\Lw\Kw\K{\Gz[FW@XAT>[EREREA<<7/2.13.4/4.5/4.3-1)1)5(6);(7$9$9$9&:'8)8)6*6*3,3,=-;+8'6%6%9(;,=.61)>3=24%2#=*@-9)9)9*:+9+:,9,:-8-8-6-4+3+3+2,60:5>9>:<8745288::DHMQVWyzurgdVQFA832-1,61<9@=:4939393727264756576788979798;9<8<8<8>7=7=7=8:797878::::>9<7=4:1PO;MJ7KH5IG2FD/AA)??'?B%DG*GM)W]9af>puMXeilkptzpi}XRcCAR2=+>=+>+>A.?C*AE,DG,FI.IK5LN8PNARPCTQJTQJYYAZZB[[O``TedllksrqzyǏΐҏя̌ɇ~{{x|w{v{x|y{}~}z~w{t|sxvmrujfpean`Uk]RlZLlZLmZKmZKmZImZIl\Ml\Mj]Mj]Mj]Mk^No^Np_Ox]Ly^MXHaQUHSFIA7?55-3+0)1*6/6/5/5/4+3*3'3'6&7'=&9"<$<$<$=%;';'9*9*6,6,B.?+:&7#5#8&:+=.:/9.4,;3QLXSG?80>2>28&1:$@*8*7)7)7)7*7*6+7,6-7.7/=5949485;8<:><=<:9552296;8<9;89::;ABMN]]hhrpkib]OJ=63,1,7296=:<:<:;3;3:2:28383737355555869697:7;8<8>8>8>7=7=6<8:799;8:<:<:?9=7?4<1>/8);*;*<)<)<(<(;';';&;&>,<*;*<+;,9*6-@7JN^bdrM[I]I]L^J\TZQW]VZSaP`OAP;AP;ML8KJ6O@+G8#:5:54JDZ+Bn1`OiTq\acdflrvyv{ihuYR_CAM59E-:G-BO5LZ9UcBXl;eyHe@jEjBmEiFiFcFbE`G`GfChEhGjIkLlMlOlOlPnRmSmSlQlQlNlNkJkJmJpMsOuQx\x\x\x\x\BA/BA/B@3CA4AA9AA9A@;A@;@B7?A6?B/BE2BF-DH/FI.HK0KM7MO9QOBSQDTQJURKZZB[[C[[O^^Ra`hhgolkts{yLjʉˊLjŃ~{zwvsuptosptqwsxt{v{vzuwrwptm}ulqnejnc_k`\k]Ri[PlZLm[Mn[Lo\Mo\Kn[Jl\Ml\Mj]Mk^Nk^Nl_Op_Oq`Py^Mz_NZJfVXKREE8D7:08.0(1)0)2+70705/4.4+3*4(4(6&6&;$9"<$<$<$=%;';'9*9*6,6,C/?+9%5!3!7%9*=.:/9.5-;3IDUPQIA9?3@4>,16 @*8*8*7)6(5(6)5*7,7.9091D;>;><><<;:97755859696859:?@LMZ[ggkkpnIGD?942+3,83A8>7=7=6<6<79688:79<:<:?9=7>3;0=.7(:):);(;(;':&:&9%:%:%>,8&8'<+;,5&5,KB\`fj[iN\J^H\I[GYPVNT[TZSbQbQ@O:@O:JI5GF2K<'C494?:AW(Xn?[J{jkmh`\_gjgcfuT[jILY=>K/8D,7C+9F,?L2HV5R`?Wk:fzIfAjEkCnFjGiFcFbE`G`GhEjGjIlKmNmNlOlOkOmQlRoUoToToQoQmLnMpMsPvRxT{_{_z^z^y]FC2FC2FD7FD7GD;GD;EE=EE=DD8DD8CF1DG2FI,GJ-IL-JM.NN4QQ7RQ=TS?VRFWSG\]5\]5[[?]]A^]Xcb]hgypovt|z~{}zwwsrnpknilglgnkolsmrlrmojohomfmne`i`[k_Qi]Ok[Kk[Kn[Jo\Kr]Lr]Ls\Ls\LxWPxWPq[Pq[Pk_Ol`PmbPncQz`O{aPWK`TOGG?83723,4-2'3(6'8)706/4-3,4*5+6)6)8&6$:":">">">$?%>'>';*;*9,9,F0A+9$5 26#8)=.9/9/3-4.<8NJXQIBB5D7F35"6C,@1?0=/;-:-:-:/<1>4A7@8E=A<@;=:<9:8:898988888;5:48473:8CAOOVVXVOMKG2.4.5/82=7@:E?B>@<:976;3;392928484748588887:696;6;7<7<8>8>7=7=7<7<7:697968:8:8>7<5>2;/=.8):(:(<(;';(;(;':&:&:&A.8%7%>,=.3$6-WNnrmqTaS`M_HZJUFQSRSRdRdR}oR|nQ@V?+N5!P7#ME!]U1Y|Bs\lgwr}qymbsT|OT_^zTnwHKU:CM2:D,7A)9B/;D1UT@WSGWSG[\4[\4ZZ>ZZ>[ZU_^Ydculk}qoxvzw}z~z|~}}zwtsonjlgjefagbheiflflfkf|idzjcjg`gi`[f]Xh\Ng[MjZJjZJn[Jp]Ls^Ms^Mt]Ms\LyXQyXQr\Qr\Ql`Pl`PncQodRz`O{aPXLZNIAB:3.504-706+7,8)9*6/5.3,2+4*5+7*7*8&6$8 :">">">$?%>'>';*;*9,9,F0A+9$426#8)=.9/9/4.0*3/IE[TNGC6G:K88%7 F/G8F7C5B4@3@3@5C8E;H>H@B:?:=896745353547688::=7<69573:8B@KKJJB@-+!+'2,93@:C=A;?9;7=9>=A@:2:292928484859699999<7:6;6;7<7<8>8>7=7=7<7<695868579797>7;4=1:.<-7(:(:(;':&;(:':&:&9%9%A.6#5#>,=.1"5,]Tw{ptN[UbN`FXFQBMONQPdRfTqT~pSE[D=S#1;#4>&;D1>G4VM>WN?XO@XO@YPAZQB[RC\SD]TE]TEcZKcZKbXLbXLcXReZTh\\maarelvipxku|oy~p}rtts}o|xkureom`ij]fcb]cb]c`Yb_X`]T_\S_[P_[Pa[Oa[Ob[Kd]Mg\Jh]Ki\Ii\Ik\Gk\Gl]Fl]Fm]Dm]DafOejStcQl[I|K=PBRHXNTIUJXFN/>/8+8+5,7.;1A7GG@HAE@B=;;5545789;8:88668293<4=5LBI?D7=08*5'6'8)<,@0A3<.:0>4>6@8;9;9797957687>7>7<7<8:8:9797:5:5:35.6/6/7384959587989:89;>:=9:89<;=)=(8+/=-7'3"1 3":)=.>/9,9,4+4+6,<2D9I>M?J6?7G=D:@3;.7)4&5&8)<,@0@2?1=3@6>6@8:8:8686857687>7>7<7<8:8:9797:5:5:37081818495:6:6989889899<8;9:9:=<=09+=+<*=+<*<);(:'9&8%8%@.?-6*4(0,@KX:HQ>BK8;A76<2:;+?@0@B5=?2:=2/>/>-8'3!15!;'>-?.;,=.7,4)2)6-=2E:OASEUFUF@==:96637395;6=89786249;5:5:58476767:7;8?:?:A4?2<.8*6'4%6&9)<+?.?0D5A4C6?7@8:7:7656567676<6<6:6:79799595:3:3:3:3:3:3;6;6;8;8::999:898;9<====A=@5=28-;+:*=,<+>+<)<(;'9'8&7%7%w8&x9'6(:,<5KDWV`_^_RSLJLJSMTN[Q\R_S`T`V`V]U]UYj3\m6cw-8'3!14 9%<+?.;,?08-5*0'2)6+<1F8K=O@PA:77452305184=8@;><><:<:<6;4925144556:7;8=8=8:-9,7)5'4%4%6&8(;*=,=.F7C6D7@8@8:796546556676<6<6:6:79799595:3:3:3:3:3;4;6;6;8:7998878787:8;==>>A=>:>58/7,4)7'9)<+;*=*;(;':&8&7%6$6$v7%u6$4&;-?8MFRQTSPQJKJHJHQKSM[Q]S`TaUaW`V]U]Ufw@sM]ozv`hDTk3N*=G/9C+6<.4:,6906909:*>?/?A4<>19<1;>3;A3:@2:H.GU;Qf;_tIcDmNrLtNpKoJmLmLlOkNpVpVqUqUnPmOlKlKlHmImGpJpJpJpLtPwVyXyYvVsUpR_NZIS|BNw=Nw=`WH`WH`WH`WH`WH`WH`WH`WH`WH`WH`WH^UF_VG_VG`WH`WHaXIbYJbYJcZKcZKcZKe^De^Df^Gf^Gf^Kf^Kf]Nf]Nf\Rf\Rf\Sh^Uh^Uh^Uh^Uh^Ug]Sf\Re[OdZNcZKbYJ\XLZVJXTHUQERNBPL@PM>PM>RO@SPAVP@YSCYTAZUB\WD^YF`[Gb]Ie^Kf_Lg`MhaNabRefVtbTq_QWN`W][ZXHH@@86:885747/6.9*8)=+?-B/D17*7*8+8+8+8+9+8*8*7)8)8)8)8)8)8)8)8)9)9)9)9)A2?0?-9'6"249$=(A,?.A0<-:+4)4)5)8,1@2A31504/2.112569:<==?>@;@7<3:1805053658886674638)7(7'6&6%6%8&:(:(<*:+C4B4D6@7A8<8;7757566776:6:686876768484:4:4;492:2:2;5;5;9:8;9:88989=:>;B?C@C=>8=27,7*5(8(:*=*<)<);(;':&9%8$6%6%y?+t:&x3#~9)A7NDQJPINIMHRKOHUKWM]P_RaSbTbWbW_V_VxWh|hewQHZ44E#/@3A'7E+?/?A4<>19<1;>3:@2:@2:H.FT:Pe:`uJdEnOsMuOqLpKoNoNmPlOpTpTpRpRoPnOkIkImInJnJpLqMrNsRwVz[{\x\rVkQgM\MWHPyAMv>Mv>bYJbYJbYJbYJbYJbYJbYJbYJbYJbYJbYJaXIaXIbYJbYJcZKcZKd[Ld[Le\Me\Me\Me^Df_Ef^Gg_Hh`Mh`Mh_Pg^Og]Sf\Rf\Si_Vi_Vi_Vh^Uh^Ug]Sg]Sg]Qg]Qg^Of]N`\P^ZN[WKWSGTPDQMAOL=OL=PM>PM>SM=UO?UP=WR?XS@ZUB\WC_ZFb[Hc\Ie^Ke^KabRcdTo]Om[MVMd[caa_LLCC;9<::7:7:280:+9*<*>,B/C06)6)7*7*8+8+9+8*8*7)8)8)8)8)8)8)8)8)9)9)9)9)B3?0>,9'6"336!:%?*?.=,9*9*6+7,7+8,:-;.=/=/59483625345667898:8:5:6;29181616585866221..+6'6'7'7'8'8'9':(9':(7(>/=/@2?6A8<8<8868666776:6:686876768484:4:4;48191:2:4:4;9:8;9:89:89=:>;A>@=?9938-3(5(5(9)9)<);(;(:':&9%8$7#5$5$~D0v<(v1!z5%>4LBNGLEJEMHUNPIUKVL[N]P_Q`RaVbWaXaX`qjpW[lBEW11C#4+<.<"2@&6B,8D.;A3:@2;>5:=4;<6;<689)=>.>@3;=08;0:=2:@29?19G-FT:Pe:`uJeFoPtNvPrMrMpOpOoRnQqUqUrTqSpQnOlJlJnJpLpLrNsOuQvUzY|]{\tXlPcI]C]NXIR{COx@PyAd[Ld[Ld[Ld[Ld[Ld[Ld[Ld[Ld[Ld[Ld[LcZKd[Ld[Ld[Le\Me\Mf]Nf]Nf]Ng^Og^Of_Ef_Eg_Hh`IiaLiaLjbOiaNiaNh`Mh_NjaPjbOiaNiaNh`Mh`Kh`Kh`IiaJibHibHd^Nc]M_YI[UEWQATN>OL;NK:MJ9MJ9MJ9OL;ON2>,:(:$6 67;"A(C-@*;+=-9,:-7-8.90;2>3?43>2=3<1:393959484837175;5;5;5;6<:=9<98320,,(:*:*<)<)=)<(<(<(:&:&7&:)9)>.=2A6>8>8;6;696:75656646474749393:3:3<3:1<5<5?8?8@;@;?>?>>=>=D)=(=)<(;':&9%8$6%6%~D0u;'r1x7%C6REUKPFODRGZNWK[MZL[M\N]Q^R^T`V`Za[bo~{kepPLY?>K13@,+8$%1#.:,/9.0:/4<17?46;<4::099/89)<=-=?2;=07:/9<19?19?18F,ES9Od9avKeFpQuOwQsNrMqPqPpSoRrQrQrQrQoMnLmInJpLrNsPuRvUxWy\{^z_w\oUfL]EW?`P[KU|ERyBSzCe\Me\Me\Me\Me\Me\Me\Me\Me\Me\Me\Me\Me\Mf]Nf]Nf]Ng^Og^Og^Oh_Ph_Ph_Pg`FhaGh`IiaJjbMjbMjbOjbOjbOjbOjaPjaPiaNiaNh`Mh`Mh`Kh`Kh`IiaJibHjcIe_Od^Na[K]WGYSCUO?PMQR@RSASTBTUCUVD[YL[YLaSH`RG|QJb[d`fbTVSUKP@E:?8=7553;/:.C+B*G*G*6(6(8)8)9*9*9*9*9*9*8)8)8)8)9)9)9)9)9)9)9)9)@4=1>,;);%8"658?&A+D.>.?/9,7*3)3)4+90>3B71<1<4=4=8>8>:>9=9=8<6<28394:6<8>;>8;7610.*+';+;+=*=*>*=)=)<(:&9%6%5$5%:*9.=2;5<6:5;6:7:7676775758585:4:4;4;4=4=4>7>7@9@9A>=>=A9?7>7:39/5+5(3&8(9)<*:(=(<'<(;':&9%7#7#5$5$x>*r8$t3!|;)H;VIWMRHNCPEWKXL\N[M[M[M\P]Q]S`V`Za[s~Vx[zbr~Z^iIHS36C)0=#.;'/<(/;-2>02<12<15=28@5=@7?B9?@8<=599/77-78(<=-=?2:08F,ES9Od9avKeFpQuOwQsNsNqPrQqTpSrQsRsRrQpNoMnJoKrNtPuRyVzY{Zz]y\uZoThN`FYAV>aQ\LV}FSzCT{Df]Nf]Nf]Nf]Nf]Nf]Nf]Nf]Nf]Nf]Nf]Nf]Ng^Og^Og^Og^Og^Oh_Ph_Ph_Ph_Ph_PiaNiaNjbOjbOjbOjbOjbOjbOjbOjbOjbOiaNiaLh`Kh`Ih`IhaGhaGhaEhaEibFibFf_Le^Kc\I`YF\WDXS@TOC:?67349180B-@+E&D%6'7(7(8):*:*:*:*:*:*9)9)9)9):):):):):):):):)?3=1=.:+=)9%868?%B)H/C0C0:.7+0&.$.&4,92=60:1;5=8@?B@CBBBBBCABAB455689=<>=?><;;6615-3+>+>+?,?,@,@,>+=*<'<'8&7%6&9)8,;/9/;1;4=6>9?:85858484:4:4;4;4=4=4>5@7C9C9C@=?*=)>+=*<);(:'9&7&7&6%6%w5%u3#y6&A1P@ZJYLSFPDSGYMZN\O[N[P[P\Q]R[U]W]X^YfnIemH^hFT^56?:5>97=98>:;@:>C=CE:DF;CD6?@2=;,:8)78(;<,<>1:08>07E+DR8Nc8`uJeFoPuOwQsNsNrQrQqTpSqMrNrNqMpLoKoKqMsRvUxW}\}`}`{_vZoUhNbJ^FZFZFbR]MV}FSzCSzCg^Og^Og^Og^Og^Og^Og^Og^Og^Og^Og^Og^Og^Og^Oh_Ph_Ph_Ph_Ph_Pi`Qi`Qi`QkcPkcPkcPjbOiaNiaNiaNh`Mh`MiaNiaNh`Mh`Kh`Kh`Ih`IhaGhaGhaEhaEhaEhaEg`Mf_Le^Kc\I_ZG\WDXS@UP=OL9MJ7KJ8HG5FG7FG7FI8FI8FJ9FJ9ELiRDMANBF@TNTUNOAF2<0<-;,?+;'956=#A(B)>+A.;/:.3)2(1)6.:3?83=5?9A;CAD@C@@==;<8978-./03487879854503.4,3+=*=*=*>+?+?+>+>+=(=(9'8&6&7'5)6*4*6,70;4>9@;85858484:4:4;4;4=4=4>5@7C9B8B;@9@:>8<9:79685:/8-6*4(4&5'8'9(:)8':&<(=*<);(:'9&8%7&6%~5$~5$u3#w5%~;+F6RBWGSFNANBTH]QXL[N[N\Q]R^S^S[U[UZUZU\d?T\7HR0?I';C+:B*9B18A05?63=42;62;66<8:@CHBGI>FH=DE7?@2=;,;9*67';<,<>19;.69.8;08>07=/7E+DR8Nc8`uJeFoPtNwQsNsNrQrQqTpSqMqMqMqMpLoKpLrNtSxWzY_c~ay]qUgM`F\D\D]I`LcS]MV}FRyBRyBh_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Ph_Pi`Qi`Qi`QmcYlbXkaWj`Vi_Sh^Rg]Qg]Qg^Og^Og^Mi`OiaNiaNiaLiaLiaLiaLh`Ih`Ih`Ih`Ih`Kh`Kg_Jf^Ic\I`YF[VBXS?RO+;(9!46="?(9"8%>+<0>281706/:3>8B<>E?FCGDHGFCBB<<6824.4,3+6/:3=5>6>3;0;/:.=.>/?-?-?-@.A,B-A-A-@-?,=*=*;*;*7(7(4)7,80>6C4>4@5@5B7D9E:D9D8=8:59584<-:+7(5&7&9(=,=,<*:(9(=,?,>+=*<)~;*}:)|9({8'z7&z7&z0#~4'=/G9PCQDNBJ>OAYKaUWKXMYNZR\T[V[V[VZUYTXSW_6LT+>F!7?6?"19;.69.8;08>07=/7E+DR8Nc8`uJdEoPtNvPsNsNqPrQqTpSpJpJpJpJoKoKoLrOuTyX{^ff~bw]mSbJZBXB[EbMfQdV^PW~IRyDRyDi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qj`Vj`Vj`Vj`Vj`Tj`Tj`Tj`TjaRjaRjaPjaPjbOjbOjbMjbMjbMjbMjbKjbKjbKjbKg_Jg_Jg_Jf^Ie^Kd]Ja\H\WCUR?PM:JK9HI7FI8DG6AE6@D5>E5?F6?G8?G8/B-B-3"3"5$6%6%6%7&8':)<+=,<+<+<+<+<+<+;*;*;*;*;*1'3)9+9+<)7$8 68; 9"F/?,=*5)4(1*6/:3@9E?HB@GAHDH?C:9324.4.5/2,1)6.5.5.4,3+5*5*7+7+:+:+<*<*=+=+?*@+?+@,@-@->+;(9(8'4%5&3(5*6.91:3;4:3:3<5=6?7@8@6?5?4>3?4G.=?2;=09<1;>39?15;-4B(DR8Pe:bwLfGpQtNuOqLqLpOrQqTqTpJqKqKrLrNrNsPuRyX}\bf}atXiOaG]E]E`JcMfQhSdV^PW~ISzESzEi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qj_]j_]j_]j_]j_[j_[j_Yj_Yj`Vj`Vj`Tj`TjaRjaRjaRjaRjaRjaRjaRjaRjaRjaRj_Kj_Kg_Jg_Jf`Je_Ia\H]XDVS@ROD6?E7?G8?G8>F7=E6DH:DH:?H5>G4BL3HR9RL2MG-nE/bLpam^^XZTLKGF??==>:;793718)9*:+;,:,:,:,:,:,;-;-;-;-;-;-;-;-;-;-;-;-;-=7=7A8?6@29+8#446!4 9%5&8)6+;0<5A:D?HCIFJGDEEFIED@@992=0=0@1=.=.@1@1?0>0=/?.>-A/@.B.B.<+=,=,>-?+@,A-A-@.@.?-?-=-=-:*:*8+:-:/<1<3=4<3=4>5@7B9C:D8D8D9C8E8F9G:C6A6<1:07-6.5-4.4.>-=,=.<-<,;+<+;*;,;,>-~;*|;){:(y:)y:)y:)x9(x9(v7&u6't5&}-$8/G=MCNBJ>L@PDTITIPGVMXRWQTNTNXT[WWTSPXT_[PY,PY,NY/P[1PZ7KU2AK08B'3?)5A+8C2?J9JSBV_N\dOX`KRV?IM6DG*?B%>? <=9:*<=-<>1:39?16<.5C)DR8Pe:cxMgHpQtNvPqLqLpOrQqTqTpJpJqKqKqMrNtSwVz]}`cdy_oUfM`G^G`IcLeNfOfOeV_PX}ITyESxDi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qj_]j_]j_]j_]j_[j_[j_Yj_Yj`Vj`Vj`Tj`TjaRjaRjaRjaRjaRjaRjaRjaRjaRjaRk`Lk`Lh`Kh`KgaKf`Jc^J_ZFXUBTQ>PO=LK9GJ9EH7BF7@D5>D6?E7>F7>F7=E6=E6AE7?C5:C0>G4CM4CM4IC)HB(pG1gQsdcT\Vb\WVNMBB??C?B>>882;,;,<-=.<.;-:,9+8*8*8*9+9+9+9+9+9+9+9+9+9+9+=7=7@7=4=/6(410108$6'<-?4F;HALELGLGIFHEABABEA@<=6700=/?.>-@.?-A-A-:):):);*<(=)=)>*=+=+<*@.=-=-:*9)6)7*7,8-8/8/6-7.90<3>5?6A5B6C8B7D7=0?2OCSHSHQHPGTNVPUOVP[W\XWTROVR]Y\e8aj=grHkvLgqNYc@FP59C(4@*:F0AL;VaP\eT`iX_gRW_JOSA$=>;<89);<,;=09;.9<1;>39?16<.5C)DR8Pe:cxMgHqRuOvPrMrMqPrQqTpSrLqKqKpJpLrNuTyX|_~acy]rXgM`G\C^GcLfOfOcLaJdU_PW|HSxDSxDi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qj^`j^`j^^j^^j_]j_]j_Yj_Yj`Wj`Wj`Vj`Vj`Tj`Tj`Tj`Tj`Vj`Vj`Vj`Vj`Vj`VlaMlaMk`Lk`LiaNh`Mf_Lb[H]XEYTATQ@OL;JK;GH8DF8BD6AE6AE6?E7>D6>D6=C5ECDBE?@:?4:/A/B0H4H4H5F3G5E3D4B2C1B0|C0{B/wD/wD/9*9*:+:+<,<,=-=-<+=,=,A0>->-;,;,9,:-:,<.2?4@5A4A4B4B4C6:-;.:-:-8+8,7+8.8.:1:1>/>/=.<-;,:+;+;+<,<,~<,};+{<-z;,x:+x:+w9*v8)s8*r7)q6(q6(:1A8J?LAK@GD6=C5$[M3\DkSbSH9MCaWba_^SUMOIKFH@C;>9+8*7)7)7)7)8*9+:,:,8+8>8A6@5B4D6G7K;J=TGOEPFLFLFHEGDEAB>@F;J=OBRHTJRKOHRNTPQOQOWU[Y^X_Ylcvmkjg{\htLS_7AO+C%=B$!78(:;+9;.79,8;006D*CQ7Od9bwLfGpQuOwQsNsNqPrQqTpSrNpLnJnJqPuTz]{^|`y]v\eKbI]D[D\EbKgPjPhNcI_EcU]OV{HRwDQvCi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QjaRjaRjaRjaRjaRjaRjaRjaRjaRjaRjaRk__k__k`^k`^k`Zk`ZkaWkaWkaUkaUkbSkbSkbSkbSkaUkaUkaWkaWkaXkaXkaXkaXncQncQmaQmaQkbQkbQibPg`Nd]M`YI]WGVP@RO>OL;KI:HF7EF6DE5CD4BC3@B4?A37.=6QJ]YfbabYZNRHLDKDKB8@6=3;1:0;1=3?5A7B8A8EE>E>E>LNLNNNMMPJOIQIRJSLVOVORKNKLIHEFCCAB@C@C@D?D?IFFCD>=7?2=0B1B1G4H5J7G4F5E4C3B2A2@1{@0z?/x@/x@/8-9.9.9.:.;/;-;-;-;-<-:+:+:+9,:-:,;-=/?1?2?2;1;1;/<0;.;.:-9,8+8+8*7)8)7(8*7)9+8*:,:,;.C-=B,06D*BP6Mb7`uJeFoPtNwQsNsNrQrQqTpSoLnKmLoNtUyZ|a{`y_sYoW]E]F]F]F`IeKhNiMgKdHbFdT^NWyGSuCSuCi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QjaRjaRjaRjaRjaRjaRjaRjaRjaRjaRjaRk__k__k`^k`^k`Zk`ZkaWkaWkaUkaUkbSkbSkbSkbSkaUkaUkaWkaWkaXkaXkaXkaXodRncQmaQmaQkbQlcRjcQibPf_Oc\L`ZJYSCURARO>MKI?H?KBKBLCKCKCLDLDKDLELELERTQSRRQQSMQKRJRJRKSLRKLEHEGDDAC@B@B@DADAFAGBLIGDD>=7@3>1C2B1E2F3H5E2E4C2B2A1@1~?0z?/z?/x@/x@/9.9.9.9.:.;/;-;-;-;-;,:+:+:+8+9,8*9+:,:,:-:-7-8.8,8,8+8+7*7*7*7*8*6(7(7(8*7)8*8*9+9+:-:-;-:,:,9+~9*}8)|7(|7({7*{7*{9+z8*y9-y9-x:-w9,r7)p5'o5)p6*s9-t:.HH=I;JC-)9<'89)9:*8:-68+7:/0B>VRPQ=>%&8987A@USljxxuufh]_[__cVORKLEF?CG@HAIBGAJDIDIDHDIEJFJFKGKGKGKGFJFJGIFHGGGGGDGDEDEDCBBA?A@B@AABBBAAC@B?B>A=JKDE@<:6>3=2A2?0C1C1D5A2@3?2=3;1;2;2;1;1<3<3;3;3;3;3<3<3=1=1=1=1=/=/=/=/=/~<.<,<,:+:+:+:+;/;/;0;0;.=0=/>0>/>/?0:+;+:*;,:+<,;+<-;,<,;+:,9+8,7+7+~6*{5){5){5+{5+y7+x6*w7+x8,x:/v8-q7+o5)n6)p8+s:/v=2M@L?K=JSDWHWLYNVPOIQOTRWRYTd[d[udTjYI^]HbaLCQ.AO,=M(>N)EW-Se;buHk~Qg}O^tFVk@Mb7GY30{K=LHRNDE9:./CD@?BAPNdbrruumodf^b]aTMPIKDE>CE>D=A;D>C>D?C?D@D@EAFBFBFBGC@D@DBDCEFFGGIFJGHGHGEDCBACBDBCBCCCAAA>>;=9;7HIAB>:84>3>3B3?0A/A/B3?0>1=0;1:0;2:1;1;1=4=4;3;3;3;3<3<3=1=1=1=1=/=/=/=/~<.~<.~;+}:*}8)}8)|7(|7(8,8,8-9.9,:-;-<.<-=.>/8)9)9):+9*<,;+;,:+;+;+9+8*8,7+~6*}5)z4(z4(z4*z4*y7+v4(u5)w7+w9.u7,p6*n4(n6)q9,u<1x?4OBM@K=JRAUFXIVKVKSMNHPNSQVQYTd[bYp_O`O?NM8NM8>L)BP-GW2O_:Wi?asIi|Ok~Q`vHSi;H]2EZ/@R,6H"2A$4C&G4=C79?38;4692:;+;<,9;.68+7:/04B(=K1F[0Vk@\x=hIoIsMqLsNrQsRrUqTmLoNrRuUw[vZtZmSgO`H\F[E^GaJdJfLgKfJgGgGfEgFaQ\~LUwEPr@Pr@i`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcRlcRldQldQldMldMleKleKleIleIleKleKldOldOldQldQlcTlcTlbVlbVnbTnbTkbSkbSkbSlcTmdUlcTkbSi`Qg`Pc\LaZJ]VFXQAUN>RK;PI9LF6JD4HB2F@03K)4L*L@(QE-A8TKKNBE,8/;9B=F=@;>ECQOa`lknmgfZ^SWOIKEGAD>B=C>E@FAC?@<>:B>A>B?B?C@B@CADBDBECEC?D?DAEBFFHHJIIIIHIFGADAD?D?D?D>C?@>?A>?<@;@;DF=?9742;4<5A5=1>0=/?22xB6SDPAO>N=S@VCXHYIUITHOIQKQOQOSOUQcWbVd_KSN:=K1XgFapOdvPdvP`vH]sEUm=Ld4E\.=T&7L%.C.<"2@&9D4;F603A'Yu:fGmGrLqLrMrQtSrUrUoOqQsUuWu[rXnVgO`L[GZE`KaJ`IbHdJeIgKhGgFeBc@aQ[}KTvDPr@Pr@i`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`Qi`QkbSkbSkbSkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcRlcRldQldQldMldMleKleKleIleIleKleKldOldOldQldQlcTlcTlbVlbVnbTnbTkbSkbSkbSlcTmdUlcTkbSi`Qg`Pe^Nb[K^WGZSCVO?SLC=C>E@GBHCD@@<=9C?B?B?C@DACADBECECFDFD>C>C@DAEDFFHFFEEBC@A:=AD>C=B;@:?<==>B?C@GBGBBD;=6420:3;4A5=1>0=/?2;.9.9.7/7/7171738494:5:3:3:3:3~;3~;3|<2|<2{=2{=2{=2w9.u:,v;-v;-w<.x=-x=-z<-z<-z<-y;,};/};/~8.~8.6)6)5(6)5%6&5&7(8(8(:):)<+;*=,<+~=+}<*8,7+7+~6*}5)|4({3'{3'y3)y3)y5*t0%s3)v6,v8-u7,o5*n4)n5*r9.u?3yC7UFQBP?O>TAXEYIYITHRFMGTNSQPNPLQM_S_Sb]IRM9=K1Qg9Nf6Kc3I`28O!2G *?+90>$7B2:E5;B;8?88<=7;<;<,<=-:02@&;I/CX-Rg@>F@B<>781907.=2=2A4?2@4@4}A6|@5~>4~>4;3;383837272<-<-<-<-;,;,;-:,:,:,:.9-9-9-9-9-~:/~:/~:/~:/~:/~:/~80~80}90}90}90}90}90}90|90|90|90|90|90|90y9/y9/y9/y9/x8.x8.w9.w9.w8/w8/w8/v7.t8.s7-r6,r6,q5+q5+p6+k1&o5*q7,m4)k2'n5*o6+m4)n5*w>3I>ULULRKRKPJPJMKNLNLOMRLTNVLVL_LbOrfLh\BPW6LS2HY5L]9iVd~Q^wMXqGUkDSiBRfANb=L[:FU4EO49C(7?(4<%58%69&:;+>?/CA4CA4A?3?=12:/2:/2:-3;.7;-8<.;=/<>0>A,?B-?E)U[?Zi@hwNpSvYsTuVrStUrQrQu]{cigu]jRbJ_G_G^F^F`HaIbJdLeMfNeMcKaI_G^F`PY{IQsAKm;Km;i`Qi`Qi`Qi`QjaRjaRjaRkbSkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTlcTlcTlcTr_Qs`RsaStbTrdWrdWoeYndXldWkcVicUhbTheTifUgdQc`Ma\F^YC\V>WQ9QK1LF,SH,LA%P:"ZD,yS@eRcX^SNIKFEESSMQMQJNIMGKFJDGCFCDCDINEJ?BC>D:B8C5E7G9G9H=I>EBFCBDBD>F>FBDBDBDBDDEDEDCEDEDEDEDDCDAC@B?B?@=@=?=?=@>@>GAC=A:;4;28/=2;0?2=0?3@4}A6|@5~>4~>4;3;383837272<-<-<-<-;,;,;-:,:,:,:.9-9-9-9-9-~:/~:/~:/~:/~:/~:/~80~80}90}90}90}90}90}90|90|90|90|90|90|90z:0y9/y9/y9/y9/x8.w9.w9.w8/w8/w8/v7.t8.s7-r6,r6,q5+q5+p6+k1&o5*q7,m4)k2'n5*o6+m4)m4)w>3I>ULULSLSLPJPJMKNLOMPNRLOIRHSI]JaNthNocI^eD]dCZkG^oKb|O^xKXqGRkAPf?Nd=Nb=K_:JY8ET3EO4:D)9A*5=&69&69&:;+>?/B@3B@3@>2><03;03;03;.3;.7;-8<.;=/<>0>A,?B->D(SY=Xg>fuLnQtWrStUqRtUsRsRv^{c~f{crZgO`H^F^F^F]E`HaIbJdLeMeMdLcKaI_G^F_OXzHOq?Jl:Jl:i`Qi`Qi`Qi`QjaRjaRjaRkbSkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTlcTlcTlcTtbTr`Rp`Sp`SpbWrdYqg[qg[nh\keYgcWgcWkhYol]ro^qn]qlYojWlfPe_I\V@VP:MP5EH-C?&EA(XG3aPiH9r@5uC8B<:@>DAGDD>?9<3B9C9D:E=F>FBFBEEEEBFBFCDCDCDCDCDDEDEDEFDFDFDECE@E@C?B>B=B=B=B=B=C>G@D=C;>6=39/;/8,0@2A4~@3~>2~>2;1;181818282<-<-<-;,;,;,;-:,:,:,:.9-9-9-~:/~:/~:/~:/~:/~:/~:/~:/}90}90}90}90}90}90|90|90|90|90|90|90z:0z:0z:0z:0x:/x:/x:/x:/w9.w9.u9/u9/t8.t8.s7-s7-r6,q5+p6+p6+o5*k1&n5*p7,m4)k2'm4)o6+j4(k5)t>2I=RIRIQJQJPKPKPLQMQNROTOOJTJUK{^L}`NsiPukRkrSmtUizXk|ZZpIVlEQgAKa;I]8H\7J[9IZ8HW:ET7EO6=G.;C,7?(6;'6;'9<+?1>?1==1;;/4;34;34<14<18;09<1;=/<>0=@+>A,>D(QW;Ud=crKjMqToPrSqRtUsRsRxazczcu^lUcL^G]F]F\E[D_H`IbKcLdMdMdMbK`I^G]F]MVxFNp>Hj8Hj8i`Qi`Qi`Qi`QjaRjaRjaRkbSkbSkbSkbSjaRjaRjaRjaRjaRjaRjaRjaRjaRjaRjaRkbSkbSkbSkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTlcTlcTlcTtbTr`Rn^Qm]Pl^SoaVoeYpfZmg[icWeaUfbVliZurc{xg|k|i{h}wavpZmgQf`JTW*RA-[:+W6'b0%i7,y82s2,~0,2.4/94=8C>JCPITMVOXVSQJIDC?=A?C@FCE?BG?FBGCFFFFCGCGCDCDCDCDCDDEDEDEECECECDBE@D?C?B>B=B=B=B=B=B=G@F?F>B:A7;1;/7+:-9,=/@2A4~@3~>2~>2;1;181818282<-<-;,;,;,;,:,:,:,:,:.9-9-9-~:/~:/~:/~:/~:/~:/~:/~:/}90}90}90}90}90}90{8/{8/{8/{8/{8/}:1{;1z:0z:0z:0y;0x:/x:/x:/x:/x:/t8.t8.t8.s7-s7-r6,r6,q5+p6+o5*o5*k1&n5*o6+l3(k2'm4)n5*i3'j4(t>2I=RIRIQJQJPKQLQMRNROSPUPTOZP[Q|_M{^LpfMsiPmtUovWfwUduSOe>Lb;G]7CY3BV1BV1EV4FW5GV9ET7GQ8@J1>F/:B+9>*7<(9<+;>-=>0<=/;;/::.5<45<45=25=28;09<1;=/<>0=@+=@+=C'NT8Ra:_nGg~JnQmNqRqRuVtSuTzcybu^mVeN^G\E\E\E[DZC_H`IaJbKcLcLcLaJ`I^G]F[}KUwELnH0AF0BG1CB.?>*D=+IB0SF6F9)J7)K8*O8*R;-W=0[A4bE7fI;jM?kN@SJWNWQYSPLMICDDEBBEEED?>?<@=B>C?EAEAFDFDEDEDCFCFDDDDDDDDEDFEGCGCGCFBG@F?F?E>D=D=EC;B9;2:.5)9+8*=.?0A2@1~?0~?0;/;/9/9/9090;,;,;,;,;-:,:,:,:,9+9-9-9-9-~:/~:/~:/~:/~:/~:/}:1}:1|90|90|90|90{8/{8/{8/{8/y9/y9/y9/{;1z<1y;0y;0y;0y;0x:/v:/v:/v:/v:/t8.t8.s7-s7-r6,r6,p6+o5*o5*o5*m4)i0%n5*o6+l3(j1&j4(k5)i3'i3's=1~HL2?M3BP6DR8FR:GS;IR=BK6@I4,9=,9=,:>/9=.8<-7;,6=66=65<45<48;29<3:@=@=C?D@EAEAFDFDEDEDCFCFDDDDDDDDEDEDFBFBFBFBG@F?E>E>D=D=ED5=17+;-:,>/?0A2@1~?0~?0;/;/9/9/9090;,;,;,;,:,:,:,9+9+9+9-9-9-9-~:/~:/~:/~:/~:/~:/}:1}:1|90|90|90|90{8/{8/{8/z7.x8.x8.x8.z:0y;0y;0y;0y;0x:/x:/v:/u9.u9.u9.s7-s7-s7-r6,r6,q5+o5*o5*n4)n4)m4)i0%m4)o6+l3(j1&j4(k5)h2&h2&r<0}G;OGOGPHRJRMSNTOUPWPWPZPXN^R]Qo\KiVE]XBa\F\eJYbGLZ@DR8?O2=M0:J-8H+8F,9G-G2;B09@.:>-:>-9=.8<-7;,6:+6=66=65<45<48;28;2:+G4:G3;H428>2;>3;>3D4%O?0kF=wRINIQLIMMQGLFK?EAG@BACBBBBDADAD?D?D?D?DFDFDFDFDDDDEDDCDCDCEAFBFAFAF>E=F=F=G=G=G=G=>8?9C;C;D;?6?2:-;-:,?0>/@0?/>.>.<-<-:-:-;-;-;-;-:,:,:,:,9+9+9-9-9-9-~:/~:/~:/~:/~:/~:/}:1}:1}:1}:1z:1z:1z:1y90y90y90x8/x8/w8/v7.v7.x90v:0v:0v:0v:0u9/u9/t:/t:/s9.s9.r7/q6.q6.q6.p5-o4,o4,n3+m4+l3*l3*i0'k5+m7-i3)g1'i3)j4*f2'f2'p<1{G+5>+6?,9B/-4=,3<+5;74:64:64:67:38;49;0:<1;>-D8@F:CF;DGDDJCECEDDDDEBEBE@E@D?D?DFDFDFDFDDCCDCDCDCDCEAEAFAE@F>E=F=E8?9C;B:E0;-?0>/@0?/>.>.<-<-:-:-;-;-:,:,:,:,:,9+9+9+9-~8,~8,9-~:/~:/~:/~:/~:/~:/}:1}:1}:1}:1z:1z:1z:1y90y90x8/x8/w7.v7.v7.v7.w8/u9/u9/u9/u9/t8.t8.s9.s9.r8-r8-q6.q6.p5-p5-o4,o4,n3+n3+l3*l3*l3*i0'k5+l6,i3)g1'i3)i3)e1&f2'o;0zF;LELEOIPJSKTLWOVNYPXO|\OyYLo\MlYJ`WF[RARSAQR@KS>FN9:F04@*1=)1=)1:'09&09&1:'3<)6?,8A.;D1G4=F3;D39B17@/5>-4=,3<+3953953953956926928:/9;0:=,;>-;A'DJ0HW0Ud=^uAiLmNuVwVzYxWvUt]lUaJZ}CX{AZ}C\E]F^G^G^G`I`I`I`I`I`I`I_H^G^G]FW{KPtDGk;Ae5@d6haQhaQhaQhaQibRibRibRjcSjcSjcSjcSibRibRibRibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTlcTlcTlcTh`UiaVkbYlcZie\kg^qni~{vɱvkqeWcWIQP>IH6>F17;>7<=8<=86>18@3E;2H>5c:6qHDQSbd_dZ_ORORLMMNKIKIHEGDDAC@A?@>DFDFDFDFDFCECECECBCBCBDCEAD@E?E?F2?0:+<,=-?/>.?-?-=,=,;,;,<-<-:,:,:,:,9+9+9-9-~8,~8,}9.~:/~:/~:/}:1}:1}:1}:1}:1}:1}:1}:1y:1y:1y:1x90x90w8/u9/t8.t8.s7-s7-t8.s9.s9.s9.s9.q8-q8-q8-p7,p7,p7,p7.o6-o6-o6-n5,m4+m4+l3*j4*i3)i3)g1'j6+k7,h4)e1&g3(h4)c1&c1&l:/wE:KELFNIOJTKULYNXMy\Nx[Mn^Oo_Pd^N^XHSVEORAIP@EL<>F78@13;,08)36-36-06,06,/5+/5+06*28,3;.5=06>/*0=)1751751731735725727809:2:<.;=/:?(AF/ES/Sa=\rAh~MmPuXwXyZvUsRmXfQ\GWzBWzBZ}E\G\G\G]H^I_J_J_J_J_J_J_J^I^I]H]HWxMPqFGh=Ab7@a6haQhaQhaQhaQibRibRibRjcSjcSjcSjcSibRibRibRibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTlcTlcTlcTldYldYlcZmd[mi`uqh~yƼԼv|pbcbPUTBEM8@H3:G3?L8>M:=L9.?-?-=,=,;,;,<-<-:,:,:,:,9+9+9-~8,~8,~8,}9.~:/~:/~:/}:1}:1}:1}:1}:1}:1}:1}:1y:1y:1y:1x90x90w8/t8.t8.s7-s7-s7-s7-r8-r8-r8-r8-p7,p7,p7,o6+o6+o6+o6-o6-o6-n5,n5,m4+l3*l3*i3)i3)i3)g1'j6+k7,g3(e1&g3(g3(b0%b0%l:/vD9KELFNIOJTKULXMWLx[MvYKl\MiYJ\VFTN>IL;GJ9BI9I8>I8*/53/53/51062350461780891:<.;=/:?(>C,BP,Q_;[q@g}LlOuXvWwXsRpOfQ`KX{CTw?VyAZ}E[~FZ}EZ}E[~F]H_J_J_J_J_J^I^I^I]H]H]HUvKNoDEf;?`5>_4haQhaQhaQhaQibRibRibRjcSjcSjcSjcSibRibRibRibRibRibRibRibRibRibRibRkbSkbSkbSkbSkbSkbSkbSkbSkbSkbSkbSlcTlcTlcTlcTlcTlcTlcTlcTlcTlcTlcTnjami`lgamhbpoj{zuȼټȫrzoYg\FSQ:KI2DH1CG0CF1CF1FD7FD7HA9G@8I;:H:9J79J793>66A9?>9;:5D/,H30h<;TSddqqsoc_]Z]ZWSVRNMMLFHEG@D?CDGDGCGCGCECEBEADADADAACCCBCBC?B>D>D>E>E>F?F?@;?:A:@9C;B:E;?5=06)6(;->/=.>->-=,=,=*=*=+=+:.:.:.:.9-9-9-~8,}9.}9.}9.~:/}:1}:1}:1}:1}:1}:1{;2{;2{;2{;2w;1w;1w;1v:0u;0t:/s9.s9.r8-r8-p7,q8-q8-q8-n8,n8,n8,m7+m7+m7+m7+m7+o6/o6/m6/l5.l5.k4-j3,j3,h3+h3+h3+f1)j5-k6.e3*c1(e3*e3*b0'b0'j:0uE;KGLHPKQLVMVM}[O{YMo]Om[Mb_NWTCKO>BF5;C4108+.6)39/7=355366467267246135005.05.17-28.19,8@38C3;F6=J9>K:\8jcSjcSjcSjcSjcSjcSjcSjcSjcSjcSjcSjcSjcSjcSjcSjcSjcSjcSjcSjcSjcSjcSkbSkbSkbSkbSlcTlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUhd[fbYje_wrlĶ̷kljSSQ:?C,DH1CF1CF1FD7FD7G@8C<4B43B43H57L9;6A97B:>=8<;6I41O:7sGFedܜт~spfcWSTPLKLKEGEGCGEIEHHKGKAE;=9;?BFIGJ@C99@@A@A@B>B>D>C=D=C4>18+9+<.?0>/?.>-=,=,<)=*<*<*9-9-9-9-~8,~8,~8,}7+|8-|8-|8-|8-{8/|90|90|90|90|90z:1z:1z:1z:1y=3y=3x<2w;1u;0t:/s9.r8-r8-q7,p7,o6+o6+o6+m7+m7+m7+m7+m7+m7+m7+m7+j1*m4-n70p92p92n70j3,h1*f1)g2*h3+d/'i4,k6.d2)_-$_-$a/&`.%a/&h8.rB8LHMIPKOJQHRI|ZN~\Pn\NdRDRO>GD3AE4?C2:B37?05=04.6C2:G6:I6:I68G25D/0B,.@*+1/+1/,2.,2.02-24/56.7809;-;=/:?)7<&>EA@NCAYNLsa]{ʹ㾵úઠh`\TTQZWSVORAH;BCCEEFGHIFHDFAC@B>A>A>A>A>??@A@A@B>A=B=A4=17+:,<.?0>/?.>-=,=,<+=,=,=,9-9-9-9-~8,~8,}9.|8-|8-|8-{8/|90|90|90|90|90z:1z:1z:1z:1z:1z:1v=4v=4u<3u<3t;2s:1r90q8/n8.n8.m7-m7-l8-l8-l8-l8-l8-l8-j8-j8-j8-j8-j3,l5.n70p92o:2m80j5-h3+g2*g2*e3*b0'f4+f4+`0&]-#_/%a1'^.$^.$g7-qA7KGNJUNUN~XO|VMq[NnXK]VFSL06C29F59H5:I66G44E22D.0B,.40-3/-4-,3,02-13.34,56.8:-::U68R5icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSkbSkbSkbSkbSlcTlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUdc^kjeyzuؼ̰ycqtUSV7OO5HH.GB.FA-K?3K?3N;5M:4Q99R::::8??=KGFTPOdYWtig~zʱ횒~v_\ROEHEHAHBIIIFFCDEFHJHJBD=?:==@BE=@=>>?@?A@B>A=B=A28,;-<.?0>/?.>-=,=,<+=,=,=,9-9-9-9-~8,~8,}9.|8-|8-|8-{8/}:1}:1}:1}:1}:1{;2{;2{;2{;2{;2{;2u<3u<3t;2t;2s:1r90q8/p7.m7-m7-m7-m7-l8-l8-l8-l8-l8-l8-j8-j8-j8-j8-m6/m6/n70o81n91m80l7/j5-h3+g2*d2)c1(d2)b0']-#]-#a1'b2(^.$]-#f6,qA7HDMIUNWPYPySJiSFbL?OH8F?/7;*9=,4?/4?/2>02>02<12<15;15;17:37:388688677577557457446135016/16//7,08-/:,2=/4A07D38G49H56G45F34F03E/284173/6/-4-/1,/1,12*34,68+8:-8=)8=)Y:5P13M0icSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSicSkbSkbSkbSkbSlcTlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUmdUmdUneVneVneVneVneVbdcnpoׯȠwj`lDY`>LS1DG,BE*GD1IF3LD9JB7J@7I?6C9:LBC\RQlba|trùوa]DFEGIPSZYUSOKFFAC@EBFEGFEEDDAC=?=?>@@?@?@?A@A?A?B=AB1=0?/>.=-=-<,=-=,=,9-9-~:/~:/}9.}9.}9.|8-{8/{8/{8/}:1}:1}:1{;2{;2{;2{;2{;2{;2z;4z;4r<2q;1q;1p:0o9/o9/n8.m7-k7,k7,k7,l8-j8-j8-j8-j8-i9-i9-i9-i9-i9-i9-n91m80m80l7/k90k90k90i7.g5,d2)b2(d4*c3)`0&[,"].$c4*b3)\-#[,"g8.uFOC7A?2;9,17)39+0;+1<,1<.2=/4<15=25;15;17:37:379679668368368357238127018007/08-08-/:,1<.2?.5B16D37E48G48G48G48G46=54;3291.5-/2)-0'/1&13(35(68+6;'7<(5J@AXNOndczyÿ救qs^`GN=DSOSOOJJEB?A>EDKJJJEE=?<><>=??>@?@?@?A?A?B=B=>9>9B;B;E?C=E<@7?5:0<1;0>1=0?/>.=-=-<,=-=,=,9-9-~:/~:/}9.}9.}9.|8-{8/{8/{8/~;2~;2~;2|<3|<3{;2{;2{;2{;2z;4z;4p:0p:0o9/o9/n8.n8.m7-l6,k7,j6+j6+k7,i7,i7,i7,i7,h8,h8,h8,h8,h8,h8,o:2m80l7/j5-i7.j8/k90j8/g5,d2)a1'e5+c3)`0&].$_0&c4*a2(Z+![,"k<2|MCXTWSyVPrOIbJ@YA7J>2F:.=;.;9,4:,17).9)/:*1<.2=/5=25=26<25;169269279679668368368357238138118018019.08-.9+/:,0=,2?.3A06D37F39H5:I6;J7:A98?74;307//2)-0'.0%/1&24'46)5:&5:&;H,MZ>]qLn]wf~mwfn]_NU~DVtBUsATr@Sq?Sq?Tr@UsAVtBVtBWuCWuCWuCZxF]{I]{I]{I\zH^|J_}K^|JZxFVtBM`LDWC7J6.A-+>*gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSkbSkbSkbSkbSlcTlcTlcTmdUmdUmdUmdUmdUmdUmdUmdUneVneVneVofWofWofWofWimpz~ӭtefmKQW;GM1EJ4GL6EL@=?>@?@=A>B?B?C?C?C?C?>9?:C=C=FAD?E>@9@7<3=3;1>3=2=1<0=/=/~<.=/217+19,2:-3;.4?>@=A>B?B?C?C?B>B>>9?:C=D>E@B=C<>7?6<3>4;1>3=2=1<0=/=/~<.=/K:3@6->4+;7,<8-8:-9;.6<039-3;.3;.4F7Qn>Qn>Qn>Pm=Qn>Qn>Ro?Sp@VsCYvF\yI]zJ]zJ^{K`}M`}M\yIUrBPm=DRE;ID?C?D@D>D>D>D>D>C=@;A7;4=6:3>5=4=3<2<1<1~<0=1=1=1~:/~:/~:/~:/}9.}9.|90{8/{8/{8/y90|<3|<3{;2{;2z:1y:3x92x92x92w81w81k90k90j8/j8/j8/i7.i7.i7.g7-g7-g7-g7-f7-f7-f7-f7-f7-f7-d8-d8-d8-d8-i70h6/g5.g5.f5.g6/h70h70g6/f5.e6.a2*d5-d5-^2)[/&^2)`4+`4+d8/qE<~RIOLEHE>?<596/66.88089189158-47,36+69.7:/7:/7:/7:/69.69.68-57,46+46+19,19,19,19,19,19,19,19,19,19,19,08+08+08+.9+.9+/:*1<,3>.5@07B28C3Pm?Pm?Ol>Nk=Nk=Ol>Pm?Qn@VsEXuG[xJ]zL]zL^{M`}O_|NZwIQn@Kh:@JB7A9,6.$.&#,'gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSkbSkbSkbSkbSlcTlcTlcTmdUmdUmdUmdUmdUmdUmdUneVneVofWofWpgXpgXqhYqhYbioipvw~ѴƩklkVYXCMQ@KO>KSFQYLUaWYe[ѼzfZFN>SCRDOAG=J@JDF@D?D?D@D@D>D>C=C=B5=4=3<2<1<1~<0=1=1=1~:/~:/~:/~:/}9.}9.|90{8/{8/{8/y90{;2{;2{;2z:1z:1x92w81w81v70v70v70k90j8/j8/j8/j8/j8/i7.i7.h8.h8.h8.g7-f7-f7-f7-f7-f7-f7-d8-d8-d8-d8-h6/h6/i70i70h70h70h70h70i81j92j;3d5-h91h91`4+^2)c7.l@7oC:pD;sG>xLCB?8=:385.63,77/::29:278025*14)14)69.69.58-58-47,47,47,46+46+46+46+08+08+08+08+08+08+08+08+08+08+08+08+08+08+.9+.9+.9)/:*0;+2=-3>.4?/:C0:C0:C29B1;?09=.8:-57*35'13%/3$15&e9Jg9Li;Nk=Ol>Ol>Nk=MjPm?UrDXuGZwI\yK]zL^{M_|N]zLWtFMjE=E=D:<884:4:4=8:5=7<6=5<4<3<3~;2<3=1=1~:/~:/~:/~:/}9.}9.|90{8/{8/{8/y90{;2z:1z:1y:3x92w81w81v70u6/u6/u6/k90k90j8/j8/j8/j8/i9/h8.h8.h8.h8.g7-f7-f7-f7-f7-d8-d8-d8-d8-d8-d8-f5.g6/i81j92j92i81i81i81j;3m>6n?7j;3l@7k?6d8/b6-l@7{OFVM}RIvKBrG>6=53:207/1805:37<55:316/14+36-58/47.57,46+35*35*24)35*35(46)55)66*-8(-8(-8(-8(-8(-8(-8(-8(/7(08)08)19*08)08)08+/7*/7*08+08+19,2:-2:-8A,9B-:C0;D1>B1=A0;=/8:,46(13%/3$26'=I5T`Lcu[l~dfb`{\RtOJlGAg>=c:He7Jg9MjTqCWtFYvH[xJ\yK]zL^{M[xJTqCJg9B_18><175'-+"(&"(&gdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSgdSkbSkbSkbSkbSlcTlcTlcTmdUmdUmdUmdUmdUmdUmdUneVneVofWpgXpgXqhYqhYriZipxjqyqz˹ȱx~rdl`R][O\ZN^c\kpivxȼʹܑ|bMK;QAREM@?6JAH@H@F@F@F>E=DZQbY[RxMDoD;6=54;32913:26;46;4270/4-14+58/:=436-35*24)13(13(13(13(24'46)66*66*,7',7',7'-8(-8(-8(-8(-8(/7(/7(/7(19*19*08)08+/7*/7*/7*/7*/7*/7*08+7@+8A,:C0J6T`LasYhz``{\YtULnIFhC?e<=c:He7If8Li;Nk=Nk=Li;Kh:Jg9Kh:Mj,ES:ES9FT:Ic>Jd?Ke@Ke@Ke>Jd=JeNi@OjAToFWrIZuL\vQ]wR^xU]wTXqSNgIAZ<7P2).2',0%*.$)-#(,heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheTheThdXhdXkd\kd\lc\md]meZmeZmfThaOidNmhRmlXmlXii_ff\ghjqrtܽұjirU[dGXdLcoWpl|̙jcQJ>6QIH=E:D:H>J?D9=3;1A8G>J2J2M7L6M8I4H4D0F4E3G6D3D7C6@4?3;2:18/8/6/6/~:1~:1~:1}90}90|8/z7.z7.y6-y6-w7-v6,w7-w7-w9.w9.v8-v8-t6+s5*r4)q3(h91h91h91h91h70h70h70g6/g6/g6/g6/d3,f4-g5.h6/i70i70j81i70i70i70h6/j3.k4/m61n72m80n91k;/k;/j?/k@0hC3hC3iL:iL:bO>p]Lyn\tbnvro^IF54:04:04:039/39/39/39/28.28.28.28.17-17-17-17-06,06,06,/5+/5+/5+/5+/4./4./4./4./4./4./4./4./4./4./4.05/05//4./4..3-.3-.3-/4./4.05/05/.91/:21=33?55A77C97C76B65A34@24A/3@.Jd?Ke@Ke@Ke>Jd=Id;Id;JeSnEVqHZuL\vQ]wR]wT[uRVoQKdF>W94M/).2(-1&+/$)-#(,heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheTheThdXhdXkd\kd\lc\md]meZmeZmfTleSlgQmhRlkWlkWii_ii_mnp|}׸̬ikqW^dJ^fQjr]xs箣~sXKH;J:QAN?K1k?2iB1iB1fE4gF5jQ=lS?fUCsbP{s`|iuxmn\DE339/39/39/39/28.28.28.28.17-17-17-17-17-17-17-06,06,06,/5+/5+/5+/5+/4./4./4./4./4./4./4./4./4./4./4./4./4./4..3-.3-.3-.3-.3-/4./4./4.+6.,7/.:00<22>44@65A56B66B46B46C26C2/=1J>WMXNKB>5D3F5J;J;L=F7E6@1B7C8G=A7C9B8A8@7>6=5<3<3:3:3z;2z;2z;2y:1y:1x90x90w8/u9/u9/u9/t8.s9.s9.s9.s9.q8-q8-p7,o6+n5*m4)j81j81j81j81j81i70i70i70i70h6/h6/g5.g5.g5.g5.g5.h6/i70j81k92l:3l:3m;4m;4k:3j92k;1l<2k?2mA4jC2jC2fE4hG6kR>oVBjYGudR~vcp{vghV?@.39/28.28.28.28.28.17-17-17-17-06,17-17-17-17-06,06,06,/5+/5+/5+/5+/4./4./4./4./4./4./4./4./4./4./4./4./4..3-.3--2,-2,-2,.3-.3-/4./4.)4,*5-+7--9//;10<22>24@46B47C57D37D3L59G08F-;I0AO6ES:F`=Hb?Ic@KeBKe@Ic>Ga:F`9E`7E`7E_8PjCTnGYsL\vS]wT[tTXqQOhKB[>4M0*C&).2(-1&+/%*.%*.heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheTheThdXhdXkd\kd\lc\md]meZmeZlgTniVljSljSlkWmlXkmbqsh{дƪ|vt¼ȫvgSL9M:R@ZHSFM@G;F:>6A9F>G?H@B:>994<8=9C@>;@>?=A<@;{@4s=3s=3s=3r<2r<2q=2p<1p<1o;0o;0o;0m;0l:/l:/k9.j8-j8-h8,h8,n72n72m61m61m61m61k60k60k60k60i70k92j92i81h70g6/f7/f7/g80h91h91i:2h@6g?5e=3e=3d>1f@3gC3iE5fG3eF2aH4bI5eS=jXBh]IqfR|wcs{o[`L6;'28.28.28.28.17-17-17-06,06,06,06,17-17-17-17-06,06,06,/5+/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3--2,-2,-2,-2,-2,.3-.3-.3-)4,)4,*5-*5-,8.-9//;/2>24@25A36C26C29F4K7;H47E.3A*3A*7E.=K4AO8EY=G[?J_@LaBLa@La@J_>I^=H^:H^:H^:RhDWlK\qP`uVavW^rWYmROcJAU<2E/(;%(-0',/%*-$),$),heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheTheThdXhdXkd\kd\lc\md]meZmeZlgTmhUkiRljSmlXonZoqfuwlѵǫĻκŖhUZGSAQ?D7A4D8L@=5?7E=F>G?A9>994<8=9B?>;@>@>A<@;{@4t>4s=3s=3s=3r<2q=2q=2q=2p<1p<1o;0m;0l:/l:/k9.k9.j8-i9-i9-n72n72n72n72m61m61l71k60k60k60i70n<5l;4k:3i81h70f7/f7/f7/g80h91h91h@6g?5f>4f>4f@3hB5hD4iE5fG3eF2aH4bI5cQ;jXBj_KqfR|wcswvxcOT@27#28.28.28.17-17-17-06,06,06,06,06,17-17-17-17-06,06,06,/5+/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3--2,-2,,1+,1+,1+-2,-2,.3-.3-*5-*5-)4,)4,*6,+7-,8,/;/1=/3?14A03@/5B07D28E16C/3A*0>'0>'3A*8F/J_>J_>J_>I^=I_;I_;I_;RhDWlK]rQavWavW^rWWkPL`G>R9.A+$7!&+.%*-$),#(+#(+heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheTheTjdXjdXkd\kd\lc\md]meZmeZlgTlgTkiRljSlnYoq\pshvynҹɳ½ſѱjTAM:P?ZITDN>=6@9B=D?D@?;<<888:8:<=:;??>>A??=wB>wB>pC=pC=mE=mE=q?6q?6q?6q?6p>5p>5o?5o?5o?5o?5o?5n>4m>4l=3l=3k<2h<1h<1g;0g;0g;0g;0q62q62q62q62p62o51m61m61l71k60i70l:3j;3i:2f:1e90d90d90c;1d<2e=3e=3_C5`D6`D6aE7bG6cH7bI5cJ6`J3`J3[K4]M6]S:f\CidNpkUwycrpdlUBK609$28.28.28.28.17-17-17-06,06,06,06,17-17-17-17-06,06,06,/5+/5+/5+/5+.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3--2,-2,-2,,1+,1+,1+,1+,1+-2,-2,-2,,6.,6.+5-*4,*4+*4++5,-7./9.0:/1<.0;-2=-4?/6A05@/3>-1<+1=)3?+6B.8D0;M5=O7AS9DVI\@I\>J]?K^@L_AL_ASfHXkO_rVcu[btZ^pZVhRK\I,#4"&+.%*-#(+"'*"'*heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheTheTjdXjdXkd\kd\lc\md]meZmeZlgTlgTkiRmkTlnYoq\pshuxmռͷθɶŲ÷ǻյ{haNVEXGQAJ:?8@9B=B=C?@<>>:::<8:;<;>A?@>xC?wB>pC=pC=mE=mE=q?6q?6q?6q?6q?6q?6o?5o?5o?5o?5o?5p@6n?5m>4l=3k<2i=2h<1h<1h<1h<1h<1r73r73q62q62p62p62m61m61l71l71j81i70g80g80e90f:1e:1f;2e=3f>4g?5h@6^B4`D6cG9fJD@@<>;:7:8;9=;<:@;?:yB;xA:qE6l=5i=4i=4i=4i=4j>5j>5s63s63r73q62p62p62n72m61j81j81h91f7/c8/d90b<1c=2c?3d@4cA5cA5cC6cC6UF3YJ7_P=cTAeVAcT?`Q:]N7ZN4[O5YR8]V'6D-39/39/39/39/28.28.28.28.17-17-17-17-17-17-17-06,06,06,/5+/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,,1+,1+,1++0*+0*+0*+0*+0*,1+,1+,1+,6.+5-+5-*4,*4,*4,*4++5,,6+,6+-7,,6+-8*0;-3>.5@06A16A16A15@04?.4?.3@,5B.9F2;8:8;9=;<:@;?:yB;xA:qE6j>5j>5j>5j>5k?6k?6s63s63r73r73p62p62n72m61j81j81h91g80e:1f;2d>3e?4d@4d@4b@4b@4`@3`@3UF3[L9cTAiZGj[FgXCbS<^O8\P6]Q7\U;^W=XT9a]BlnVsu]v{dy~g]iQ6B*)7 9G04:04:04:039/39/39/39/28.28.28.28.17-17-17-17-06,06,06,/5+/5+/5+/5+-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,,1+,1++0*+0**/)*/)*/)+0*+0*,1+,1+*4,*4,*4,*4,*4,+5-+5,,6-,6+,6+-7,,6+-8*/:,2=-5@07B28C38C37B25@/5@/0=)2?+5B.8E1;I2=K4?M4CQ8FT;JX?LZAR`GXfO_mVbo[`mYYfTP]KDPB7C5)5'!-*00(..&,,%++$**heVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVheVjdTjdTjdXjdXkd\kd\lc\md]lfZlfZjgTolYmmUmmUhmWglVdl_goboyxҼsXYBW@T?S>Q>S@QBN?H=A6=4=4@5?4?6>5}A6|@5uD5uD5qF6qF6s>:s>:s>:s>:s>:s>:s>:s>:q>:q>:q>:tA=rA8m>8n?9q73q73o83o83m82m82j92i81f:1f:1c;1d<2c?3d@4bB5bB5_C5^B4\B3[A2XA1W@0NI3TO9^YCe`JhbJd^F^X>YS9XS6ZU8ZY=YXJXAQ_HWdP]jVan\^kYWcUNZLBNB5A5(4* ,"+1/*0.(.,&,*%+)heVheVheVheVheVheVheVheVheVheVheVifWifWifWifWifWifWifWifWifWifWifWkeUkeUkeYkeYle]le]md]ne^mg[mg[khUqn[nnVmmUjoYlq[jreksfnxw}οoXcLT?O:S@WDRCI:E:H=MD<3>3<1;28/u9.t8-o>/rA2rG7uJ:r=9r=9s>:s>:t?;u@tA=s@TS7XW;ZZ>ddHpt[{fr|c\fM?K3/;#-;$2@)5;15;15;14:04:04:039/39/39/39/39/39/39/39/28.28.28.17-17-06,06,06,16016005/05/05/05//4./4./4./4./4.,1+,1+,1+,1+,1+,1+,1+,1+,1++0*+0*.5..5..5.-4--4--4--4,-4,.5-.5-/6.*1),4).6+19.4<17?2:B5=E8?G:@H;AI<6C25B13@.1>,0=)0=)3A*8F/?M6ES*l<(t=8t=8t=8t=8t=8s<7q<6p;5p;5p;5n<5r@9r@9r@9q?8q?8p?8o>7o>7o>7n=6n=6k:3k:3k<4l=5j>5j>5g?5g?5d@4d@4aA4dD7]A3]A3^I8`K:WD3M:)H9&H9&E6#A2LP7KO6IK3FH0EH-JM2WW;``DbcD_`AZZ>XX<[^AfiLqw]w}cmu]V^FE=@G?AH@8E47D36C24A02?-1>,2?+6C/;I2AO8DQ=LYEP]IVcOZgVYfUR^PGSE2>4,8.)5+*0,)/+)/+(.*'-)heVheVheVheVheVheVheVheVheVheVheVifWifWifWifWifWifWifWifWifWifWifWkeUkeUkeYkeYmd]md]md]ne^mg[mg[khUolYkmUjlTjoYmr\itfkvhp|z̝}dfMS=K5L8UA[HTAP?I8D3=,w<*v;)s>,u@.tD0uE1v?:u>9t=8v?:xA7p>7p>7o>7n=6n=6n=6n=6m<5m<5m<5m>6m>6l@7l@7iA7h@6fB6eA5bB5iI<_C5\@2]H7`K:XE4M:)F7$F7$G8%F7$FJ1FJ1FH0CE-@C(BE*KK/VV:^_@cdEddHZZ>`cFloRtz`sy_bjRLT<6B*/;#2@)9G07=37=37=37=37=36<26<26<25;15;15;16<26<26<26<25;15;15;14:04:04:04:0382382382271271271271160160160160.3-.3-.3-.3--2,-2,,1+,1++0*+0*+0*)0))0))0)(/((/((/()0))0)*1*+2++2+/6/.5--4,-4,.5-07/3:28?74@6.:0+7-,2.+1-+1-*0,)/+heVheVheVheVheVheVheVheVheVheVheVifWifWifWifWifWifWifWifWifWifWifWkeUkeUldYldYmd]md]md]ne^mg[mg[jiUnmYimTimThpYks\iugjvho~{ѹĨ|d`HT=W@\E_HXCO:~G2w@+s?*s?*tA.vC0tD0uE1q?6o=4m;2o=4sA8tB9qA7n>4o?5sC9wH>m>4m>4m>4m>4m>4j>3j>3j>3j>3j>3j>3eA5fB6fB6fB6dD7dD7bE7aD6_E6^D5[F5bMG,@I.@I.>G,;A%:@$AD'KN1X[G29?58>48>48>48>48>47=37=37=37=36<28>48>48>47=37=37=37=37=36<26<26<25:45:449349349349338238238238238205/05/05//4..3--2,-2,,1++0*+0*+0*).().().().().().().(*/)+0*,1+,1+16005/.3-,1+,1+-2,05/5:4;@:?D>BGA?L;?L;>K:uC:p>5p>5sA8sA8n>4h8.f6,h8.k<2l=3l=3l=3l=3l=3j>3j>3i=2i=2i=2i=2eA5eA5eA5eA5cC6cC6`C5`C5]C4]C4YD3_J9TC1SB0^Q>l_Lh`K[S>MG1IC-KF0MH2G,?H->G,A$FI,RU6^aBggKhhLorUx{^tx_dhONS<=B+4<%5=&9B-=F19?59?59?59?58>48>48>47=37=37=37=39?58>48>48>48>48>48>48>48>48>48>47<66;56;56;56;56;55:45:45:45:449327127127116005//4..3--2,,1+,1++0*+0**/)*/)*/)*/)*/)+0*+0*,1+-2,-2,05//4.-2,+0**/)+0*.3-3828=7C=@M<@M<@ML5AN:FS?KXGLYHIUGCOA;G;5A50<2-9/.5..5.-4--4-,3,gdUgdUgdUgdUheVheVheVifWifWifWifWifWifWifWifWifWifWifWifWifWifWifWleUleUldYldYmd]md]md]ne^mg[mg[jiUmlXimTjnUhrZjt\esdftejzw|޿ڻջӹrvamXaLvS?mJ6kF3jE2lF3lF3lE4kD3yRCtM>pI:oH9qJ;sL=pK;lG7iD4jE5kF6fA1eA1eA1eA1eA1cB1cB1cB1cB1cB1cB1\E5\E5[F5[F5YF5YF5XG5WF4SF3SF3RG3TI5KE/PJ4`^Gtr[tt\eeMRT48>48>47=37=37=37=38>48>48>48>48>48>48>48>48>48>48>48=78=78=78=78=77<67<67<66;56;56;55:449349338227116005//4..3--2,-2,,1-,1-,1-+0,+0,+0,,1-,1--2.-2..3/.3/-2.,1-+0,+0,,1-.3/1624957;:9=<=K:>L;?N;@O9G:3A4/<2,9/.5..5.-4-,3,,3,gdUgdUgdUgdUheVheVheVifWifWifWifWifWifWifWifWifWifWifWifWifWifWifWleUleUldYldYmd]md]md]ne^mg[mg[jiUnmYjnUjnUhrZis[drccqbgwtzܽعҸжϼҿϺ޿Ŧup\^KzUBxR?xR?yRAyRAhA2f?0e>/d=.e>/hA2jE5lG7nI9oJ:oJ:fA1eA1eA1eA1eA1cB1cB1cB1dC2dC2dC2^G7^G7]H7]H7[H7[H7YH6XG5UH5TG4SH4RG3MG1VP:jhQ~|e~~fmmUXZBMO7HL3FJ1;E*;E*=F+?H-AG+AG+BG)BG)IJ+NO0QQ5xx\yy]ww[kkSYYAHJ4AC-@C.@C.=@-:=*9?59?59?59?58>48>48>47=37=37=37=38>48>48>48>48>48>48>48>48>48>48>4:?99>89>89>89>89>88=78=78=78=77<67<66;56;55:449338227116005/05/05/-2.-2.-2.,1-,1-+0,+0,,1-,1-,1--2.,1-,1-,1-,1--2..3//400511622653768F5:H7=L9@O<@O:?N9)V;&X=(Y@*Y@*X?)_F0]G0]G0]G0]G0^H1^H1]I1]I1]I1]I1YL9YL9XM9YN:VN9VN9TN8TN8RM7QL6OM6NL5KM5UW?jnU{fx~dgmSR[@GP5@J/=G,:G+9F*H-DJ.DJ.EH+DG*FG(JK,NM1yx\yuZsoTgbLZU?NL7KI4KJ6HG3BA/=<*:@69?59?59?59?59?58>48>48>48>47=37=37=37=38>48>48>48>48>49?59?59?5:?9:?9:?9:?9:?99>89>89>89>88=78=78=78=78=77<66;56;55:4493382382382/40.3/.3/-2.,1-+0,+0,+0,+0,+0,+/.+/.+/.,0/-10.21/32/32/32/32/32/320A.3D17I3;M7>P:>P:H-;E*H-@J/FL0GM1GJ-EH+IJ+OP1TS7srVrnSkgLb]G[V@US>SQ48>48>48>49?59?59?59?5:@6:@6;@:;@:;@::?9:?9:?9:?99>89>89>89>8:?99>89>89>88=78=77<67<66;56;56;5273162051/40.3/-2.,1-+0,+0,+0,+/.+/.,0/,0/-10.21.21.21.21.21-10-10+<).?,3E/8J4K/>K/=J.;H,?L0?L0BL1DN3JP4IO3IL/HK.PO1ZY;d`EmiNjdJe_E`ZD^XB]XD\WCYTASN;LI8HE448>48>49?59?59?5:@6:@6:@6;A7;A7;@:;@:;@:;@::?9:?9:?99>89>89>89>8;@::?9:?9:?9:?9:?99>89>89>89>89>86;75:6495384162/40.3/-2.-2.,1-,0/-10-10-10-10-10-12-12-12-12-12-12&7$):'/A+5G19K31+;..5-.5--4,-4,,3+ebSfcTfcTgdUgdUheVifWifWjgXjgXkhYifWifWifWifWifWifWifWifWifWifWifWleUleUldYldYmd]md]md]ne^kg[kg[jiUjiUgmSioUgs[ht\esddrch{w}ӷͱŮľԺudJUD*O>$SC)VF,VF,\L2[M2[M2\N3\N3\N3]O4[P4\Q5\Q5\Q5TN8UO9TO9TO9SN8SN8PN7OM6KM5JL4HL3JN5IO5NT:R[@QZ?FP5;E*8E)=J.?L0=J.BO3BO3EO4GQ6LR6KQ5JM0JM0UT6cbDokPhdIe_E`Z@_YC`ZDa\H_ZF[VCUP=NK:LI8=C9=C9=C9=C9=C989>89>89>8;@:;@:;@:;@:;@:;@::?9:?9:?9:?9:?99>:9>:7<86;7495273051/40/40.3/.21.21.21-10-10-10,01,01,01-12-12-12$5"'8%-?)3E/8J2;M5G*?F%@G&DJ(FL*GM)FL(ST2ST2QR2LM-IJ+LM.WW;bbFeeK``FZXA[YB\ZC\ZC][B][B\[?[Z>YX:VU7TS4SR3KE/JD.HC/FA-E?/D>.A>/A>/??3??3>@5<>3;>5;>58@59A67B47B48C58C57D37D3:B7:B79A69A68@58@58@59A69A6:B7:B7:B7:B79A69A6:B7:B7;C8F;7B:7B:8B77A66A15@05>-4=,39-28,16/.3,.40/51-7.-7.,;$-<%-A1E 3J6M5X 5X 7W(7W(9T39T3:P;:P;=O?=O?>O<9J7=O5BT:EX:FY;DY:CX9>U96M1-C,&<%.5--4,,3++2*,3+ZgMZgM[gO\hP_iQ`jRbjSckTfkWglXhkXfiVihVhgUifWheVjdVkeWldWmeXmeZmeZjgVkhWkg[kg[kg^kg^jf]jf]hfZhfZefThiWfkUglVdp\eq]dqgjwmvúλƵ˾´øĢeaFPK-SN0TN.PJ*SJ+WN/UO/UO/TO1TO1SO2SO2QP4QP4PP6PP6QM2QM2PN5QO6PP6PP6LP7KO6IN7GL5EM5HP8GP5DM2AJ->G*@G&AH'EK)HN,HN*HN*QR0RS1RS3RS3TU6XY:\\@^^B]]CZZ@XV?YW@YW@ZXAZX?[Y@ZY=ZY=XW9WV8UT5TS4NH2MG1KF2ID0GA1F@0C@1B?0??3??3>@5<>3;>5;>58@59A67B47B48C58C57D37D3:B7:B79A69A68@58@58@59A69A6:B7:B7:B7:B7:B7:B7:B7:B7;C8F;>F;:E=:E=:D9:D99D48C39B17@/7=16<05:34923953950:10:1/>'1@)4H#9M(=T&@W)Cf.Cf.Cc4Bb3B]T?;M=J]?I^?H]>BY=;R61G0+A*-4,,3+*1)*1)*1)ZgMZgM[gO\hP_iQ`jRbjSckTfkWglXhkXgjWjiWihVjgXifWkeWlfXmeXmeXnf[nf[khWkhWkg[kg[kg^jf]jf]jf]hfZhfZfgUhiWfkUglVdp\fr^huko|r{ĹϼȵǺµŹàc_DNI,RM0SM-PJ*SJ+VM.UO/UO/TO1TO1SO2SO2QP4QP4PP4PP4QM2QM2PN5PN5OO5OO5LP7KO6IN7HM6FN6HP8FO4DM2BK.@I,BI(DK*GM+JP.LR.MS/MS-NT.RX4[a=djHgmKbeHX[>QT9OR7RR:TTWU@5<>3;>5;>58@59A67B47B48C58C57D37D3:B7:B79A69A68@58@58@59A69A6:B7:B7:B7:B7:B7:B7:B7:B7;C8F;>F;=H@=H@>H==G<=H8:4>54>53B+7F/3;>5;>59A69A67B47B47B48C57D37D3:B7:B7:B79A69A69A69A69A6:B7:B7:B7:B7:B7:B7:B7:B7;C8;C8F;>F;>IA>IA?I>?I>?J:>I9?H7>G6>D8=C7=B;?D==C?;A=6@76@75D-;J3BV1Ma