Hello community,

here is the log from the commit of package kajongg for openSUSE:Factory checked 
in at 2013-07-30 15:56:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kajongg (Old)
 and      /work/SRC/openSUSE:Factory/.kajongg.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kajongg"

Changes:
--------
--- /work/SRC/openSUSE:Factory/kajongg/kajongg.changes  2013-07-22 
17:05:21.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.kajongg.new/kajongg.changes     2013-07-30 
15:57:00.000000000 +0200
@@ -1,0 +2,7 @@
+Thu Jul 25 22:24:57 UTC 2013 - [email protected]
+
+- Update to 4.10.97
+  * KDE 4.11 RC 2 release
+  * See http://www.kde.org/announcements/announce-4.11-rc2.php
+
+-------------------------------------------------------------------

Old:
----
  kajongg-4.10.95.tar.xz

New:
----
  kajongg-4.10.97.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kajongg.spec ++++++
--- /var/tmp/diff_new_pack.JyiFsK/_old  2013-07-30 15:57:01.000000000 +0200
+++ /var/tmp/diff_new_pack.JyiFsK/_new  2013-07-30 15:57:01.000000000 +0200
@@ -25,7 +25,7 @@
 License:        GPL-2.0+
 Group:          Amusements/Games/Board/Puzzle
 Url:            http://www.kde.org
-Version:        4.10.95
+Version:        4.10.97
 Release:        0
 Source0:        kajongg-%{version}.tar.xz
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build

++++++ kajongg-4.10.95.tar.xz -> kajongg-4.10.97.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.10.95/src/board.py 
new/kajongg-4.10.97/src/board.py
--- old/kajongg-4.10.95/src/board.py    2013-07-10 01:21:29.000000000 +0200
+++ new/kajongg-4.10.97/src/board.py    2013-07-24 00:21:40.000000000 +0200
@@ -244,7 +244,7 @@
         return sorted([x for x in self.tiles if x.focusable], key=sortFunction)
 
     @apply
-    def hasFocus(): # pylint: disable=E0202
+    def hasFocus():
         """defines if this board should show a focusRect
         if another board has focus, setting this to False does
         not change scene.focusBoard"""
@@ -930,7 +930,7 @@
                 and not game.autoPlay)
 
     @apply
-    def disableFocusRect(): # pylint: disable=E0202
+    def disableFocusRect():
         """suppress focusrect"""
         def fget(self):
             # pylint: disable=W0212
@@ -946,7 +946,7 @@
         return property(**locals())
 
     @apply
-    def focusBoard(): # pylint: disable=E0202
+    def focusBoard():
         """get / set the board that has its focusRect shown"""
         def fget(self):
             # pylint: disable=W0212
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.10.95/src/config.py 
new/kajongg-4.10.97/src/config.py
--- old/kajongg-4.10.95/src/config.py   2013-07-10 01:21:29.000000000 +0200
+++ new/kajongg-4.10.97/src/config.py   2013-07-24 00:21:40.000000000 +0200
@@ -126,6 +126,14 @@
     def __setitem__(self, key, value):
         self.__setattr__(key, value)
 
+    def __delitem__(self, key):
+        """pylint wants this for a complete container, but we do not need it"""
+        del SetupPreferences._Parameters[key]
+
+    def __len__(self):
+        """pylint wants this for a complete container, but we do not need it"""
+        return len(SetupPreferences._Parameters)
+
     def addParameter(self, par):
         """add a parameter to the skeleton"""
         if par.name not in SetupPreferences._Parameters:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.10.95/src/guiutil.py 
new/kajongg-4.10.97/src/guiutil.py
--- old/kajongg-4.10.95/src/guiutil.py  2013-07-10 01:21:29.000000000 +0200
+++ new/kajongg-4.10.97/src/guiutil.py  2013-07-24 00:21:40.000000000 +0200
@@ -58,6 +58,8 @@
 
 class ListComboBox(QComboBox):
     """easy to use with a python list. The elements must have an attribute 
'name'."""
+    # pylint: disable=R0924
+    # pylint wants __setitem__, __getitem__ etc for a perfect container
     def __init__(self, items=None, parent=None):
         QComboBox.__init__(self, parent)
         self.items = items
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.10.95/src/humanclient.py 
new/kajongg-4.10.97/src/humanclient.py
--- old/kajongg-4.10.95/src/humanclient.py      2013-07-10 01:21:29.000000000 
+0200
+++ new/kajongg-4.10.97/src/humanclient.py      2013-07-24 13:12:49.000000000 
+0200
@@ -1009,6 +1009,13 @@
             match = re.search(r".*DNS lookup.*\[Errno -5\] (.*)", message)
             if match:
                 url = url.split(':')[0] # remove the port
