eg-blog

Feed Rss

Subsonic 4.6-020 download

02.01.2012, Allgemein, Download / Release Notes, Subsonic on Synology DS, by .

First of all, again: If you already have a Subsonic package installed and running fine: Stay where you are!

Subsonic itself is the same and you might loose your settings during update, I still don’t know when and why this happens, the error is not really reproducible.

I’ve changed the installation/update/uninstallation procedure and included a backup and restore option.

  • While installing, you can select whether to restore a Backup of Subsonic (which was created during uninstall or with the Subsonic backup creator) or to perform a fresh install. To restore create a folder named Subsonic (with capital S) in your public folder. If you haven’t got a public folder (on multi-bay-nas) create a new shared folder in the DSM. Now place the backup-ed files into the Subsonic folder.
  • While updating you can select whether to update normally or restore a backup from the public folder.
  • While uninstalling you can select whether to create a backup in the public folder or not. (You don’t have to do anything to the folder if you want to restore it afterwards)

There is also a new ffmpeg version included, but still no x264 support,. If you are a pro and can compile such things properly or if you’ve got a compiled version for ARM or x86 please let me know, thanks ;).

Thanks to patters I’ve included timezone support, so the log files should have the correct time now.

The package will be added to both package sources soon.

You can manually download them here:

Subsonic4.6-020-ARM.spk (32MB)

Subsonic4.6-020-x86.spk (32MB)

Scripts

INFO
package="Subsonic"
version="4.6-020"
description="Subsonic is a free, web-based media streamer, providing ubiquitous access to your music."
maintainer="Sindre Mehus, Synology package maintained at eg-blog.de"
arch="88f6281 88f6282"
adminport="4040"
adminurl="/"
firmware="3.1-1594"
helpurl="http://eg-blog.de"
package_icon="package_icon_in_base64_code_too_long_to_post_it_here"
install_reboot="yes"
preinst
#!/bin/sh

#--------Subsonic preinstall script
#--------package maintained at synology-forum.de

source /etc/profile

########################################
#check if Java is installed

if [ -z ${JAVA_HOME} ]; then
	echo "Java is not installed or not properly configured. JAVA_HOME is not defined. " > $SYNOPKG_TEMP_LOGFILE
        echo "Download and install the Java Synology package from http://wp.me/pVshC-z5" >> $SYNOPKG_TEMP_LOGFILE
	exit 1
fi

if [ ! -f ${JAVA_HOME}/bin/java ]; then
	echo "Java is not installed or not properly configured. The Java binary could not be located. " > $SYNOPKG_TEMP_LOGFILE
        echo "Download and install the Java Synology package from http://wp.me/pVshC-z5" >> $SYNOPKG_TEMP_LOGFILE
	exit 1
fi

#########################################
#check if Subsonic folder is in public folder wehn restore is selected
if [ ! -z ${install_restore} ]; then
	PUBLIC=`cat /usr/syno/etc/smb.conf | sed -r '/\/public$/!d;s/^.*path=(\/volume[0-9]{1,3}\/public).*$/\1/'`

	if [ ! -d $PUBLIC/Subsonic ]; then
		echo "Can't find a folder named 'Subsonic' in your public folder. " > $SYNOPKG_TEMP_LOGFILE
		echo "Please check your public folder and make sure there is a folder called Subsonic (with Capital S) in it. Or select 'No' if you don't want to restore anything and just install Subsonic normally" >> $SYNOPKG_TEMP_LOGFILE
		exit 1
	fi
fi

exit 0
postinst
#!/bin/sh

#--------SUBSONIC postinstall script
#--------package maintained at eg-blog.de

#variable for process ID
PID=""

subsonic_get_pid ()
{
	PID=`ps | grep java | grep subsonic | awk '{print $1}'`
}

####################################
#subsonic user settings

#create subsonic daemon user
synouser --add subsonic `${SYNOPKG_PKGDEST}/passgen 1 20` "Subsonic daemon user" 0 "" ""

#determine the subsonic user homedir and save that variable in the user's profile
#this is needed because librtmp needs to write a file called ~/.swfinfo
#and new users seem to inherit a HOME value of /root which they have no permissions for
SUBSONIC_HOMEDIR=`cat /etc/passwd | sed -r '/Subsonic daemon user/!d;s/^.*:Subsonic daemon user:(.*):.*$/\1/'`
su - subsonic -s /bin/sh -c "echo export HOME=${SUBSONIC_HOMEDIR} >> .profile"

