Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 30 Mar 2014 15:47:59 +0000 (UTC)
From:      Dirk Meyer <dinoex@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r349639 - head/games/xboing/files
Message-ID:  <201403301547.s2UFlxSE045168@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dinoex
Date: Sun Mar 30 15:47:58 2014
New Revision: 349639
URL: http://svnweb.freebsd.org/changeset/ports/349639
QAT: https://qat.redports.org/buildarchive/r349639/

Log:
  - rename patchfiles

Added:
  head/games/xboing/files/patch-Imakefile
     - copied unchanged from r349338, head/games/xboing/files/patch-ac
  head/games/xboing/files/patch-bonus.c
     - copied unchanged from r349338, head/games/xboing/files/patch-aa
  head/games/xboing/files/patch-highscore.c
     - copied unchanged from r349338, head/games/xboing/files/patch-ad
Deleted:
  head/games/xboing/files/patch-aa
  head/games/xboing/files/patch-ac
  head/games/xboing/files/patch-ad

Copied: head/games/xboing/files/patch-Imakefile (from r349338, head/games/xboing/files/patch-ac)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/xboing/files/patch-Imakefile	Sun Mar 30 15:47:58 2014	(r349639, copy of r349338, head/games/xboing/files/patch-ac)
@@ -0,0 +1,46 @@
+--- Imakefile.orig	Thu Nov 21 19:28:46 1996
++++ Imakefile	Sun Jun 20 18:39:19 1999
+@@ -24,23 +24,28 @@
+ XCOMM This is the directory where the highscore, level & sound data will be 
+ XCOMM placed. Default will be the current directory.
+ 
+-    XBOING_DIR = .
++    XBOING_DIR = ${LOCALBASE}/lib/X11/xboing
+ 
+ XCOMM These are some defines that must be set. Some may be overwritten in the
+ XCOMM machine arch section.
+ 
+-    XPMLIB 				= -L/usr/X11/lib -lXpm
+-    XPMINCLUDE 			= -I/usr/X11/include/X11
++    XPMLIB 				= -lXpm
++    XPMINCLUDE 			= -I${LOCALBASE}/include/X11
+     XBOINGINCLUDE 		= -I./include
+     LEVEL_INSTALL_DIR 	= $(XBOING_DIR)/levels
+     SOUNDS_DIR 			= $(XBOING_DIR)/sounds
+     BACKUP_DIR 			= $(XBOING_DIR)/../backups
+     HIGH_SCORE_FILE 	= $(XBOING_DIR)/.xboing.scr
++#ifdef WITHOUT_AUDIO
+     AUDIO_AVAILABLE 	= False
+     AUDIO_SRC 			= audio/NOaudio.c
++#else
++    AUDIO_AVAILABLE 	= True
++    AUDIO_SRC 			= audio/LINUXaudio.c
++#endif 
+     AUDIO_INCLUDE 		=
+     AUDIO_LIB 			=
+-	CDEBUGFLAGS         = -g
++    CDEBUGFLAGS			= -O2 -pipe
+ 
+ XCOMM Uncomment this if you want to use ANY of the AUDIO sound systems
+ #define COMPILE_IN_AUDIO    
+@@ -132,8 +137,8 @@
+         -DLEVEL_INSTALL_DIR=\"$(LEVEL_INSTALL_DIR)\" \
+         -DAUDIO_AVAILABLE=\"$(AUDIO_AVAILABLE)\" \
+         -DSOUNDS_DIR=\"$(SOUNDS_DIR)\" \
+-        -DREADMEP_FILE=\"$(XBOING_DIR)/docs/problems.doc\"
+-XCOMM   -DUSE_FLOCK=\"True\" \
++        -DREADMEP_FILE=\"$(XBOING_DIR)/problems.doc\" \
++        -DUSE_FLOCK=\"True\"
+ XCOMM   -DNEED_USLEEP=\"True\" \
+ XCOMM   -DNO_LOCKING=\"True\" 
+ 

