From 486497e07b4617d9548a5b7347076f1b329bd417 Mon Sep 17 00:00:00 2001 From: =?utf8?q?M=C3=A5ns=20Rullg=C3=A5rd?= Date: Tue, 14 Nov 2006 03:18:09 +0000 Subject: [PATCH] revert bad checkin Originally committed as revision 7044 to svn://svn.ffmpeg.org/ffmpeg/trunk --- configure | 6 ++--- libavcodec/ac3.h | 6 +++++ libavcodec/ac3enc.c | 3 +-- libavcodec/armv4l/dsputil_iwmmxt.c | 10 +++---- libavcodec/armv4l/mpegvideo_iwmmxt.c | 2 +- libavcodec/dct-test.c | 8 +++--- libavcodec/dsputil.c | 10 +++---- libavcodec/dsputil.h | 12 ++++++--- libavcodec/h263dec.c | 2 +- libavcodec/i386/dsputil_mmx.c | 46 ++++++++++++++++---------------- libavcodec/i386/motion_est_mmx.c | 4 +-- libavcodec/i386/mpegvideo_mmx.c | 10 +++---- libavcodec/i386/mpegvideo_mmx_template.c | 4 +-- libavcodec/imgresample.c | 6 ++--- libavcodec/ppc/dsputil_ppc.c | 4 +-- libavcodec/snow.c | 4 +-- libavcodec/snow.h | 4 +-- libavcodec/utils.c | 2 +- 18 files changed, 76 insertions(+), 67 deletions(-) diff --git a/configure b/configure index 9fd9f38..03896a5 100755 --- a/configure +++ b/configure @@ -1680,9 +1680,6 @@ if test "$gprof" = "yes" ; then add_ldflags "-p" fi -VHOOKCFLAGS="-fPIC $CFLAGS" -test "$needmdynamicnopic" = yes && add_cflags -mdynamic-no-pic - # find if .align arg is power-of-two or not if test $asmalign_pot = "unknown"; then asmalign_pot="no" @@ -1820,6 +1817,9 @@ else echo "INSTALLSTRIP=" >> config.mak fi +VHOOKCFLAGS="-fPIC $CFLAGS" +test "$needmdynamicnopic" = yes && add_cflags -mdynamic-no-pic + echo "OPTFLAGS=$CFLAGS" >> config.mak echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak echo "LDFLAGS=$LDFLAGS" >> config.mak diff --git a/libavcodec/ac3.h b/libavcodec/ac3.h index 81a322c..5daa975 100644 --- a/libavcodec/ac3.h +++ b/libavcodec/ac3.h @@ -57,3 +57,9 @@ extern const uint16_t floortab[8]; extern const uint16_t fgaintab[8]; #endif +void ac3_common_init(void); +void ac3_parametric_bit_allocation(AC3BitAllocParameters *s, uint8_t *bap, + int8_t *exp, int start, int end, + int snroffset, int fgain, int is_lfe, + int deltbae,int deltnseg, + uint8_t *deltoffst, uint8_t *deltlen, uint8_t *deltba); diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c index 15c7e55..bac703c 100644 --- a/libavcodec/ac3enc.c +++ b/libavcodec/ac3enc.c @@ -119,7 +119,6 @@ static inline int calc_lowcomp(int a, int b0, int b1, int bin) /* AC3 bit allocation. The algorithm is the one described in the AC3 spec. */ -static void ac3_parametric_bit_allocation(AC3BitAllocParameters *s, uint8_t *bap, int8_t *exp, int start, int end, int snroffset, int fgain, int is_lfe, @@ -795,7 +794,7 @@ static int compute_bit_allocation(AC3EncodeContext *s, return 0; } -static void ac3_common_init(void) +void ac3_common_init(void) { int i, j, k, l, v; /* compute bndtab and masktab from bandsz */ diff --git a/libavcodec/armv4l/dsputil_iwmmxt.c b/libavcodec/armv4l/dsputil_iwmmxt.c index 70f14d7..d7401e7 100644 --- a/libavcodec/armv4l/dsputil_iwmmxt.c +++ b/libavcodec/armv4l/dsputil_iwmmxt.c @@ -128,7 +128,7 @@ static void nop(uint8_t *block, const uint8_t *pixels, int line_size, int h) return; } -int ff_mm_flags; /* multimedia extension flags */ +int mm_flags; /* multimedia extension flags */ int mm_support(void) { @@ -137,16 +137,16 @@ int mm_support(void) void dsputil_init_iwmmxt(DSPContext* c, AVCodecContext *avctx) { - ff_mm_flags = mm_support(); + mm_flags = mm_support(); if (avctx->dsp_mask) { if (avctx->dsp_mask & FF_MM_FORCE) - ff_mm_flags |= (avctx->dsp_mask & 0xffff); + mm_flags |= (avctx->dsp_mask & 0xffff); else - ff_mm_flags &= ~(avctx->dsp_mask & 0xffff); + mm_flags &= ~(avctx->dsp_mask & 0xffff); } - if (!(ff_mm_flags & MM_IWMMXT)) return; + if (!(mm_flags & MM_IWMMXT)) return; c->add_pixels_clamped = add_pixels_clamped_iwmmxt; diff --git a/libavcodec/armv4l/mpegvideo_iwmmxt.c b/libavcodec/armv4l/mpegvideo_iwmmxt.c index ba42a39..1336ac5 100644 --- a/libavcodec/armv4l/mpegvideo_iwmmxt.c +++ b/libavcodec/armv4l/mpegvideo_iwmmxt.c @@ -110,7 +110,7 @@ static void dct_unquantize_h263_inter_iwmmxt(MpegEncContext *s, void MPV_common_init_iwmmxt(MpegEncContext *s) { - if (!(ff_mm_flags & MM_IWMMXT)) return; + if (!(mm_flags & MM_IWMMXT)) return; s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_iwmmxt; #if 0 diff --git a/libavcodec/dct-test.c b/libavcodec/dct-test.c index e7c91ca..2c16f47 100644 --- a/libavcodec/dct-test.c +++ b/libavcodec/dct-test.c @@ -69,7 +69,7 @@ static const unsigned short aanscales[64] = { 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247 }; -uint8_t ff_cropTbl[256 + 2 * MAX_NEG_CROP]; +uint8_t cropTbl[256 + 2 * MAX_NEG_CROP]; int64_t gettime(void) { @@ -473,10 +473,10 @@ int main(int argc, char **argv) init_fdct(); idct_mmx_init(); - for(i=0;i<256;i++) ff_cropTbl[i + MAX_NEG_CROP] = i; + for(i=0;i<256;i++) cropTbl[i + MAX_NEG_CROP] = i; for(i=0;i diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index d4df314..66370c1 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -643,7 +643,7 @@ retry: #endif #if defined(HAVE_MMX) && defined(CONFIG_GPL) - if(s->codec_id == CODEC_ID_MPEG4 && s->xvid_build && avctx->idct_algo == FF_IDCT_AUTO && (ff_mm_flags & MM_MMX)){ + if(s->codec_id == CODEC_ID_MPEG4 && s->xvid_build && avctx->idct_algo == FF_IDCT_AUTO && (mm_flags & MM_MMX)){ avctx->idct_algo= FF_IDCT_XVIDMMX; avctx->coded_width= 0; // force reinit // dsputil_init(&s->dsp, avctx); diff --git a/libavcodec/i386/dsputil_mmx.c b/libavcodec/i386/dsputil_mmx.c index 5a9f4e8..5675828 100644 --- a/libavcodec/i386/dsputil_mmx.c +++ b/libavcodec/i386/dsputil_mmx.c @@ -34,7 +34,7 @@ extern void ff_idct_xvid_mmx(short *block); extern void ff_idct_xvid_mmx2(short *block); -int ff_mm_flags; /* multimedia extension flags */ +int mm_flags; /* multimedia extension flags */ /* pixel operations */ static const uint64_t mm_bone attribute_used __attribute__ ((aligned(8))) = 0x0101010101010101ULL; @@ -3050,39 +3050,39 @@ extern void ff_snow_inner_add_yblock_mmx(uint8_t *obmc, const int obmc_stride, u void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) { - ff_mm_flags = mm_support(); + mm_flags = mm_support(); if (avctx->dsp_mask) { if (avctx->dsp_mask & FF_MM_FORCE) - ff_mm_flags |= (avctx->dsp_mask & 0xffff); + mm_flags |= (avctx->dsp_mask & 0xffff); else - ff_mm_flags &= ~(avctx->dsp_mask & 0xffff); + mm_flags &= ~(avctx->dsp_mask & 0xffff); } #if 0 av_log(avctx, AV_LOG_INFO, "libavcodec: CPU flags:"); - if (ff_mm_flags & MM_MMX) + if (mm_flags & MM_MMX) av_log(avctx, AV_LOG_INFO, " mmx"); - if (ff_mm_flags & MM_MMXEXT) + if (mm_flags & MM_MMXEXT) av_log(avctx, AV_LOG_INFO, " mmxext"); - if (ff_mm_flags & MM_3DNOW) + if (mm_flags & MM_3DNOW) av_log(avctx, AV_LOG_INFO, " 3dnow"); - if (ff_mm_flags & MM_SSE) + if (mm_flags & MM_SSE) av_log(avctx, AV_LOG_INFO, " sse"); - if (ff_mm_flags & MM_SSE2) + if (mm_flags & MM_SSE2) av_log(avctx, AV_LOG_INFO, " sse2"); av_log(avctx, AV_LOG_INFO, "\n"); #endif - if (ff_mm_flags & MM_MMX) { + if (mm_flags & MM_MMX) { const int idct_algo= avctx->idct_algo; #ifdef CONFIG_ENCODERS const int dct_algo = avctx->dct_algo; if(dct_algo==FF_DCT_AUTO || dct_algo==FF_DCT_MMX){ - if(ff_mm_flags & MM_SSE2){ + if(mm_flags & MM_SSE2){ c->fdct = ff_fdct_sse2; - }else if(ff_mm_flags & MM_MMXEXT){ + }else if(mm_flags & MM_MMXEXT){ c->fdct = ff_fdct_mmx2; }else{ c->fdct = ff_fdct_mmx; @@ -3097,7 +3097,7 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) c->idct_permutation_type= FF_SIMPLE_IDCT_PERM; #ifdef CONFIG_GPL }else if(idct_algo==FF_IDCT_LIBMPEG2MMX){ - if(ff_mm_flags & MM_MMXEXT){ + if(mm_flags & MM_MMXEXT){ c->idct_put= ff_libmpeg2mmx2_idct_put; c->idct_add= ff_libmpeg2mmx2_idct_add; c->idct = ff_mmxext_idct; @@ -3111,7 +3111,7 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) }else if(idct_algo==FF_IDCT_VP3 && avctx->codec->id!=CODEC_ID_THEORA && !(avctx->flags & CODEC_FLAG_BITEXACT)){ - if(ff_mm_flags & MM_SSE2){ + if(mm_flags & MM_SSE2){ c->idct_put= ff_vp3_idct_put_sse2; c->idct_add= ff_vp3_idct_add_sse2; c->idct = ff_vp3_idct_sse2; @@ -3126,7 +3126,7 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) }else if(idct_algo==FF_IDCT_CAVS){ c->idct_permutation_type= FF_TRANSPOSE_IDCT_PERM; }else if(idct_algo==FF_IDCT_XVIDMMX){ - if(ff_mm_flags & MM_MMXEXT){ + if(mm_flags & MM_MMXEXT){ c->idct_put= ff_idct_xvid_mmx2_put; c->idct_add= ff_idct_xvid_mmx2_add; c->idct = ff_idct_xvid_mmx2; @@ -3200,7 +3200,7 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) c->hadamard8_diff[1]= hadamard8_diff_mmx; c->pix_norm1 = pix_norm1_mmx; - c->sse[0] = (ff_mm_flags & MM_SSE2) ? sse16_sse2 : sse16_mmx; + c->sse[0] = (mm_flags & MM_SSE2) ? sse16_sse2 : sse16_mmx; c->sse[1] = sse8_mmx; c->vsad[4]= vsad_intra16_mmx; @@ -3227,7 +3227,7 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) c->h264_idct8_dc_add= c->h264_idct8_add= ff_h264_idct8_add_mmx; - if (ff_mm_flags & MM_MMXEXT) { + if (mm_flags & MM_MMXEXT) { c->prefetch = prefetch_mmx2; c->put_pixels_tab[0][1] = put_pixels16_x2_mmx2; @@ -3369,7 +3369,7 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) #ifdef CONFIG_ENCODERS c->sub_hfyu_median_prediction= sub_hfyu_median_prediction_mmx2; #endif //CONFIG_ENCODERS - } else if (ff_mm_flags & MM_3DNOW) { + } else if (mm_flags & MM_3DNOW) { c->prefetch = prefetch_3dnow; c->put_pixels_tab[0][1] = put_pixels16_x2_3dnow; @@ -3463,7 +3463,7 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) } #ifdef CONFIG_SNOW_ENCODER - if(ff_mm_flags & MM_SSE2){ + if(mm_flags & MM_SSE2){ c->horizontal_compose97i = ff_snow_horizontal_compose97i_sse2; c->vertical_compose97i = ff_snow_vertical_compose97i_sse2; c->inner_add_yblock = ff_snow_inner_add_yblock_sse2; @@ -3475,22 +3475,22 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) } #endif - if(ff_mm_flags & MM_3DNOW){ + if(mm_flags & MM_3DNOW){ c->vorbis_inverse_coupling = vorbis_inverse_coupling_3dnow; c->vector_fmul = vector_fmul_3dnow; if(!(avctx->flags & CODEC_FLAG_BITEXACT)) c->float_to_int16 = float_to_int16_3dnow; } - if(ff_mm_flags & MM_3DNOWEXT) + if(mm_flags & MM_3DNOWEXT) c->vector_fmul_reverse = vector_fmul_reverse_3dnow2; - if(ff_mm_flags & MM_SSE){ + if(mm_flags & MM_SSE){ c->vorbis_inverse_coupling = vorbis_inverse_coupling_sse; c->vector_fmul = vector_fmul_sse; c->float_to_int16 = float_to_int16_sse; c->vector_fmul_reverse = vector_fmul_reverse_sse; c->vector_fmul_add_add = vector_fmul_add_add_sse; } - if(ff_mm_flags & MM_3DNOW) + if(mm_flags & MM_3DNOW) c->vector_fmul_add_add = vector_fmul_add_add_3dnow; // faster than sse } diff --git a/libavcodec/i386/motion_est_mmx.c b/libavcodec/i386/motion_est_mmx.c index b540dfa..e33870e 100644 --- a/libavcodec/i386/motion_est_mmx.c +++ b/libavcodec/i386/motion_est_mmx.c @@ -376,7 +376,7 @@ PIX_SAD(mmx2) void dsputil_init_pix_mmx(DSPContext* c, AVCodecContext *avctx) { - if (ff_mm_flags & MM_MMX) { + if (mm_flags & MM_MMX) { c->pix_abs[0][0] = sad16_mmx; c->pix_abs[0][1] = sad16_x2_mmx; c->pix_abs[0][2] = sad16_y2_mmx; @@ -389,7 +389,7 @@ void dsputil_init_pix_mmx(DSPContext* c, AVCodecContext *avctx) c->sad[0]= sad16_mmx; c->sad[1]= sad8_mmx; } - if (ff_mm_flags & MM_MMXEXT) { + if (mm_flags & MM_MMXEXT) { c->pix_abs[0][0] = sad16_mmx2; c->pix_abs[1][0] = sad8_mmx2; diff --git a/libavcodec/i386/mpegvideo_mmx.c b/libavcodec/i386/mpegvideo_mmx.c index e3ab24b..1b7b1c1 100644 --- a/libavcodec/i386/mpegvideo_mmx.c +++ b/libavcodec/i386/mpegvideo_mmx.c @@ -27,7 +27,7 @@ #include "../avcodec.h" #include "x86_cpu.h" -extern uint16_t ff_inv_zigzag_direct16[64]; +extern uint16_t inv_zigzag_direct16[64]; static const unsigned long long int mm_wabs __attribute__ ((aligned(8))) = 0xffffffffffffffffULL; static const unsigned long long int mm_wone __attribute__ ((aligned(8))) = 0x0001000100010001ULL; @@ -693,7 +693,7 @@ static void denoise_dct_sse2(MpegEncContext *s, DCTELEM *block){ void MPV_common_init_mmx(MpegEncContext *s) { - if (ff_mm_flags & MM_MMX) { + if (mm_flags & MM_MMX) { const int dct_algo = s->avctx->dct_algo; s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_mmx; @@ -706,16 +706,16 @@ void MPV_common_init_mmx(MpegEncContext *s) draw_edges = draw_edges_mmx; - if (ff_mm_flags & MM_SSE2) { + if (mm_flags & MM_SSE2) { s->denoise_dct= denoise_dct_sse2; } else { s->denoise_dct= denoise_dct_mmx; } if(dct_algo==FF_DCT_AUTO || dct_algo==FF_DCT_MMX){ - if(ff_mm_flags & MM_SSE2){ + if(mm_flags & MM_SSE2){ s->dct_quantize= dct_quantize_SSE2; - } else if(ff_mm_flags & MM_MMXEXT){ + } else if(mm_flags & MM_MMXEXT){ s->dct_quantize= dct_quantize_MMX2; } else { s->dct_quantize= dct_quantize_MMX; diff --git a/libavcodec/i386/mpegvideo_mmx_template.c b/libavcodec/i386/mpegvideo_mmx_template.c index f2823a8..d59b6ef 100644 --- a/libavcodec/i386/mpegvideo_mmx_template.c +++ b/libavcodec/i386/mpegvideo_mmx_template.c @@ -139,7 +139,7 @@ static int RENAME(dct_quantize)(MpegEncContext *s, "movzb %%al, %%"REG_a" \n\t" // last_non_zero_p1 : "+a" (last_non_zero_p1) : "r" (block+64), "r" (qmat), "r" (bias), - "r" (ff_inv_zigzag_direct16+64), "r" (temp_block+64) + "r" (inv_zigzag_direct16+64), "r" (temp_block+64) ); // note the asm is split cuz gcc doesnt like that many operands ... asm volatile( @@ -185,7 +185,7 @@ static int RENAME(dct_quantize)(MpegEncContext *s, "movzb %%al, %%"REG_a" \n\t" // last_non_zero_p1 : "+a" (last_non_zero_p1) : "r" (block+64), "r" (qmat+64), "r" (bias+64), - "r" (ff_inv_zigzag_direct16+64), "r" (temp_block+64) + "r" (inv_zigzag_direct16+64), "r" (temp_block+64) ); // note the asm is split cuz gcc doesnt like that many operands ... asm volatile( diff --git a/libavcodec/imgresample.c b/libavcodec/imgresample.c index e742d62..ce1a05c 100644 --- a/libavcodec/imgresample.c +++ b/libavcodec/imgresample.c @@ -469,7 +469,7 @@ static void h_resample(uint8_t *dst, int dst_width, const uint8_t *src, n = dst_width; } #ifdef HAVE_MMX - if ((ff_mm_flags & MM_MMX) && NB_TAPS == 4) + if ((mm_flags & MM_MMX) && NB_TAPS == 4) h_resample_fast4_mmx(dst, n, src, src_width, src_start, src_incr, filters); else @@ -527,14 +527,14 @@ static void component_resample(ImgReSampleContext *s, phase_y = get_phase(src_y); #ifdef HAVE_MMX /* desactivated MMX because loss of precision */ - if ((ff_mm_flags & MM_MMX) && NB_TAPS == 4 && 0) + if ((mm_flags & MM_MMX) && NB_TAPS == 4 && 0) v_resample4_mmx(output, owidth, s->line_buf + (ring_y - NB_TAPS + 1) * owidth, owidth, &s->v_filters[phase_y][0]); else #endif #ifdef HAVE_ALTIVEC - if ((ff_mm_flags & MM_ALTIVEC) && NB_TAPS == 4 && FILTER_BITS <= 6) + if ((mm_flags & MM_ALTIVEC) && NB_TAPS == 4 && FILTER_BITS <= 6) v_resample16_altivec(output, owidth, s->line_buf + (ring_y - NB_TAPS + 1) * owidth, owidth, &s->v_filters[phase_y][0]); diff --git a/libavcodec/ppc/dsputil_ppc.c b/libavcodec/ppc/dsputil_ppc.c index 35da79e..95b69f4 100644 --- a/libavcodec/ppc/dsputil_ppc.c +++ b/libavcodec/ppc/dsputil_ppc.c @@ -42,7 +42,7 @@ void float_init_altivec(DSPContext* c, AVCodecContext *avctx); #endif -int ff_mm_flags = 0; +int mm_flags = 0; int mm_support(void) { @@ -277,7 +277,7 @@ void dsputil_init_ppc(DSPContext* c, AVCodecContext *avctx) dsputil_h264_init_ppc(c, avctx); if (has_altivec()) { - ff_mm_flags |= MM_ALTIVEC; + mm_flags |= MM_ALTIVEC; dsputil_init_altivec(c, avctx); snow_init_altivec(c, avctx); diff --git a/libavcodec/snow.c b/libavcodec/snow.c index f93d5ab..6bc9a8f 100644 --- a/libavcodec/snow.c +++ b/libavcodec/snow.c @@ -3001,9 +3001,9 @@ static int get_block_rd(SnowContext *s, int mb_x, int mb_y, int plane_index, con * improve the score of the whole frame, so iterative motion est * doesn't always converge. */ if(s->avctx->me_cmp == FF_CMP_W97) - distortion = ff_w97_32_c(&s->m, src + sx + sy*ref_stride, dst + sx + sy*ref_stride, ref_stride, 32); + distortion = w97_32_c(&s->m, src + sx + sy*ref_stride, dst + sx + sy*ref_stride, ref_stride, 32); else if(s->avctx->me_cmp == FF_CMP_W53) - distortion = ff_w53_32_c(&s->m, src + sx + sy*ref_stride, dst + sx + sy*ref_stride, ref_stride, 32); + distortion = w53_32_c(&s->m, src + sx + sy*ref_stride, dst + sx + sy*ref_stride, ref_stride, 32); else{ distortion = 0; for(i=0; i<4; i++){ diff --git a/libavcodec/snow.h b/libavcodec/snow.h index 750df28..f7cee13 100644 --- a/libavcodec/snow.h +++ b/libavcodec/snow.h @@ -128,8 +128,8 @@ extern void ff_snow_horizontal_compose97i(DWTELEM *b, int width); extern void ff_snow_inner_add_yblock(uint8_t *obmc, const int obmc_stride, uint8_t * * block, int b_w, int b_h, int src_x, int src_y, int src_stride, slice_buffer * sb, int add, uint8_t * dst8); #ifdef CONFIG_SNOW_ENCODER -int ff_w53_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h); -int ff_w97_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h); +int w53_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h); +int w97_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h); #else static int w53_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h) {assert (0);} static int w97_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h) {assert (0);} diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 51ed77b..2c7a76c 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -1197,7 +1197,7 @@ void avcodec_init(void) return; inited = 1; - ff_dsputil_static_init(); + dsputil_static_init(); init_crcs(); } -- 2.7.4