#####################################
#other stuff

#make the Subsonic start script executable
chmod +x ${SYNOPKG_PKGDEST}/subsonic.sh

#set ownership of Subsonic folder tree
chown -R subsonic ${SYNOPKG_PKGDEST}

#########################################
#install user backup from public folder

if [ ! -z ${install_restore} ]; then
	PUBLIC=`cat /usr/syno/etc/smb.conf | sed -r '/\/public$/!d;s/^.*path=(\/volume[0-9]{1,3}\/public).*$/\1/'`
	if [ ! -d $PUBLIC/Subsonic ]; then
		echo "Can't find a folder named 'Subsonic' in your public folder." > $SYNOPKG_TEMP_LOGFILE
		echo "Please check your public folder and make sure there is a folder called Subsonic (with Capital S) in it. Or select 'No' if you don't want to restore anything and just install Subsonic normally" >> $SYNOPKG_TEMP_LOGFILE
		exit 1
	else
		#set up symlink for the DSM GUI
		ln -s ${SYNOPKG_PKGDEST}/ /usr/syno/synoman/webman/3rdparty/Subsonic

		#create custom temp folder so temp files can be bigger
		if [ ! -d ${SYNOPKG_PKGDEST}/../../@tmp/subsonic ]; then
			mkdir ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
			chown -R subsonic ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
		fi
		#create symlink to the created directory
		if [ ! -L /tmp/subsonic ]; then
			ln -s ${SYNOPKG_PKGDEST}/../../@tmp/subsonic /tmp/
		fi

		#start subsonic as subsonic user
		su - subsonic -s /bin/sh -c /usr/syno/synoman/webman/3rdparty/Subsonic/subsonic.sh

		#give it some time to start up
		sleep 90

		#stop subsonic
		subsonic_get_pid
		kill $PID
		sleep 5

		#delete symlink
		rm /usr/syno/synoman/webman/3rdparty/Subsonic

		#delete temp files
		if [ -d ${SYNOPKG_PKGDEST}/../../@tmp/subsonic ]; then
			rm -r ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
		fi

		#restart Web Station to clear webserver caches
		if [ -f /usr/syno/etc/rc.d/S97apache-user.sh ]; then
			/usr/syno/etc/rc.d/S97apache-user.sh restart
		fi

		#copy files
		cp -r $PUBLIC/Subsonic/* ${SYNOPKG_PKGDEST}/

		#new files might not be owned by subsonic user
		chown -R subsonic ${SYNOPKG_PKGDEST}/

		#make the Subsonic start script executable
		chmod +x ${SYNOPKG_PKGDEST}/subsonic.sh
	fi
fi
exit 0
preupgrade
#!/bin/sh

#--------Subsonic preupgrade script
#--------package maintained at eg-blog.de

#variable for process ID
PID=""

##############################################
#function to get the process id of Subsonic

subsonic_get_pid ()
{
   PID=`ps | grep java | grep subsonic | awk '{print $1}'`
}

###########################
#stop Subsonic if it is runing

subsonic_get_pid

if [ -z $PID ]; then
	kill $PID
	sleep 2
fi

if [ -d ${SYNOPKG_PKGDEST}/../../@tmp/subsonic ]; then
	rm -r ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
fi

###########################
#backup subsonic.properties and db Folder

if [ -z ${update_restore} ]; then
	if [ ! -d ${SYNOPKG_PKGDEST}/../subsonic_update_backup ]; then
		mkdir ${SYNOPKG_PKGDEST}/../subsonic_update_backup
		cp ${SYNOPKG_PKGDEST}/subsonic.properties ${SYNOPKG_PKGDEST}/*.index ${SYNOPKG_PKGDEST}/../subsonic_update_backup/
		cp -r ${SYNOPKG_PKGDEST}/db ${SYNOPKG_PKGDEST}/../subsonic_update_backup
		cp -r ${SYNOPKG_PKGDEST}/lucene ${SYNOPKG_PKGDEST}/../subsonic_update_backup
		cp -r ${SYNOPKG_PKGDEST}/thumbs ${SYNOPKG_PKGDEST}/../subsonic_update_backup
	fi
fi

exit 0
postupgrade
#!/bin/sh

#--------SUBSONIC postupgrade script
#--------package maintained at eg-blog.de

#variable for process ID
PID=""

##############################################
#function to get the process id of Subsonic

subsonic_get_pid ()
{
	PID=`ps | grep java | grep subsonic | awk '{print $1}'`
}

################################
#make it working again

#restart Web Station to clear webserver caches
if [ -f /usr/syno/etc/rc.d/S97apache-user.sh ]; then
	/usr/syno/etc/rc.d/S97apache-user.sh restart
fi

###############################
#start and stop subsonic for first initialisation

#set up symlink for the DSM GUI
ln -s ${SYNOPKG_PKGDEST}/ /usr/syno/synoman/webman/3rdparty/Subsonic

#create custom temp folder so temp files can be bigge
if [ ! -d ${SYNOPKG_PKGDEST}/../../@tmp/subsonic ]; then
	mkdir ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
	chown -R subsonic ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
fi

#create symlink to the created directory
if [ ! -L /tmp/subsonic ]; then
	ln -s ${SYNOPKG_PKGDEST}/../../@tmp/subsonic /tmp/
fi

#make the Subsonic start script executable
chmod +x ${SYNOPKG_PKGDEST}/subsonic.sh

#subsonic daemon user has been deleted and recreated so we need to reset ownership (new UID)
chown -R subsonic ${SYNOPKG_PKGDEST}/

#start subsonic as subsonic user
su - subsonic -s /bin/sh -c /usr/syno/synoman/webman/3rdparty/Subsonic/subsonic.sh

#give it some time to start up
sleep 90

#stop subsonic
subsonic_get_pid
kill $PID
sleep 5

#delete Symlink
rm /usr/syno/synoman/webman/3rdparty/Subsonic

#delete temp files
if [ -d ${SYNOPKG_PKGDEST}/../../@tmp/subsonic ]; then
	rm -r ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
fi

#restart Web Station to clear webserver caches
if [ -f /usr/syno/etc/rc.d/S97apache-user.sh ]; then
	/usr/syno/etc/rc.d/S97apache-user.sh restart
fi

###############################
#restore subsonic db index and settings
if [ ! -z ${update_restore} ]; then
	PUBLIC=`cat /usr/syno/etc/smb.conf | sed -r '/\/public$/!d;s/^.*path=(\/volume[0-9]{1,3}\/public).*$/\1/'`
	if [ ! -d $PUBLIC/Subsonic ]; then
		echo "Can't find a folder named 'Subsonic' found in your public folder." > $SYNOPKG_TEMP_LOGFILE
		echo "Please check your public folder and make sure there is a folder called Subsonic (with Capital S) in it. Or select 'No' if you don't want to restore anything and just install Subsonic normally" >> $SYNOPKG_TEMP_LOGFILE
		exit 1
	else
		cp -r $PUBLIC/Subsonic/* ${SYNOPKG_PKGDEST}/
	fi
else
	cp -r ${SYNOPKG_PKGDEST}/../subsonic_update_backup/* ${SYNOPKG_PKGDEST}/

	#remove backup folder
	#remove the next lines to keep a backup in the @appstore folder
	if [ -d ${SYNOPKG_PKGDEST}/../subsonic_update_backup ]; then
		rm -r ${SYNOPKG_PKGDEST}/../subsonic_update_backup
	fi
fi
#subsonic may not own all new files
chown -R subsonic ${SYNOPKG_PKGDEST}/

#make the Subsonic start script executable
chmod +x ${SYNOPKG_PKGDEST}/subsonic.sh

exit 0
preuninst
#!/bin/sh

#--------SUBSONIC preuninstall script
#--------package maintained at eg-blog.de

#variable for process ID
PID=""

##############################################
#function to get the process id of Subsonic

subsonic_get_pid ()
{
	PID=`ps | grep java | grep subsonic | awk '{print $1}'`
}

subsonic_get_pid

if [ -z $PID ]; then
	sleep 1
else
	kill $PID
	sleep 2
	if [ -d /usr/syno/synoman/webman/3rdparty/Subsonic ]; then
		rm /usr/syno/synoman/webman/3rdparty/Subsonic
	fi

	if [ -d ${SYNOPKG_PKGDEST}/../../@tmp/subsonic ]; then
		rm -r ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
	fi
fi

################################################
#create a backup in public folder in public folder
if [ ! -z ${uninstall_backup} ]; then
	PUBLIC=`cat /usr/syno/etc/smb.conf | sed -r '/\/public$/!d;s/^.*path=(\/volume[0-9]{1,3}\/public).*$/\1/'`
	if [ ! -d $PUBLIC/Subsonic ]; then
		mkdir $PUBLIC/Subsonic
	fi

	cp ${SYNOPKG_PKGDEST}/subsonic.properties *.index $PUBLIC/Subsonic
	cp -r ${SYNOPKG_PKGDEST}/db $PUBLIC/Subsonic
	cp -r ${SYNOPKG_PKGDEST}/lucene $PUBLIC/Subsonic
	cp -r ${SYNOPKG_PKGDEST}/thumbs $PUBLIC/Subsonic
fi

exit 0
postuninst
#!/bin/sh

#--------SUBSONIC postuninstall script
#--------package maintained at eg-blog.de

#remove subsonic daemon user
synouser --del subsonic

#remove DSM icon symlink
if [ -d /usr/syno/synoman/webman/3rdparty/Subsonic ]; then
	rm /usr/syno/synoman/webman/3rdparty/Subsonic
fi

#remove temp symlink
rm /tmp/subsonic

exit 0
start-stop-status
#!/bin/sh

#--------Subsonic start-stop-status script
#--------package maintained at eg-blog.de

#variable for process ID
PID=""

##############################################
#function to get the process id of Subsonic

subsonic_get_pid ()
{
	PID=`ps | grep java | grep subsonic | awk '{print $1}'`
}

case "$1" in
   start)
	  SUBSONIC_HOMEDIR=`cat /etc/passwd | sed -r '/Subsonic daemon user/!d;s/^.*:Subsonic daemon user:(.*):.*$/\1/'`

	  #set the current timezone for Java so that Subsonic log timestamps are accurate
      TZ=`cat /etc/TZ`
      grep "^export TZ" $SUBSONIC_HOMEDIR/.profile > /dev/null \
      && sed -i "s%^export TZ.*$%export TZ="$TZ"%" $SUBSONIC_HOMEDIR/.profile \
      || echo export TZ=${TZ} >> $SUBSONIC_HOMEDIR/.profile

	  #set up symlink for the DSM GUI icon
	  if [ -d /usr/syno/synoman/webman/3rdparty ]; then
		ln -s ${SYNOPKG_PKGDEST}/ /usr/syno/synoman/webman/3rdparty/Subsonic
	  fi
      #create custom temp folder so temp files can be bigger
	  if [ ! -d ${SYNOPKG_PKGDEST}/../../@tmp/subsonic ]; then
		mkdir ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
		chown -R subsonic ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
	  fi
	  #create symlink to the created directory
	  if [ ! -L /tmp/subsonic ]; then
		ln -s ${SYNOPKG_PKGDEST}/../../@tmp/subsonic /tmp/
	  fi
	  # starting subsonic as subsonic daemon user
      su - subsonic -s /bin/sh -c /usr/syno/synoman/webman/3rdparty/Subsonic/subsonic.sh
      sleep 5
	  exit 0
   ;;
   stop)
      #stop subsonic
	  subsonic_get_pid
      kill $PID
      sleep 2
	  #delete Symlink and DSM icon
	  if [ -d /usr/syno/synoman/webman/3rdparty/Subsonic ]; then
		rm /usr/syno/synoman/webman/3rdparty/Subsonic
	  fi

	  if [ -d ${SYNOPKG_PKGDEST}/../../@tmp/subsonic ]; then
		rm -r ${SYNOPKG_PKGDEST}/../../@tmp/subsonic
	  fi
   ;;
   status)
      subsonic_get_pid
      if [ -z  $PID ]; then
	  #Subsonic is not running
		exit 1
	  else
	  #subsonic is running
		exit 0
      fi
   ;;
   log)
	  echo "${SYNOPKG_PKGDEST}/subsonic.log"
	  exit 0
   ;;
esac
install_uifile
[{
	"step_title": "Restore Backup",
	"items":
	[{
		"type": "singleselect",
		"desc": "Would you like to restore a backup of Subsonic? Create a folder with all relevant files in it, name it Subsonic (with capital S)and place it into your public folder",
		"subitems":
		[{
			"key": "install_restore",
			"desc": "Yes"
		},
		{
			"key": "no",
			"desc": "No"
		}]
	}]
}]
upgrade_uifile
[{
	"step_title": "Restore Backup",
	"items":
	[{
		"type": "singleselect",
		"desc": "Would you like to restore a backup of Subsonic? Create a folder with all relevant files in it, name it Subsonic (with capital S)and place it into your public folder",
		"subitems":
		[{
			"key": "update_restore",
			"desc": "Yes, I have a custom backup, please restore it"
		},
		{
			"key": "no",
			"desc": "No, just update and leave Subsonic as it is now (all preferences and the library will be kept)"
		}]
	}]
}]
uninstall_uifile
[{
	"step_title": "Create Backup",
	"items":
	[{
		"type": "singleselect",
		"desc": "Would you like to create a backup of Subsonic in the public folder?",
		"subitems":
		[{
			"key": "uninstall_backup",
			"desc": "Yes"
		},
		{
			"key": "no",
			"desc": "No"
		}]
	}]
}]

18 Responses to Subsonic 4.6-020 download

  1. Hi again.
    Congrats on passing on exams 🙂 Nice work.
    Some feedback now. 🙂
    Update process went seamlessly. Surprisingly well. All my setting left untouched. I am not sure if you have included lame in the package or there is any hyperlink to ipkg lame but there was no warning about missing lame even though in /transcode folder is no such file anymore.
    The video to work still needs transcoding value changed to one I have already stated before.
    I tried to increase a ram usage for this app. The only file which contains that indication i subsonic.sh despite many times stated on the net subsonic.properties. I have changed the value from initial 100 to 512 but it doesn’t seem to work still causing the processor usage high. I am not sure if I am missing something. Maybe there is another file which contains limitation for ram usage elswhere? Any thoughts?

    Antworten
    • I haven’t played around with the max heap of Java, yet.

      But the subsonic.sh looks fine.
      Max memory is stored in SUBSONIC_MAX_MEMORY in line 14, may be overwritten (if subsonic.sh is started with –max-memory) in line 72 „SUBSONIC_MAX_MEMORY=${1#–max-memory=}“ and then java is started in line 113 with „{JAVA} -Xmx${SUBSONIC_MAX_MEMORY}m …“

      But it can’t be really working because sometimes I have about 150MB used while 100MB are set… (first thought: is it case sensitive and the ‚m‘ has to be ‚M‘?)

      If transcoding is enabled the CPU load will always be at 100% because Sobsonic wil transcode the song you are playing form start to end, even if you pause or skip a file. While transcoding it plays the transcoded part of the file. When the file is completely transcoded the CPU load will go down. The question is: Is the transcoding faster then the speed of the playing song? If it is, everything is fine, if not (your CPU is too slow) you will hear dropouts (like on my 211+).

      Maybe I can include a routine like the one patters included in his serviio-wrapper.sh script (frome line 56 to end) of the serviio package.

      Antworten
  2. Right.
    You are absolutely right, after a while of playing a movie (this is my prime concern – but don’t be to exited they are only low res movies and videoclips really, no 720p or HD stuff) the CPU usage is going down. SO the thing seems to be alrite.
    I have mantioned about 512 mb of ram, because I found it as a solution to refreshment circle poping up from time to time. People indicated, that increasing the ram will reduce the CPU usage. I have 1 mb ram, and is usually 20% taken so I could afford putting 512 mb ram and put it into good use.
    Another thing is, that after restart of DS Subsunic doeasn’t work anymore, and don’t know what’s the cause. I tried reinstallation but still seems not to work.

    Antworten
  3. I have managed to run it again. But I had to remove not only packages itself but the folder /usr/syno/synoman/webman/3rdparty. Then only reinstallation brought the working and running Subsonic.
    The weird thing is that the version 019 been affected the very same way and I found out this way on that version.
    Apparently the bug is still there, so it might be worth to look into it. I could run some test but I don’t know how to troubleshoot the thing.

    Antworten
  4. Hi,

    I have loaded the app on a DS2411+ and think it is great. However, I have experienced a few issues:

    If there is any access to the system during the file seek mode at creation the app will reach an „out of memory“ error.

    The Search feature does not work
    The Lyrics feature does not work

    thx-Craig

    Antworten
    • Hi Craig,
      interesting, because you NAS is a quite big one…

      you can try to edit the subsonic.sh in /volumeX/@appstore/Subsonic and set the SUBSONIC_MAX_MEMORY to another level…
      The search feature will only work after the files are scanned. The search index is written at the end of the scanning process.

      For the lyrics feature you might have a look at the Subsonic forum http://forum.subsonic.org, mine is working fine, what is the error you get, when you hit the lyrics button?

      Antworten
  5. OK, I have determined the memory error appears to be towards the indexing of the files. at about 126000 is when it typically crashes. Strange, it worked fine for a day and a half and now it never does even after a re-install. BTW, is it really necessary to reboot the NAS after install? I’ve tried both ways…no difference.

    thx again for everyones help.

    Craig

    Antworten
  6. I increased the memory to 256 and so far so good…..let’s see in the morning.

    Thanks,

    Craig

    Antworten
  7. Works great!!!!!!!

    However, still can’t get the lyrics to work. Any ideas?

    Also, any plans to add an automated sign up process?

    Thx again-Craig

    Antworten
    • Sorry, I have no idea how the lyric function works and where it gets its information from. I can only refer you to the subsonic forum.

      What do you mean with „automated sign up process“?
      For Subsonic users?
      I’m using the Synology Directory Server the Subsonic client is working fine with this:
      LDAP URL: ldap://localhost:389/dc=…YOURDC..,dc=local
      LDAP Search filter: (uid={0})
      LDAP Manager DN: uid=root,cn=users,dc=…YOURDC..,dc=local

      now you can use your Active Directory users in Subsonic and don’t have to create them one by one.

      Antworten
  8. I am loving the package but on my 212+, I get the skipping problem when playing from a FLAC file. I assume this is because the transcoding (as you mentioned above) will go at 100% of CPU until the song is done, but on a little 212+ it’s asking too much, I believe. (I am going FLAC->mp3 for streaming).

    Are there any plans to address this? Did I just buy too weak of a NAS? I figured that the device could easily transcode at the rate of the song being played but did not realize that it would try to blaze through the entire FLAC file and max itself out.

    Antworten
  9. Buen post. Aprendo algo nuevo algo totalmente nuevo y desafiante en
    sitios diario . Siempre será útiles a leer content de otros autores
    y el uso un poco de algo de su sitios web.
    por favor me an
    Hoy en día, me fui a la playa línea de playa con mis niños .
    Encontré una concha de mar y se lo di a mi hija de 4 años y le dije: „Usted puede oír el océano si se pone esto a su oído.“ Ella puso colocada la cubierta de
    la oreja y gritó. Hubo un cangrejo ermitaño en el interior y se pellizcó la oreja.

    Ella no quiere volver! LoL Sé que esto es completamente
    totalmente fuera de tema, pero tuve que decirle
    a alguien!

    Here is my web blog; Maneras de bajar de Peso

    Antworten
  10. When some one searches for his vital thing, therefore he/she needs to be
    available that in detail, so that thing is maintained over here.

    Antworten
  11. When someone writes an paragraph he/she maintains
    the plan of a user in his/her brain that how a
    user can be aware of it. Thus that’s why this paragraph is amazing.

    Thanks!

    Antworten
  12. Quе tal,
    Tengo que reconocer es lа primera vez que he visitado ell sitio y
    tengo que ϲomentar que me eszta gustando y seguramente me veras
    mas a menudo por aqui.
    Un saludo!

    Antworten
  13. What i do not realize is in fact how you’re no longer
    actually a llot moe well-favored tnan you may be rifht now.
    You are so intelligent. You already know therefore significantly in terms of this topic, made me in my opinion believe itt from a lot of varioous
    angles. Its like women and men don’t seesm to be involved
    unless it’s something to do with Woman gaga! Your owwn stuffs outstanding.
    Always care for it up!

    Antworten
  14. I am actually delighted to glance at this weblog posts which includes lots of helpful information, thanks for
    providing these kinds of information.

    Antworten
  15. What’s Going down i’m new to this, I stumbled upon
    this I have discovered It positively helpful and it has helped me
    out loads. I am hoping to give a contribution & help other users like its aided me.
    Good job.

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.