Copied: head/games/xboing/files/patch-bonus.c (from r349338, head/games/xboing/files/patch-aa)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/xboing/files/patch-bonus.c	Sun Mar 30 15:47:58 2014	(r349639, copy of r349338, head/games/xboing/files/patch-aa)
@@ -0,0 +1,456 @@
+--- bonus.c.orig	Thu Nov 20 03:12:56 1997
++++ bonus.c	Thu Nov 20 03:15:32 1997
+@@ -311,7 +311,7 @@
+ 	XFlush(display);
+ 
+ 	SetBonusWait(BONUS_SCORE, frame + 5);
+-	SetGameSpeed(SLOW_SPEED);
++	SetGameSpeed(MEDIUM_SPEED);
+ 
+ 	DEBUG("set bonus mode to BONUS_SCORE.")
+ }
+@@ -326,7 +326,7 @@
+ {
+ 	DEBUG("in function DoScore() in bonus.c")
+ 
+-	SetGameSpeed(SLOW_SPEED);
++	SetGameSpeed(MEDIUM_SPEED);
+ 
+ 	/* Nice message rewarding you for your efforts */
+ 	strcpy(string, "Congratulations on finishing this level.");
+@@ -336,7 +336,7 @@
+ 
+ 	ypos += (35 + GAP);
+ 	SetBonusWait(BONUS_BONUS, frame + LINE_DELAY);
+-	SetGameSpeed(SLOW_SPEED);
++	SetGameSpeed(MEDIUM_SPEED);
+ 	DEBUG("set bonus mode to BONUS_BONUS.")
+ }
+ 
+@@ -387,7 +387,7 @@
+ 			DrawShadowCentredText(display, window, textFont, 
+ 				string, ypos, blue, TOTAL_WIDTH);
+ 
+-			SetGameSpeed(SLOW_SPEED);
++			SetGameSpeed(MEDIUM_SPEED);
+ 
+ 			/* Now skip to the next sequence */
+ 			SetBonusWait(BONUS_LEVEL, frame + LINE_DELAY);
+@@ -411,7 +411,7 @@
+ 			bonusScore += ComputeScore(SUPER_BONUS_SCORE);
+ 			DisplayScore(display, scoreWindow, bonusScore);
+ 	
+-			SetGameSpeed(SLOW_SPEED);
++			SetGameSpeed(MEDIUM_SPEED);
+ 
+ 			/* Now skip to the next sequence */
+ 			SetBonusWait(BONUS_LEVEL, frame + LINE_DELAY);
+@@ -454,7 +454,7 @@
+ 		ypos += (int) (textFont->ascent + GAP * 1.5);
+ 		firstTime = True;
+ 
+-		SetGameSpeed(SLOW_SPEED);
++		SetGameSpeed(MEDIUM_SPEED);
+ 	}
+ }
+ 
+@@ -468,7 +468,7 @@
+ {
+ 	int secs, theLevel;
+ 
+-	SetGameSpeed(SLOW_SPEED);
++	SetGameSpeed(MEDIUM_SPEED);
+ 
+ 	/* Get the number of seconds left on the clock */
+ 	secs = GetLevelTimeBonus();
+@@ -533,7 +533,7 @@
+ 			/* Play the sound for the super bonus */
+ 			if (noSound == False) playSoundFile("Doh3", 80);
+ 			
+-			SetGameSpeed(SLOW_SPEED);
++			SetGameSpeed(MEDIUM_SPEED);
+ 
+ 			/* Get ready for the next sequence */
+ 			SetBonusWait(BONUS_TIME, frame + LINE_DELAY);
+@@ -569,7 +569,7 @@
+ 		SetBonusWait(BONUS_TIME, frame + LINE_DELAY);
+ 		ypos += (textFont->ascent + GAP/2);
+ 		firstTime = True;
+-		SetGameSpeed(SLOW_SPEED);
++		SetGameSpeed(MEDIUM_SPEED);
+ 	}
+ }
+ 
+@@ -583,7 +583,7 @@
+ {
+ 	int secs = 0;
+ 
+-	SetGameSpeed(SLOW_SPEED);
++	SetGameSpeed(MEDIUM_SPEED);
+ 
+ 	/* Get the number of seconds left on the clock */
+ 	secs = GetLevelTimeBonus();
+@@ -627,7 +627,7 @@
+ 	int myrank = 0;
+ 	char str[5];
+ 
+-	SetGameSpeed(SLOW_SPEED);
++	SetGameSpeed(MEDIUM_SPEED);
+ 
+ 	/* Obtain current ranking for this score */
+ 	myrank = GetHighScoreRanking(score);
+@@ -680,7 +680,7 @@
+ {
+ 	DEBUG("DoEndText in bonus screen.")
+ 
+-	SetGameSpeed(SLOW_SPEED);
++	SetGameSpeed(MEDIUM_SPEED);
+ 
+ 	/* Finishing sentence - so you know what level to do */
+ 	sprintf(string, "Prepare for level %ld", level+1);
+--- main.c.orig	Thu Nov 20 03:15:34 1997
++++ main.c	Thu Nov 20 03:15:54 1997
+@@ -156,7 +156,7 @@
+ 
+ 	/* Set an entire game speedup or slowdown speed */
+ 	temp = (speed / (long) userDelay);
+-	userDelay = delay;
++	userDelay = delay/2 + 3;
+ 	speed = (long) (temp * userDelay);
+ 	speedLevel = 10 - delay;
+ }
+--- misc.c.orig	Fri Nov 22 09:28:46 1996
++++ misc.c	Thu Nov 20 03:18:15 1997
+@@ -89,8 +89,8 @@
+ #ifdef SYSV
+ #ifdef __clipper__
+     struct timeval tv;
+-    tv.tv_sec=((usec)/1000);
+-    tv.tv_usec=(((usec)%1000)*1000);
++    tv.tv_sec=((usec)/1000000);
++    tv.tv_usec=((usec)%1000000);
+     select(1,NULL,NULL,NULL,&tv);
+ #else
+     poll((struct poll *) 0, (size_t) 0, usec / 1000);   /* ms resolution */
+@@ -105,6 +105,68 @@
+ #endif
+ 
+ #if NeedFunctionPrototypes
++static	int	kudelay(unsigned long count)
++#else
++static	int	kudelay(count)
++unsigned long count;
++#endif
++{
++    unsigned int	bluff = 1;
++
++    while( count-- != 0 )	/* this can hardly be "optimised out" */
++	bluff = (bluff ^ ((bluff & 1) * 0x6110)) >> 1;
++
++    return( bluff );
++}
++
++#if NeedFunctionPrototypes
++static	void kusleep(unsigned long usec)
++#else
++static	void kusleep(usec)
++        unsigned long usec;
++#endif
++{
++    static float	kuliber_time = 0.0;
++    static float	kuliber_count = 0.0;
++    static unsigned long	kutimerswap = (1000000 / 15);
++    struct timeval	st, et;
++    long		gap;
++    unsigned long	count;
++
++    if( kuliber_time == 0.0 )
++    {
++	count = 0x1000;		/* calibrate delay loop */
++	gettimeofday(&st, NULL);
++
++	while( True )
++	{
++	    kudelay( count );
++	    count = (count << 1);
++	    gettimeofday(&et, NULL);
++	    gap = (((et.tv_sec - st.tv_sec) * 1000000) +
++			(et.tv_usec - st.tv_usec) );
++
++	    if( gap > 400*1000 )
++		break;
++	}
++
++	kuliber_time = (float)(gap/4);
++	kuliber_count = (float)(((count-1)&~0xFFF)>>2);
++    }
++
++    if( usec > kutimerswap )
++    {
++	kutimerswap = (1000000 / 30);
++	usleep( usec );		/* using usleep() for low resolution only */
++    }
++    else
++    {
++	kutimerswap = (1000000 / 15);
++	kudelay( (unsigned long)(kuliber_count*((float)usec/kuliber_time)) );
++    }
++}
++
++#if NeedFunctionPrototypes
+ void sleepSync(Display *display, unsigned long ms)
+ #else
+ void sleepSync(display, ms)
+@@ -112,27 +174,85 @@
+     unsigned long ms;
+ #endif
+ {
+-    struct timeval st, et;
+-    long SyncTime;
+-    static unsigned long accu;
++    static long		Expected_time = 0;
++    static long		Ref_sec = 0;
++    static long		Ref_usec = 0;
++    static long		Sleeping_time = 0;
++    static int		PLL_filter = 0;
++    struct timeval	st;
++    long		elapsed;
++    long		dodelay;
++    float		x;
+ 
+-    gettimeofday(&st, NULL);
+     XSync(display, False);
+-    gettimeofday(&et, NULL);
+ 
+-    SyncTime = (((et.tv_sec - st.tv_sec) * 1000) +
+-               ((et.tv_usec - st.tv_usec) / 1000) );
++    gettimeofday(&st, NULL);
++
++    if( Ref_sec == 0 )
++    {
++	Ref_sec = st.tv_sec;	/* take the initial reference point */
++	Ref_usec = st.tv_usec;
++	Sleeping_time = ms * 1000;
++    }
++
++    elapsed = (st.tv_sec - Ref_sec) * 1000000 + (st.tv_usec - Ref_usec);
++    dodelay = Sleeping_time;
++
++    if( PLL_filter > 0 && elapsed != 0 )	/* Phase lock loop */
++    {
++	dodelay = Expected_time + Sleeping_time - elapsed;
++
++	if( dodelay < 0 )
++	{
++	    dodelay = 0; PLL_filter--;
++	}
++	else
++	    if( dodelay > 2*Sleeping_time )
++	    {
++		dodelay = 2*Sleeping_time; PLL_filter--;
++	    }
++	    else
++		PLL_filter = 3;
++
++	if( elapsed > 40*Sleeping_time && Expected_time > 40*Sleeping_time )
++	{
++	    elapsed -= 20*Sleeping_time; /* Ref. point shouldn't be far away*/
++	    Expected_time -= 20*Sleeping_time;
++	    Ref_usec += 20*Sleeping_time;
++	    Ref_sec += Ref_usec/1000000; Ref_usec %= 1000000;
++	}
++    }
+ 
+-/*    if ((ms) > ((1000 / 60) + SyncTime))
+-        usleep(ms - SyncTime);
+-*/
+-    if ((ms + accu) > ((1000 / 30) + SyncTime)) 
++    if( PLL_filter <= 0 && elapsed > 40000 )	/* Frequency lock loop */
+     {
+-        usleep(ms +accu - SyncTime);
+-        accu = 0;
++	/* feedback filter */
++	x = 0.5 + 0.5 * (float)Expected_time / (float)elapsed;
++
++	if( x < 0.966 )	/* Acceleration must be strongly limited */
++	    x = 0.966;
++
++	if( x > 2.0 )
++	    x = 2.0;
++
++	Sleeping_time = (long)((float)Sleeping_time * x);
++
++	if( Sleeping_time < 500 )
++	    Sleeping_time = 500;
++
++	if( x > 0.99 && x < 1.01 && Sleeping_time > ms*500 )
++	    PLL_filter = -1 - 4*PLL_filter; /* locked - it's time to try PLL */
++	else
++	    PLL_filter = 0;
++
++	Ref_sec = st.tv_sec;
++	Ref_usec = st.tv_usec;
++	Expected_time = 0;
++	dodelay = Sleeping_time;
+     }
+-    else if (ms > SyncTime)
+-       accu += (ms - SyncTime);
++
++    kusleep( dodelay );
++
++    Expected_time += ms * 1000;
+ }
+ 
+ #if NeedFunctionPrototypes
+--- presents.c.orig	Thu Nov 20 03:18:42 1997
++++ presents.c	Thu Nov 20 03:21:38 1997
+@@ -287,7 +287,7 @@
+ 	}
+ #endif
+ 
+-	SetPresentWait(PRESENT_TEXT1, frame + 800);
++	SetPresentWait(PRESENT_TEXT1, frame + 200);
+ }
+ 
+ #if NeedFunctionPrototypes
+@@ -309,7 +309,7 @@
+ 	RenderShape(display, window, justin, justinM,
+ 		x, y, 285, 44, True);
+ 
+-	SetPresentWait(PRESENT_TEXT2, frame + 300);
++	SetPresentWait(PRESENT_TEXT2, frame + 100);
+ }
+ 
+ #if NeedFunctionPrototypes
+@@ -331,7 +331,7 @@
+ 	RenderShape(display, window, kibell, kibellM,
+ 		x, y, 260, 40, True);
+ 
+-	SetPresentWait(PRESENT_TEXT3, frame + 500);
++	SetPresentWait(PRESENT_TEXT3, frame + 200);
+ }
+ 
+ #if NeedFunctionPrototypes
+@@ -355,7 +355,7 @@
+ 	RenderShape(display, window, presents, presentsM,
+ 		x, y, 410, 44, True);
+ 
+-	SetPresentWait(PRESENT_TEXT_CLEAR, frame + 750);
++	SetPresentWait(PRESENT_TEXT_CLEAR, frame + 250);
+ }
+ 
+ #if NeedFunctionPrototypes
+@@ -375,7 +375,7 @@
+ 
+ 	FadeAwayArea(display, window, x, y, 410, 44);
+ 
+-	SetPresentWait(PRESENT_LETTERS, frame + 10);
++	SetPresentWait(PRESENT_LETTERS, frame + 5);
+ }
+ 
+ /* The distances for the gap inbetwen blocks */
+@@ -404,7 +404,7 @@
+ 		DrawLetter(display, window, i, x, y);
+ 		x += 10 + dists[i];
+ 
+-		SetPresentWait(PRESENT_LETTERS, frame + 300);
++		SetPresentWait(PRESENT_LETTERS, frame + 100);
+ 	}
+ 	else
+ 	{
+@@ -416,7 +416,7 @@
+ 		x += dists[3];
+ 		DrawLetter(display, window, 3, x, y);
+ 
+-		SetPresentWait(PRESENT_SHINE, frame + 200);
++		SetPresentWait(PRESENT_SHINE, frame + 100);
+ 	}
+ 
+ 	i++;
+@@ -463,7 +463,7 @@
+         if (in == 11)
+         {
+             XCopyArea(display, store, window, gc, 0, 0, 20, 20, x, y);
+-			SetPresentWait(PRESENT_SPECIAL_TEXT1, frame + 500);
++			SetPresentWait(PRESENT_SPECIAL_TEXT1, frame + 100);
+         }
+     }
+ }
+@@ -499,7 +499,7 @@
+ 		len = strlen(wisdom);
+ 		x = ((PLAY_WIDTH + MAIN_WIDTH) / 2) - 
+ 			(XTextWidth(dataFont, wisdom, len) / 2);
+-		nextFrame = frame + 10;
++		nextFrame = frame + 5;
+ 		first = False;
+ 	}
+ 
+@@ -508,11 +508,11 @@
+ 		if (noSound == False) playSoundFile("key", 60);
+ 		DrawText(display, window, x, y, dataFont, red, wisdom, i);
+ 
+-		nextFrame = frame + 30;
++		nextFrame = frame + 15;
+ 
+ 		i++;
+ 		if (i > len)
+-			SetPresentWait(PRESENT_SPECIAL_TEXT2, frame + 700);
++			SetPresentWait(PRESENT_SPECIAL_TEXT2, frame + 150);
+ 	}
+ }
+ 
+@@ -542,7 +542,7 @@
+ 		len = strlen(wisdom2);
+ 		x = ((PLAY_WIDTH + MAIN_WIDTH) / 2) - 
+ 			(XTextWidth(dataFont, wisdom2, len) / 2);
+-		nextFrame = frame + 10;
++		nextFrame = frame + 5;
+ 		first = False;
+ 	}
+ 
+@@ -551,11 +551,11 @@
+ 		if (noSound == False) playSoundFile("key", 60);
+ 		DrawText(display, window, x, y, dataFont, red, wisdom2, i);
+ 
+-		nextFrame = frame + 30;
++		nextFrame = frame + 15;
+ 
+ 		i++;
+ 		if (i > len)
+-			SetPresentWait(PRESENT_SPECIAL_TEXT3, frame + 700);
++			SetPresentWait(PRESENT_SPECIAL_TEXT3, frame + 150);
+ 	}
+ }
+ 
+@@ -584,7 +584,7 @@
+ 		len = strlen(wisdom3);
+ 		x = ((PLAY_WIDTH + MAIN_WIDTH) / 2) - 
+ 			(XTextWidth(dataFont, wisdom3, len) / 2);
+-		nextFrame = frame + 10;
++		nextFrame = frame + 5;
+ 		first = False;
+ 	}
+ 
+@@ -593,11 +593,11 @@
+ 		if (noSound == False) playSoundFile("key", 60);
+ 		DrawText(display, window, x, y, dataFont, red, wisdom3, i);
+ 
+-		nextFrame = frame + 30;
++		nextFrame = frame + 15;
+ 
+ 		i++;
+ 		if (i > len)
+-			SetPresentWait(PRESENT_CLEAR, frame + 800);
++			SetPresentWait(PRESENT_CLEAR, frame + 200);
+ 	}
+ }
+ 
+@@ -642,7 +642,7 @@
+ 		yb -= 10;
+ 
+ 		if (yt > ((PLAY_HEIGHT + MAIN_HEIGHT) / 2))
+-			SetPresentWait(PRESENT_FINISH, frame + 20);
++			SetPresentWait(PRESENT_FINISH, frame + 10);
+ 
+ 		nextFrame = frame + 20;
+ 	}