+        # current twisted (version 12.3) returns different messages:
+        if not match:
+            match = re.search(r".*DNS lookup failed: address u'(.*)' not 
found.*", message)
+            if match:
+                return u'%s: %s' % (match.group(1), m18n('DNS lookup failed, 
address not found'))
+        if not match:
+            match = re.search(r".*DNS lookup.*\[Errno 110\] (.*)", message)
         if not match:
             match = re.search(r".*while connecting: 113: (.*)", message)
         if match:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.10.95/src/meld.py 
new/kajongg-4.10.97/src/meld.py
--- old/kajongg-4.10.95/src/meld.py     2013-07-10 01:21:30.000000000 +0200
+++ new/kajongg-4.10.97/src/meld.py     2013-07-24 00:21:40.000000000 +0200
@@ -216,6 +216,16 @@
         """Meld[x] returns Tile # x """
         return self.tiles[index]
 
+    def __setitem__(self, index, value):
+        """sets a tile in the meld. Not currently used but pylint
+        wants the container to be perfect"""
+        raise Exception("Assigning a tile to a Meld is not supported")
+
+    def __delitem__(self, index):
+        """removes a tile from the meld. Not currently used but pylint
+        wants the container to be perfect"""
+        raise Exception("removing a tile from a Meld is not supported")
+
     def __eq__(self, other):
         return isinstance(other, Meld) and self.pairs == other.pairs
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.10.95/src/player.py 
new/kajongg-4.10.97/src/player.py
--- old/kajongg-4.10.95/src/player.py   2013-07-10 01:21:30.000000000 +0200
+++ new/kajongg-4.10.97/src/player.py   2013-07-24 00:21:40.000000000 +0200
@@ -162,7 +162,7 @@
         self.__hand = None
 
     @apply
-    def hand(): # pylint: disable=E0202
+    def hand():
         """a readonly tuple"""
         def fget(self):
             # pylint: disable=W0212
@@ -172,7 +172,7 @@
         return property(**locals())
 
     @apply
-    def bonusTiles(): # pylint: disable=E0202
+    def bonusTiles():
         """a readonly tuple"""
         def fget(self):
             # pylint: disable=W0212
@@ -180,7 +180,7 @@
         return property(**locals())
 
     @apply
-    def concealedTileNames(): # pylint: disable=E0202
+    def concealedTileNames():
         """a readonly tuple"""
         def fget(self):
             # pylint: disable=W0212
@@ -188,7 +188,7 @@
         return property(**locals())
 
     @apply
-    def exposedMelds(): # pylint: disable=E0202
+    def exposedMelds():
         """a readonly tuple"""
         def fget(self):
             # pylint: disable=W0212
@@ -196,7 +196,7 @@
         return property(**locals())
 
     @apply
-    def concealedMelds(): # pylint: disable=E0202
+    def concealedMelds():
         """a readonly tuple"""
         def fget(self):
             # pylint: disable=W0212
@@ -204,7 +204,7 @@
         return property(**locals())
 
     @apply
-    def mayWin(): # pylint: disable=E0202
+    def mayWin():
         """a readonly tuple"""
         def fget(self):
             # pylint: disable=W0212
@@ -299,6 +299,7 @@
             # pylint: disable=W0212
             return self.__payment
         def fset(self, payment):
+            # pylint: disable=W0212
             assert payment == 0
             self.__payment = 0
         return property(**locals())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.10.95/src/playfield.py 
new/kajongg-4.10.97/src/playfield.py
--- old/kajongg-4.10.95/src/playfield.py        2013-07-10 01:21:30.000000000 
+0200
+++ new/kajongg-4.10.97/src/playfield.py        2013-07-24 00:21:40.000000000 
+0200
@@ -49,13 +49,13 @@
     from PyQt4.QtGui import QGridLayout, QAction
     from PyQt4.QtGui import QComboBox, QSlider, QHBoxLayout, QLabel
     from PyQt4.QtGui import QVBoxLayout, QSpacerItem, QSizePolicy, QCheckBox
-except ImportError, e:
-    NOTFOUND.append('Package python-qt4: PyQt4: %s' % e)
+except ImportError, importError:
+    NOTFOUND.append('Package python-qt4: PyQt4: %s' % importError)
 
 try:
     from zope.interface import implements # pylint: disable=W0611
-except ImportError, e:
-    NOTFOUND.append('Package python-zope-interface missing: %s' % e)
+except ImportError, importError:
+    NOTFOUND.append('Package python-zope-interface missing: %s' % importError)
 
 from kde import Sorry, QuestionYesNo, KIcon, KAction, KApplication, 
KToggleFullScreenAction, \
     KXmlGuiWindow, KConfigDialog, KStandardAction
@@ -86,8 +86,8 @@
     from game import Game, ScoringGame
     from chat import ChatWindow
 
-except ImportError, e:
-    NOTFOUND.append('kajongg is not correctly installed: modules: %s' % e)
+except ImportError, importError:
+    NOTFOUND.append('kajongg is not correctly installed: modules: %s' % 
importError)
 
 if len(NOTFOUND):
     MSG = "\n".join(" * %s" % s for s in NOTFOUND)
@@ -727,29 +727,30 @@
         """retranslate"""
         self.actionScoreGame.setText(m18nc('@action:inmenu', "&Score Manual 
Game"))
         self.actionScoreGame.setIconText(m18nc('@action:intoolbar', 'Manual 
Game'))
-        self.actionScoreGame.setHelpText(m18nc('@info:tooltip', '&Score a 
manual game.'))
+        self.actionScoreGame.setHelpText(m18nc('kajongg @info:tooltip', 
'&Score a manual game.'))
 
         self.actionPlayGame.setText(m18nc('@action:intoolbar', "&Play"))
         self.actionPlayGame.setPriority(QAction.LowPriority)
-        self.actionPlayGame.setHelpText(m18nc('@info:tooltip', 'Start a new 
game.'))
+        self.actionPlayGame.setHelpText(m18nc('kajongg @info:tooltip', 'Start 
a new game.'))
 
         self.actionAbortGame.setText(m18nc('@action:inmenu', "&Abort Game"))
         self.actionAbortGame.setPriority(QAction.LowPriority)
-        self.actionAbortGame.setHelpText(m18nc('@info:tooltip', 'Abort the 
current game.'))
+        self.actionAbortGame.setHelpText(m18nc('kajongg @info:tooltip', 'Abort 
the current game.'))
 
         self.actionQuit.setText(m18nc('@action:inmenu', "&Quit Kajongg"))
         self.actionQuit.setPriority(QAction.LowPriority)
 
         self.actionPlayers.setText(m18nc('@action:intoolbar', "&Players"))
-        self.actionPlayers.setHelpText(m18nc('@info:tooltip', 'define your 
players.'))
+        self.actionPlayers.setHelpText(m18nc('kajongg @info:tooltip', 'define 
your players.'))
 
         self.actionAngle.setText(m18nc('@action:inmenu', "&Change Visual 
Angle"))
         self.actionAngle.setIconText(m18nc('@action:intoolbar', "Angle"))
-        self.actionAngle.setHelpText(m18nc('@info:tooltip', "Change the visual 
appearance of the tiles."))
+        self.actionAngle.setHelpText(m18nc('kajongg @info:tooltip', "Change 
the visual appearance of the tiles."))
 
         self.actionScoring.setText(m18nc('@action:inmenu', "&Show Scoring 
Editor"))
         self.actionScoring.setIconText(m18nc('@action:intoolbar', "&Scoring"))
-        self.actionScoring.setHelpText(m18nc('@info:tooltip', "Show or hide 
the scoring editor for a manual game."))
+        self.actionScoring.setHelpText(m18nc('kajongg @info:tooltip',
+                "Show or hide the scoring editor for a manual game."))
 
         self.actionScoreTable.setText(m18nc('kajongg @action:inmenu', "&Score 
Table"))
         self.actionScoreTable.setIconText(m18nc('kajongg @action:intoolbar', 
"&Scores"))
@@ -758,16 +759,16 @@
 
         self.actionExplain.setText(m18nc('@action:inmenu', "&Explain Scores"))
         self.actionExplain.setIconText(m18nc('@action:intoolbar', "&Explain"))
-        self.actionExplain.setHelpText(m18nc('@info:tooltip',
+        self.actionExplain.setHelpText(m18nc('kajongg @info:tooltip',
                 'Explain the scoring for all players in the current game.'))
 
         self.actionAutoPlay.setText(m18nc('@action:inmenu', "&Demo Mode"))
         self.actionAutoPlay.setPriority(QAction.LowPriority)
-        self.actionAutoPlay.setHelpText(m18nc('@info:tooltip',
+        self.actionAutoPlay.setHelpText(m18nc('kajongg @info:tooltip',
                 'Let the computer take over for you. Start a new local game if 
needed.'))
 
         self.actionChat.setText(m18n("C&hat"))
-        self.actionChat.setHelpText(m18nc('@info:tooltip', 'Chat with the 
other players.'))
+        self.actionChat.setHelpText(m18nc('kajongg @info:tooltip', 'Chat with 
the other players.'))
 
     def changeEvent(self, event):
         """when the applicationwide language changes, recreate GUI"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.10.95/src/query.py 
new/kajongg-4.10.97/src/query.py
--- old/kajongg-4.10.95/src/query.py    2013-07-10 01:21:30.000000000 +0200
+++ new/kajongg-4.10.97/src/query.py    2013-07-24 00:21:40.000000000 +0200
@@ -394,7 +394,8 @@
         name = 'kajonggserver.db'
     else:
         name = 'kajongg.db'
-    dbpath = InternalParameters.dbPath or appdataDir() + name
+
+    dbpath = InternalParameters.dbPath.decode('utf-8') if 
InternalParameters.dbPath else appdataDir() + name
     dbhandle.setDatabaseName(dbpath)
     dbExisted = os.path.exists(dbpath)
     if Debug.sql:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.10.95/src/rule.py 
new/kajongg-4.10.97/src/rule.py
--- old/kajongg-4.10.95/src/rule.py     2013-07-10 01:21:30.000000000 +0200
+++ new/kajongg-4.10.97/src/rule.py     2013-07-24 19:43:44.000000000 +0200
@@ -24,7 +24,7 @@
 import re # the new regex is about 7% faster
 from hashlib import md5 # pylint: disable=E0611
 
-from PyQt4.QtCore import QString
+from PyQt4.QtCore import QString, QVariant
 
 from util import m18n, m18nc, m18nE, english, logException
 from query import Query
@@ -54,6 +54,24 @@
         """set all to 0"""
         self.points = self.doubles = self.limits = 0
 
+    def change(self, unitName, value):
+        """sets value for unitName. If changed, return True"""
+        oldValue = self.__getattribute__(unitName)
+        if isinstance(value, QVariant):
+            value = value.toString()
+        newValue = type(oldValue)(value)
+        if newValue == oldValue:
+            return False, None
+        if newValue:
+            if unitName == 'points':
+                if self.doubles:
+                    return False, 'Cannot have points and doubles'
+            if unitName == 'doubles':
+                if self.points:
+                    return False, 'Cannot have points and doubles'
+        self.__setattr__(unitName, newValue)
+        return True, None
+
     def __str__(self):
         """make score printable"""
         parts = []
@@ -667,6 +685,7 @@
             return self._definition
         def fset(self, definition):
             """setter for definition"""
+            # pylint: disable=W0212
             assert not isinstance(definition, QString)
             prevDefinition = self.definition
             self._definition = definition
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.10.95/src/server.py 
new/kajongg-4.10.97/src/server.py
--- old/kajongg-4.10.95/src/server.py   2013-07-10 01:21:30.000000000 +0200
+++ new/kajongg-4.10.97/src/server.py   2013-07-24 00:21:40.000000000 +0200
@@ -147,7 +147,7 @@
         self.loadedFromDb = False
 
     @apply
-    def suspended(): # pylint: disable=E0202
+    def suspended():
         """is this table holding a suspended game?"""
         def fget(self):
             # pylint: disable=W0212
@@ -659,8 +659,6 @@
             assert player.isCalling, '%s: concmelds:%s withdiscard:%s 
lastmeld:%s' % (
                 player, concealedMelds, withDiscard, lastMeld)
         discardingPlayer = self.game.activePlayer
-        # pylint: disable=E1103
-        # (pylint ticket 8774)
         lastMove = self.game.lastMoves(without=[Message.PopupMsg]).next()
         robbedTheKong = lastMove.message == Message.DeclaredKong
         if robbedTheKong:
@@ -1091,8 +1089,6 @@
     realm = MJRealm()
     realm.server = MJServer()
     kajonggPortal = portal.Portal(realm, [DBPasswordChecker()])
-    # pylint: disable=E1101
-    # pylint thinks reactor is missing listen* and run
     loadPredefinedRulesets()
     try:
         if InternalParameters.socket:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.10.95/src/sound.py 
new/kajongg-4.10.97/src/sound.py
--- old/kajongg-4.10.95/src/sound.py    2013-07-10 01:21:30.000000000 +0200
+++ new/kajongg-4.10.97/src/sound.py    2013-07-24 00:21:40.000000000 +0200
@@ -19,7 +19,7 @@
 """
 
 import os, tarfile, subprocess, datetime, cStringIO
-from hashlib import md5  # pylint: disable=E0611
+from hashlib import md5
 if os.name == 'nt':
     import winsound # pylint: disable=F0401
 
@@ -180,7 +180,8 @@
         if len(self.directory) == 32:
             if os.path.split(self.directory)[1] == self.md5sum:
                 return 'remote'
-        if self.directory.startswith(os.environ['HOME']):
+        home = os.environ['HOME'].decode('utf-8')
+        if self.directory.startswith(home):
             return 'local'
         result = os.path.split(self.directory)[0]
         result = os.path.split(result)[1]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.10.95/src/tile.py 
new/kajongg-4.10.97/src/tile.py
--- old/kajongg-4.10.95/src/tile.py     2013-07-10 01:21:30.000000000 +0200
+++ new/kajongg-4.10.97/src/tile.py     2013-07-24 00:21:40.000000000 +0200
@@ -319,7 +319,7 @@
             self.graphics.update()
 
     @apply
-    def focusable(): # pylint: disable=E0202
+    def focusable():
         """redirect to self.graphics."""
         def fget(self):
             return bool(self.graphics.flags() & QGraphicsItem.ItemIsFocusable)
@@ -333,7 +333,7 @@
         return property(**locals())
 
     @apply
-    def board(): # pylint: disable=E0202
+    def board():
         """get current board of this tile. Readonly."""
         def fget(self):
             # pylint: disable=W0212
@@ -341,7 +341,7 @@
         return property(**locals())
 
     @apply
-    def xoffset(): # pylint: disable=E0202
+    def xoffset():
         """in logical board coordinates"""
         # pylint: disable=W0212
         def fget(self):
@@ -354,7 +354,7 @@
         return property(**locals())
 
     @apply
-    def yoffset(): # pylint: disable=E0202
+    def yoffset():
         """in logical board coordinates"""
         # pylint: disable=W0212
         def fget(self):
@@ -367,7 +367,7 @@
         return property(**locals())
 
     @apply
-    def element(): # pylint: disable=E0202
+    def element():
         """tileName"""
         def fget(self):
             # pylint: disable=W0212
@@ -382,7 +382,7 @@
         return property(**locals())
 
     @apply
-    def dark(): # pylint: disable=E0202
+    def dark():
         """show face?"""
         def fget(self):
             # pylint: disable=W0212
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.10.95/src/uiwall.py 
new/kajongg-4.10.97/src/uiwall.py
--- old/kajongg-4.10.95/src/uiwall.py   2013-07-10 01:21:30.000000000 +0200
+++ new/kajongg-4.10.97/src/uiwall.py   2013-07-24 00:21:40.000000000 +0200
@@ -93,6 +93,18 @@
         """make Wall index-able"""
         return self.__sides[index]
 
+    def __setitem__(self, index, value):
+        """only for pylint, currently not used"""
+        self.__sides[index] = value
+
+    def __delitem__(self, index):
+        """only for pylint, currently not used"""
+        del self.__sides[index]
+
+    def __len__(self):
+        """only for pylint, currently not used"""
+        return len(self.__sides)
+
     def hide(self):
         """hide all four walls and their decorators"""
         for side in self.__sides:
@@ -157,7 +169,6 @@
         return property(**locals())
 
     @apply
-    # pylint: disable=E0202
     def tileset():
         """setting this actually changes the visuals."""
         def fget(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kajongg-4.10.95/src/util.py 
new/kajongg-4.10.97/src/util.py
--- old/kajongg-4.10.95/src/util.py     2013-07-10 01:21:30.000000000 +0200
+++ new/kajongg-4.10.97/src/util.py     2013-07-24 00:21:40.000000000 +0200
@@ -47,8 +47,6 @@
     from kde import i18n, i18nc, Sorry, Information
 else:
     # a server might not have KDE4
-    # pylint thinks those are already defined
-    # pylint: disable=E0102
     def i18n(englishIn, *args):
         """dummy for server"""
         result = englishIn
@@ -95,7 +93,7 @@
             os.makedirs(newPath)
         return newPath
     else:
-        result = os.path.dirname(str(KGlobal.dirs().locateLocal("appdata", 
""))) + '/'
+        result = os.path.dirname(unicode(KGlobal.dirs().locateLocal("appdata", 
""))) + '/'
         return result
 
 def cacheDir():
@@ -103,7 +101,7 @@
     if InternalParameters.isServer:
         result = os.path.join(appdataDir(), 'cache')
     else:
-        result = os.path.dirname(str(KGlobal.dirs().locateLocal("cache", "")))
+        result = os.path.dirname(unicode(KGlobal.dirs().locateLocal("cache", 
"")))
         result = os.path.join(result, 'kajongg')
     if not os.path.exists(result):
         os.makedirs(result)

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to