Bitcoin Forum
April 19, 2024, 07:57:13 PM *
News: Latest Bitcoin Core release: 26.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 »  All
  Print  
Author Topic: [ANN] Eloipool - FAST Python3 pool server software - GBT/stratum/dyntarget/proxy  (Read 123078 times)
Luke-Jr (OP)
Legendary
*
Offline Offline

Activity: 2576
Merit: 1186



View Profile
December 29, 2012, 05:59:00 AM
 #61

is it possible to use PPS reward shares count to use with  GBT/stratum/dyntarget ? does GBT/stratum/dyntarget/proxy affects shares  count ?
i want to use eloipool with PPS reward method (count shares in database) is it correct  ? or wrong method with eloipool and  GBT/stratum/dyntarget/proxy enabled ?
Eloipool just handles the miners. It's up to you how you pay them. As long as you log the share target/difficulty, you should be able to calculate the correct PPS value for each share.

1713556633
Hero Member
*
Offline Offline

Posts: 1713556633

View Profile Personal Message (Offline)

Ignore
1713556633
Reply with quote  #2

1713556633
Report to moderator
1713556633
Hero Member
*
Offline Offline

Posts: 1713556633

View Profile Personal Message (Offline)

Ignore
1713556633
Reply with quote  #2

1713556633
Report to moderator
Even if you use Bitcoin through Tor, the way transactions are handled by the network makes anonymity difficult to achieve. Do not expect your transactions to be anonymous unless you really know what you're doing.
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
tomaszsz
Member
**
Offline Offline

Activity: 76
Merit: 10


View Profile
December 29, 2012, 07:27:36 AM
 #62

but eloipool does not log share  difficult by default ? how to enable  this feature ?

or I have  to swith off dynamic target/difficult (DynamicTargeting =0 ) to get correct PPS calculation ...


or it does not depends from DynamicTargeting  variable, and PPS calculation  (and in fact other method ?) is impossible in eloipool ?
Luke-Jr (OP)
Legendary
*
Offline Offline

Activity: 2576
Merit: 1186



View Profile
December 29, 2012, 10:44:27 AM
 #63

but eloipool does not log share  difficult by default ? how to enable  this feature ?

or I have  to swith off dynamic target/difficult (DynamicTargeting =0 ) to get correct PPS calculation ...