Copied: head/games/xboing/files/patch-highscore.c (from r349338, head/games/xboing/files/patch-ad)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/xboing/files/patch-highscore.c	Sun Mar 30 15:47:58 2014	(r349639, copy of r349338, head/games/xboing/files/patch-ad)
@@ -0,0 +1,82 @@
+--- highscore.c.orig	Thu Nov 20 03:07:35 1997
++++ highscore.c	Thu Nov 20 03:12:23 1997
+@@ -55,6 +55,7 @@
+ #include <time.h>
+ #include <file.h>
+ #include <sys/param.h>
++#include <sys/stat.h>
+ #include <X11/Xlib.h>
+ #include <X11/Xutil.h>
+ #include <X11/Xos.h>
+@@ -119,7 +120,7 @@
+ static void InitialiseHighScores(void);
+ static void SortHighScores(void);
+ static void DeleteScore(int i);
+-static int LockUnlock(int cmd);
++static int LockUnlock(int cmd, int fd);
+ #else
+ static int LockUnlock();
+ static void DeleteScore();
+@@ -844,7 +845,7 @@
+ 
+ 	/* Lock the file for me only */
+ 	if (type == GLOBAL)
+-		id = LockUnlock(LOCK_FILE);
++		id = LockUnlock(LOCK_FILE, -1);
+ 
+ 	/* Read in the lastest scores */
+ 	if (ReadHighScoreTable(type) == False)
+@@ -875,8 +876,8 @@
+ 				{
+ 					/* Don't add as score is smaller */
+ 					if (id != -1) 
+-						id = LockUnlock(UNLOCK_FILE);
+-					return False;
++						id = LockUnlock(UNLOCK_FILE, id);
++					goto doUnlock;
+ 				}
+ 			}
+ 		}	/* for */
+@@ -898,16 +899,17 @@
+ 
+ 				/* Unlock the file now thanks */
+ 				if (id != -1) 
+-					id = LockUnlock(UNLOCK_FILE);
++					id = LockUnlock(UNLOCK_FILE, id);
+ 
+ 				/* Yes - it was placed in the highscore */
+ 				return True;
+ 			}
+ 		}
+ 
++doUnlock:
+ 		/* Unlock the file now thanks */
+ 		if (id != -1) 
+-			id = LockUnlock(UNLOCK_FILE);
++			id = LockUnlock(UNLOCK_FILE, id);
+ 
+ 		/* Not even a highscore - loser! */
+ 		return False;
+@@ -1185,10 +1187,10 @@
+ }
+ 
+ #if NeedFunctionPrototypes
+-static int LockUnlock(int cmd)
++static int LockUnlock(int cmd, int fd)
+ #else
+ static int LockUnlock(cmd)
+-	int cmd;
++	int cmd, fd;
+ #endif
+ {
+ 	static int 	inter = -1;
+@@ -1225,6 +1227,9 @@
+ 	/* Open the highscore file for both read & write */
+ 	if (cmd == LOCK_FILE)
+ 		inter = open(filename, O_CREAT | O_RDWR, 0666);
++	else
++		/* use old fd to unlock */
++		inter = fd;
+ 
+ #ifndef NO_LOCKING
+ 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201403301547.s2UFlxSE045168>