or it does not depends from DynamicTargeting  variable, and PPS calculation  (and in fact other method ?) is impossible in eloipool ?
Eloipool doesn't log anything by default. You have to configure it.
Take your pick (add to share log statement - note the difference between curly braces and normal parenthesis):
  • {target} - Full target as a number (up to 256 bit; you probably don't really want this)
  • {target2pdiff(target)} - Target converted to "pool difficulty" (pdiff 1 = first 32 bits of target are 0, rest is 1; this is what pools used before vardiff)
  • {target2bdiff(target)} - Target converted to truncated "bitcoin difficulty" (bdiff 1 = first 32 bits of target are 0, next 16 are 1, then the rest are 0; this is what bitcoind reports as the difficulty)

tomaszsz
Member
**
Offline Offline

Activity: 76
Merit: 10


View Profile
December 29, 2012, 02:19:15 PM
 #64

i have add  {target2bdiff(target)}  and get this error

Code:

Traceback (most recent call last):
  File "/xxxxxxxxxxxxxxxxxxxxx/jsonrpcserver.py", line 200, in _doJSON_i
    rv = getattr(self, method)(*params)
  File "/xxxxxxxxxxxxxxxxxxxxx/jsonrpc_getwork.py", line 44, in doJSON_getwork
    return self.doJSON_submitwork(data)
  File "/xxxxxxxxxxxxxxxxxxxxx/jsonrpc_getwork.py", line 81, in doJSON_submitwork
    self.server.receiveShare(share)
  File "/xxxxxxxxxxxxxxxxxxxxx/eloipool12.py", line 579, in receiveShare
    logShare(share)
  File "/xxxxxxxxxxxxxxxxxxxxx/eloipool12.py", line 568, in logShare
    i.logShare(share)
  File "/xxxxxxxxxxxxxxxxxxxxx/sharelogging/logfile.py", line 60, in logShare
    logline = self.fmt.formatShare(share)
  File "/xxxxxxxxxxxxxxxxxxxxx/util.py", line 55, in formatShare
    (stmt, params) = self.applyToShare(*a, **ka)
  File "/xxxxxxxxxxxxxxxxxxxxx/util.py", line 62, in applyToShare
    params.append(f(share))
  File "/xxxxxxxxxxxxxxxxxxxxx/util.py", line 115, in <lambda>
    return lambda s: target2bdiff(subfunc(s))
  File "/xxxxxxxxxxxxxxxxxxxxx/util.py", line 44, in target2bdiff
    bdiff = bdiff1target / target
TypeError: unsupported operand type(s) for /: 'int' and 'NoneType'

so it look like  {target2bdiff(target)}  is buggy



but   {target2pdiff(target)}  seems to be ok Smiley
what means when someone have 1 ? and other user None ? as a result    {target2pdiff(target)}  in share log ?
Luke-Jr (OP)
Legendary
*
Offline Offline

Activity: 2576
Merit: 1186



View Profile
December 29, 2012, 02:26:21 PM
 #65

i have add  {target2bdiff(target)}  and get this error

Code:

Traceback (most recent call last):
  File "/xxxxxxxxxxxxxxxxxxxxx/jsonrpcserver.py", line 200, in _doJSON_i
    rv = getattr(self, method)(*params)
  File "/xxxxxxxxxxxxxxxxxxxxx/jsonrpc_getwork.py", line 44, in doJSON_getwork
    return self.doJSON_submitwork(data)
  File "/xxxxxxxxxxxxxxxxxxxxx/jsonrpc_getwork.py", line 81, in doJSON_submitwork
    self.server.receiveShare(share)
  File "/xxxxxxxxxxxxxxxxxxxxx/eloipool12.py", line 579, in receiveShare
    logShare(share)
  File "/xxxxxxxxxxxxxxxxxxxxx/eloipool12.py", line 568, in logShare
    i.logShare(share)
  File "/xxxxxxxxxxxxxxxxxxxxx/sharelogging/logfile.py", line 60, in logShare
    logline = self.fmt.formatShare(share)
  File "/xxxxxxxxxxxxxxxxxxxxx/util.py", line 55, in formatShare
    (stmt, params) = self.applyToShare(*a, **ka)
  File "/xxxxxxxxxxxxxxxxxxxxx/util.py", line 62, in applyToShare
    params.append(f(share))
  File "/xxxxxxxxxxxxxxxxxxxxx/util.py", line 115, in <lambda>
    return lambda s: target2bdiff(subfunc(s))
  File "/xxxxxxxxxxxxxxxxxxxxx/util.py", line 44, in target2bdiff
    bdiff = bdiff1target / target
TypeError: unsupported operand type(s) for /: 'int' and 'NoneType'

so it look like  {target2bdiff(target)}  is buggy



but   {target2pdiff(target)}  seems to be ok Smiley
what means when someone have 1 ? and other user None ? as a result    {target2pdiff(target)}  in share log ?
Some errors/rejects occur before the pool knows the target the share is being submitted at, so those get None.
As you noticed, target2bdiff doesn't like this currently... should be an easy fix.

tomaszsz
Member
**
Offline Offline

Activity: 76
Merit: 10


View Profile
December 29, 2012, 02:45:18 PM
 #66

i see that there is in fact two errors when i use {target2bdiff(target)}

1.  JSONRPCHandler  ERROR   Error during JSON-RPC
and then
2. TypeError: unsupported operand type(s) for /: 'int' and 'NoneType

Code:
>>> 2012-12-29 15:10:46,080     JSONRPCHandler  ERROR   Error during JSON-RPC call: doJSON_getwork['00000002b3adf6e137be13xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Traceback (most recent call last):
  File "/xxxxxxxxxxxxxxxxxx/eloipool12.py", line 573, in receiveShare
    checkShare(share)
  File "/xxxxxxxxxxxxxxxxxx/eloipool12.py", line 392, in checkShare
    checkData(share)
  File "/xxxxxxxxxxxxxxxxxx/eloipool12.py", line 353, in checkData
    raise RejectedShare('bad-prevblk')
util.RejectedShare: bad-prevblk

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/xxxxxxxxxxxxxxxxxx/jsonrpcserver.py", line 200, in _doJSON_i
    rv = getattr(self, method)(*params)
  File "/xxxxxxxxxxxxxxxxxx/jsonrpc_getwork.py", line 44, in doJSON_getwork
    return self.doJSON_submitwork(data)
  File "/xxxxxxxxxxxxxxxxxx/jsonrpc_getwork.py", line 81, in doJSON_submitwork
    self.server.receiveShare(share)
  File "/xxxxxxxxxxxxxxxxxx/eloipool12.py", line 579, in receiveShare
    logShare(share)
  File "/xxxxxxxxxxxxxxxxxx/eloipool12.py", line 568, in logShare
    i.logShare(share)
  File "/xxxxxxxxxxxxxxxxxx/sharelogging/logfile.py", line 60, in logShare
    logline = self.fmt.formatShare(share)
  File "/xxxxxxxxxxxxxxxxxx/util.py", line 55, in formatShare
    (stmt, params) = self.applyToShare(*a, **ka)
  File "/xxxxxxxxxxxxxxxxxx/util.py", line 62, in applyToShare
    params.append(f(share))
  File "/xxxxxxxxxxxxxxxxxx/util.py", line 115, in <lambda>
    return lambda s: target2bdiff(subfunc(s))
  File "/xxxxxxxxxxxxxxxxxx/util.py", line 44, in target2bdiff
    bdiff = bdiff1target / target
TypeError: unsupported operand type(s) for /: 'int' and 'NoneType'


i dont know if it is importent
tomaszsz
Member
**
Offline Offline

Activity: 76
Merit: 10


View Profile
December 30, 2012, 06:19:01 AM
 #67

By the way, what is the use of GotWorkURI? Shares found from getmemorypool work cannot be submitted via getwork, or can they?
GotWorkURI is for merged mining. gotwork != getwork

I think that eloipool need more complex exemple configuration and step by step quick start guide  (in few scenerios ?  ) . Is there any example for merged mining configuration ? Could someone post  some config files ?  I tried to do it, but it is to complicated . just few lines of config from eloipool and bitcoin (altcoin) daemon proxy ?

UpstreamURI ? SecretUser? UpstreamBitCoinNode ?GotWorkURI ? BitCoinNodeAddresses ?

Whish version bitcoind shuld i use ? with merged ? which proxy ?

i have tries many  difrent configuration, and it still does not work....

could someone post example config ? is it possible to get it all together online ?


mich
Legendary
*
Offline Offline

Activity: 3108
Merit: 1032


#1 VIP Crypto Casino


View Profile
January 22, 2013, 01:28:17 PM
 #68

How to setup stratum in eloipool? stratumserver.py is included but can't find any settings of stratum there.
Thanks

.
.BITCASINO.. 
.
#1 VIP CRYPTO CASINO

▄██████████████▄
█▄████████████▄▀▄▄▄
█████████████████▄▄▄
█████▄▄▄▄▄▄██████████████▄
███████████████████████████████
████▀█████████████▄▄██████████
██████▀██████████████████████
████████████████▀██████▌████
███████████████▀▀▄█▄▀▀█████▀
███████████████████▀▀█████▀
 ▀▀▀▀▀▀▀██████████████
          ▀▀▀████████
                ▀▀▀███

.
......PLAY......
Luke-Jr (OP)
Legendary
*
Offline Offline

Activity: 2576
Merit: 1186



View Profile
January 22, 2013, 01:33:06 PM
 #69

How to setup stratum in eloipool? stratumserver.py is included but can't find any settings of stratum there.
Thanks
Just add a StratumAddresses to the config.

RoboCoder
Sr. Member
****
Offline Offline

Activity: 388
Merit: 250


Save A Life, Adopt a Pet Today!


View Profile WWW
January 28, 2013, 07:29:17 PM
 #70

Howdy,

Was wondering if anyone had tried eloipool on a windows server?  Also, which version of the bitcoind is recommended for the best performance.

Luke-Jr (OP)
Legendary
*
Offline Offline

Activity: 2576
Merit: 1186



View Profile
January 28, 2013, 08:08:12 PM
 #71

Was wondering if anyone had tried eloipool on a windows server?
"Windows" and "server" don't go together. And no, it won't work on Windows. You could possibly port it to use select(), but that's going to run into scaling problems very quickly. Too bad Windows doesn't have any sane socket polling interface - but I guess that's why it isn't a server platform.

Also, which version of the bitcoind is recommended for the best performance.
Eligius and I think some others are running my 0.6.0.eligius branch, based on 0.6.0.x (but does have even better GBT support than mainline).

Parazyd
Hero Member
*****
Offline Offline

Activity: 812
Merit: 587


Space Lord


View Profile WWW
February 09, 2013, 08:19:29 AM
 #72

Could anyone help me with setting up the config.py?
Thanks!
tomaszsz
Member
**
Offline Offline

Activity: 76
Merit: 10


View Profile
February 10, 2013, 07:23:23 AM
Last edit: February 10, 2013, 07:56:56 AM by tomaszsz
 #73

Thanks Luke-Jr Smiley for great  eloipool it is the best  the best software pool I have ever seen      ! and "It's Alive!!!" Smiley


i get this error ... is this normal ? what can cause this error  ?

Quote
2013-02-10 08:11:47,172 JSONRPCServer   INFO    Longpoll woke up xx clients in 0.009 seconds
Unhandled exception in thread started by <bound method merkleMaker._bootstrap of <merkleMaker(Thread-2, stopped daemon 140194112648960)>>
Traceback (most recent call last):
  File "/home/xxxx/merklemaker.py", line 503, in run
  File "/home/xxxx/merklemaker.py", line 493, in merkleMaker_I
  File "/home/xxxx/merklemaker.py", line 471, in merkleMaker_II
  File "/home/xxxx/merklemaker.py", line 277, in updateMerkleTree
  File "/home/xxxx/jsonrpc/authproxy.py", line 95, in __call__
  File "/usr/lib/python3.1/http/client.py", line 932, in request
  File "/usr/lib/python3.1/http/client.py", line 970, in _send_request
  File "/usr/lib/python3.1/http/client.py", line 928, in endheaders
  File "/usr/lib/python3.1/http/client.py", line 782, in _send_output
  File "/usr/lib/python3.1/http/client.py", line 723, in send
  File "/usr/lib/python3.1/http/client.py", line 705, in connect
  File "/usr/lib/python3.1/socket.py", line 292, in create_connection
socket.gaierror: [Errno -5] No address associated with hostname

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.1/threading.py", line 516, in _bootstrap_inner
  File "/home/xxxx/merklemaker.py", line 505, in run
  File "/usr/lib/python3.1/traceback.py", line 269, in format_exc
  File "/usr/lib/python3.1/traceback.py", line 186, in format_exception
  File "/usr/lib/python3.1/traceback.py", line 75, in format_tb
  File "/usr/lib/python3.1/traceback.py", line 100, in extract_tb
  File "/usr/lib/python3.1/linecache.py", line 15, in getline
  File "/usr/lib/python3.1/linecache.py", line 41, in getlines
  File "/usr/lib/python3.1/linecache.py", line 132, in updatecache
IOError: [Errno 24] Too many open files: '/home/xxxx/merklemaker.py'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.1/threading.py", line 489, in _bootstrap
  File "/usr/lib/python3.1/threading.py", line 529, in _bootstrap_inner
  File "/usr/lib/python3.1/traceback.py", line 269, in format_exc
  File "/usr/lib/python3.1/traceback.py", line 186, in format_exception
  File "/usr/lib/python3.1/traceback.py", line 75, in format_tb
  File "/usr/lib/python3.1/traceback.py", line 100, in extract_tb
  File "/usr/lib/python3.1/linecache.py", line 15, in getline
  File "/usr/lib/python3.1/linecache.py", line 41, in getlines
  File "/usr/lib/python3.1/linecache.py", line 132, in updatecache
IOError: [Errno 24] Too many open files: '/home/xxxx/merklemaker.py'


and this when i use sql mysql share login
Quote
During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.1/dist-packages/pymysql/connections.py", line 734, in _connect
socket.gaierror: [Errno -5] No address associated with hostname

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/xxxx/jsonrpcserver.py", line 196, in _doJSON_i
  File "/home/xxxx/jsonrpc_getwork.py", line 44, in doJSON_getwork
  File "/home/xxxx/jsonrpc_getwork.py", line 79, in doJSON_submitwork
  File "/home/xxxx/eloipool9.py", line 461, in receiveShare
  File "/home/xxxx/sharelogging/sql.py", line 90, in logShare
  File "/usr/local/lib/python3.1/dist-packages/pymysql/__init__.py", line 93, in Connect
  File "/usr/local/lib/python3.1/dist-packages/pymysql/connections.py", line 575, in __init__
  File "/usr/local/lib/python3.1/dist-packages/pymysql/connections.py", line 744, in _connect
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (-5)")

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/xxxx/jsonrpcserver.py", line 260, in handle_request
  File "/home/xxxx/jsonrpcserver.py", line 243, in doJSON
  File "/home/xxxx/jsonrpcserver.py", line 201, in _doJSON_i
  File "/usr/lib/python3.1/traceback.py", line 269, in format_exc
  File "/usr/lib/python3.1/traceback.py", line 186, in format_exception
  File "/usr/lib/python3.1/traceback.py", line 75, in format_tb
  File "/usr/lib/python3.1/traceback.py", line 100, in extract_tb
  File "/usr/lib/python3.1/linecache.py", line 15, in getline
  File "/usr/lib/python3.1/linecache.py", line 41, in getlines
  File "/usr/lib/python3.1/linecache.py", line 132, in updatecache
IOError: [Errno 24] Too many open files: '/usr/local/lib/python3.1/dist-packages/pymysql/connections.py'

During handling of the above exception, another exception occurred:


is it mean that someone open too much socket connections to server ? flood or something  ?
i get this error in every version eloipool


in last version i get this

Quote
2013-02-10 08:32:47,093 merkleMaker     CRITICAL        Traceback (most recent call last):
  File "/home/xxxx/merklemaker.py", line 675, in run
    self.merkleMaker_I()
  File "/home/xxxx/merklemaker.py", line 665, in merkleMaker_I
    self.merkleMaker_II()
  File "/home/xxxx/merklemaker.py", line 631, in merkleMaker_II
    return self.updateMerkleTree()
  File "/home/xxxx/merklemaker.py", line 536, in updateMerkleTree
    self._updateMerkleTree_I()
  File "/home/xxxx/merklemaker.py", line 522, in _updateMerkleTree_I
    raise RuntimeError('Failed to create usable template')
RuntimeError: Failed to create usable template

in new version i noticed that there  is new section TemplateSource and BlockSubmision , This is great, I think that this configuration is clearer than previous versions

if You can describe configuration in which you run your test it will be very usefull Smiley (eg. bincond ports and bitcoin.conf +  config.py )
Luke-Jr (OP)
Legendary
*
Offline Offline

Activity: 2576
Merit: 1186



View Profile
February 10, 2013, 07:43:35 AM
 #74

Looks like you need to raise your fd limits (check out man ulimit), and double check your UpstreamURI (or TemplateSources in newer configs)

tomaszsz
Member
**
Offline Offline

Activity: 76
Merit: 10


View Profile
February 10, 2013, 01:07:25 PM
Last edit: February 10, 2013, 01:26:05 PM by tomaszsz
 #75

Looks like you need to raise your fd limits (check out man ulimit), and double check your UpstreamURI (or TemplateSources in newer configs)

fd limits is ok (after increase limit and RELOG )

but still get this error

Quote
2013-02-10 14:05:42,145 merkleMaker     CRITICAL        Traceback (most recent call last):
  File "/home/xxxxxx/merklemaker.py", line 675, in run
    self.merkleMaker_I()
  File "/home/xxxxxx/merklemaker.py", line 665, in merkleMaker_I
    self.merkleMaker_II()
  File "/home/xxxxxx/merklemaker.py", line 631, in merkleMaker_II
    return self.updateMerkleTree()
  File "/home/xxxxxx/merklemaker.py", line 536, in updateMerkleTree
    self._updateMerkleTree_I()
  File "/home/xxxxxx/merklemaker.py", line 522, in _updateMerkleTree_I
    raise RuntimeError('Failed to create usable template')
RuntimeError: Failed to create usable template

2013-02-10 14:05:42,145 merkleMaker     CRITICAL        Traceback (most recent call last):
  File "/home/xxxxxx/merklemaker.py", line 675, in run
    self.merkleMaker_I()
  File "/home/xxxxxx/merklemaker.py", line 665, in merkleMaker_I
    self.merkleMaker_II()
  File "/home/xxxxxx/merklemaker.py", line 631, in merkleMaker_II
    return self.updateMerkleTree()
  File "/home/xxxxxx/merklemaker.py", line 536, in updateMerkleTree
    self._updateMerkleTree_I()
  File "/home/xxxxxx/merklemaker.py", line 522, in _updateMerkleTree_I
    raise RuntimeError('Failed to create usable template')
RuntimeError: Failed to create usable template

2013-02-10 14:05:42,162 merkleMaker     CRITICAL        Traceback (most recent call last):
  File "/home/xxxxxx/merklemaker.py", line 675, in run
    self.merkleMaker_I()
  File "/home/xxxxxx/merklemaker.py", line 665, in merkleMaker_I
    self.merkleMaker_II()
  File "/home/xxxxxx/merklemaker.py", line 631, in merkleMaker_II
    return self.updateMerkleTree()
  File "/home/xxxxxx/merklemaker.py", line 536, in updateMerkleTree
    self._updateMerkleTree_I()
  File "/home/xxxxxx/merklemaker.py", line 522, in _updateMerkleTree_I
    raise RuntimeError('Failed to create usable template')
RuntimeError: Failed to create usable template


last version from git + login and pass copied from previous config  ?

it is first error message afret program start (no other before -such as "cant connect" etc )
Luke-Jr (OP)
Legendary
*
Offline Offline

Activity: 2576
Merit: 1186



View Profile
February 10, 2013, 04:49:30 PM
 #76

Please pastebin your config file (minus passwords)

tomaszsz
Member
**
Offline Offline

Activity: 76
Merit: 10


View Profile
February 10, 2013, 08:18:53 PM
Last edit: February 10, 2013, 08:35:47 PM by tomaszsz
 #77

Please pastebin your config file (minus passwords)


eloipool config.py

http://pastebin.com/XYyVuH99


bitcoind 1  (ver 0.7.2) - template

http://pastebin.com/7CWZ3Xit


bitcoind 2 (ver 3.2.4 )  - submit block

http://pastebin.com/ub3qAeLN


is it importent which bitcoind has --nolisten parametr ?  both will be ok ? (all is on one computer )




Luke-Jr (OP)
Legendary
*
Offline Offline

Activity: 2576
Merit: 1186



View Profile
February 11, 2013, 12:46:30 AM
 #78

TrackerAddr and CoinbaserCmd are invalid. That's all that stands out..

jgarzik
Legendary
*
Offline Offline

Activity: 1596
Merit: 1091


View Profile
February 11, 2013, 04:15:27 AM
 #79

FWIW, eloipool helped the Avalon ASIC miner solo-mine its first block:
http://blockexplorer.com/block/00000000000001528a3fa72b86032459e1fb6ab38720e19a26e3a1f4a64e461a

Jeff Garzik, Bloq CEO, former bitcoin core dev team; opinions are my own.
Visit bloq.com / metronome.io
Donations / tip jar: 1BrufViLKnSWtuWGkryPsKsxonV2NQ7Tcj
tomaszsz
Member
**
Offline Offline

Activity: 76
Merit: 10


View Profile
February 11, 2013, 07:12:08 AM
 #80

I will help in the development of eloipool, but I do not know python very well (and certainly not as good as Luke) , for now  I can help in testing

is it ok that stratum server reports different  difficult than client? i have send You PM with detailed description of this issue.
Pages: « 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!