Bitcoin Forum
March 28, 2024, 08:24:42 AM *
News: Latest Bitcoin Core release: 26.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 ... 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 [62] 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 ... 814 »
  Print  
Author Topic: [1500 TH] p2pool: Decentralized, DoS-resistant, Hop-Proof pool  (Read 2591583 times)
Glasswalker
Sr. Member
****
Offline Offline

Activity: 407
Merit: 250



View Profile WWW
March 08, 2012, 06:07:08 PM
 #1221

Hey, I recently joined P2Pool with the mining cluster of the Bitcoin Syndicate (currently 6GHash, soon to jump to 12GHash.)

I have a question that came up in relation to BIP16 and how it affects P2Pool (brought it up on this thread: https://bitcointalk.org/index.php?topic=66514)

The question is basically:

BIP16 has a vulnerability, if miners use old bitcoin clients that don't properly handle it, someone could submit a "poisoned" tx into the network that is invalid under bip16 but is valid on older clients. In this case the miner using the old client would add the tx to a block thinking it's valid, but the rest of the network on newer clients would reject the block (Eventually outpacing it's fork and invalidating the miners income). If the transactions are injected regularly, this would amount to a DOS for any miner using older clients.

My question as it relates to P2Pool is:

Since P2Pool is Peer to Peer, if say half the miners have updated clients, and half are using older clients. I assume that the client who ultimately finds the block is the one that submits it to the network and handles validation of transactions? If so, 50% of the time would we be vulnerable to this flaw with BIP16?

In other words, do we require 100% of P2Pool users to upgrade their bitcoin clients to be BIP16 compliant to totally avoid this issue?

And if the answer to the above is yes, that's a huge vulnerability for P2Pool (because someone could maliciously join the pool and mine using an old client, to invalidate a percentage of blocks mined by the miners on P2Pool).

Can someone with more technical knowledge of exactly how P2Pool works dive into this a bit deeper please? Preferably BEFORE the launch of BIP16 (potentially 1st of April at this point).

Thanks!

BattleDrome: Blockchain based Gladiator Combat for fun and profit!
http://www.battledrome.io/
Even in the event that an attacker gains more than 50% of the network's computational power, only transactions sent by the attacker could be reversed or double-spent. The network would not be destroyed.
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
forrestv (OP)
Hero Member
*****
Offline Offline

Activity: 516
Merit: 643


View Profile
March 08, 2012, 06:20:37 PM
 #1222

Since P2Pool is Peer to Peer, if say half the miners have updated clients, and half are using older clients. I assume that the client who ultimately finds the block is the one that submits it to the network and handles validation of transactions? If so, 50% of the time would we be vulnerable to this flaw with BIP16?

In other words, do we require 100% of P2Pool users to upgrade their bitcoin clients to be BIP16 compliant to totally avoid this issue?

And if the answer to the above is yes, that's a huge vulnerability for P2Pool (because someone could maliciously join the pool and mine using an old client, to invalidate a percentage of blocks mined by the miners on P2Pool).

All P2Pool users will definitely need to upgrade bitcoind before April 1st because of this issue. The question is of how to prevent people from not upgrading, which can be done by changing the rules of the P2Pool protocol.

This could be as simple as a new version of P2Pool that checks bitcoind's version and refuses to work with older versions, combined with a protocol change on April 1st that requires miners to use the new client. Of course, this is vulnerable to people patching out the version check, but P2Pool (along with all other pools) is already vulnerable to malicious block invalidating attacks, so that's not a problem.


1J1zegkNSbwX4smvTdoHSanUfwvXFeuV23
Frizz23
Hero Member
*****
Offline Offline

Activity: 1162
Merit: 500


View Profile
March 08, 2012, 08:03:30 PM
 #1223

I just checked my p2pool cruncher because of unusually low payouts.

Besides heaps of orphans in the log there are lots of lines like this here:

Code:
2012-03-08 20:57:32.886000 Error when requesting noncached value:
2012-03-08 20:57:32.887000 > Traceback (most recent call last):
2012-03-08 20:57:32.888000 >   File "twisted\internet\defer.pyc", line 388, in errback
2012-03-08 20:57:32.889000 >
2012-03-08 20:57:32.891000 >   File "twisted\internet\defer.pyc", line 455, in _startRunCallbacks
2012-03-08 20:57:32.892000 >
2012-03-08 20:57:32.893000 >   File "twisted\internet\defer.pyc", line 542, in _runCallbacks
2012-03-08 20:57:32.894000 >
2012-03-08 20:57:32.895000 >   File "twisted\internet\defer.pyc", line 1076, in gotResult
2012-03-08 20:57:32.896000 >
2012-03-08 20:57:32.897000 > --- <exception caught here> ---
2012-03-08 20:57:32.897000 >   File "twisted\internet\defer.pyc", line 1018, in _inlineCallbacks
2012-03-08 20:57:32.898000 >
2012-03-08 20:57:32.899000 >   File "twisted\python\failure.pyc", line 350, in throwExceptionIntoGenerator
2012-03-08 20:57:32.901000 >
2012-03-08 20:57:32.903000 >   File "p2pool\main.pyc", line 171, in <lambda>
2012-03-08 20:57:32.904000 >
2012-03-08 20:57:32.905000 >   File "twisted\internet\defer.pyc", line 1018, in _inlineCallbacks
2012-03-08 20:57:32.906000 >
2012-03-08 20:57:32.907000 >   File "twisted\python\failure.pyc", line 350, in throwExceptionIntoGenerator
2012-03-08 20:57:32.908000 >
2012-03-08 20:57:32.909000 >   File "p2pool\util\jsonrpc.pyc", line 67, in callRemote
2012-03-08 20:57:32.910000 >
2012-03-08 20:57:32.912000 > p2pool.util.jsonrpc.Error: -2 Safe mode: WARNING: Displayed transactions may not be correct!  You may need to upgrade, or other nod
es may need to upgrade.
2012-03-08 20:57:32.914000
2012-03-08 20:57:32.918000

What's going on? I updated p2pool last week! So do I really need to update again?

Ξtherization⚡️First P2E 2016⚡️🏰💎🌈 etherization.org
DeathAndTaxes
Donator
Legendary
*
Offline Offline

Activity: 1218
Merit: 1063


Gerald Davis


View Profile
March 08, 2012, 08:07:06 PM
 #1224

This is coming from bitcoind.
"WARNING: Displayed transactions may not be correct!  You may need to upgrade, or other nod
es may need to upgrade."

You running 0.6.0 RC1?  If so you need to go to RC2 or go back to 0.5.2
DeathAndTaxes
Donator
Legendary
*
Offline Offline

Activity: 1218
Merit: 1063


Gerald Davis


View Profile
March 08, 2012, 08:15:23 PM
 #1225

In other words, do we require 100% of P2Pool users to upgrade their bitcoin clients to be BIP16 compliant to totally avoid this issue?

And if the answer to the above is yes, that's a huge vulnerability for P2Pool (because someone could maliciously join the pool and mine using an old client, to invalidate a percentage of blocks mined by the miners on P2Pool).

Can someone with more technical knowledge of exactly how P2Pool works dive into this a bit deeper please? Preferably BEFORE the launch of BIP16 (potentially 1st of April at this point).

IF 51% of Bitcoin network accepts BIP16 then p2pool does need to also.  A miner producing non-compliant hashes will eventually produce a non-compliant block.  The % would be relative to the % of hashing power they have.

A couple ways to deal with it.
The simplest way would be to do version checking in p2pool.  Make new version of p2pool which will not work under any version of bitcoind that isn't BIP16 compliant.  It will simple fail to run with an error.  If someone updates their p2pool but not bitcoind they can't mine.  The new version would also reject 100% of shares from old versions.  Thus if someone doesn't update p2pool or bitcoind they can mine (because their software isn't aware of the issue) but they will see 100% reject rate.  Compensation won't go down because they will never earn anything for this "bad" shares to match the expected value of their "bad" blocks.

Summary:
new p2pool & new bitcoind (BIP16 compliant) = good (no problems)
new p2pool & old bitcoind = won't start
old p2pool & old bitcoind = 100% reject rate from new p2pool version nodes.

That deals with a "ignorant user".  It prevents them from accidentally hurting the network.  A malicious user could intentionally modify bitcoind and p2pool code to produce non-compliant blocks.  This is no different than any other block withholding attack  it generally doesn't make any economical sense because it reduces attacker's revenue also and in case of p2pool they also lose finder's reward.

stevegee58
Legendary
*
Offline Offline

Activity: 916
Merit: 1003



View Profile
March 08, 2012, 08:33:08 PM
 #1226

it generally doesn't make any economical sense because it reduces attacker's revenue also and in case of p2pool they also lose finder's reward.

"...some men aren't looking for anything logical, like money. They can't be bought, bullied, reasoned, or negotiated with. Some men just want to watch the world burn."

There are people who would do this just for the sport.

 Cool

You are in a maze of twisty little passages, all alike.
DeathAndTaxes
Donator
Legendary
*
Offline Offline

Activity: 1218
Merit: 1063


Gerald Davis


View Profile
March 08, 2012, 08:39:20 PM
 #1227

"...some men aren't looking for anything logical, like money. They can't be bought, bullied, reasoned, or negotiated with. Some men just want to watch the world burn."


True.  non-economical attacks are always possible but I would point out they can happen on any pool.  The only way to be "safe" would be solo mining.  p2pool through the combination of PPLNS and finders fee is less vulnerable to non-economic block withholding attack.

The most vulnerable would be PPS pools.
stevegee58
Legendary
*
Offline Offline

Activity: 916
Merit: 1003



View Profile
March 08, 2012, 08:42:32 PM
 #1228

I suppose a closed p2p pool could be established where each node is authenticated to be there.  Of course then you'd have to have someone administrating it, granting and revoking access, etc.

You are in a maze of twisty little passages, all alike.
DeathAndTaxes
Donator
Legendary
*
Offline Offline

Activity: 1218
Merit: 1063


Gerald Davis


View Profile
March 08, 2012, 08:54:23 PM
 #1229

I suppose a closed p2p pool could be established where each node is authenticated to be there.  Of course then you'd have to have someone administrating it, granting and revoking access, etc.

So all the disadvantages of both a centralized pool AND a decentralized one?  Smiley
kano
Legendary
*
Offline Offline

Activity: 4452
Merit: 1798


Linux since 1997 RedHat 4


View Profile
March 08, 2012, 11:14:59 PM
 #1230

Since P2Pool is Peer to Peer, if say half the miners have updated clients, and half are using older clients. I assume that the client who ultimately finds the block is the one that submits it to the network and handles validation of transactions? If so, 50% of the time would we be vulnerable to this flaw with BIP16?

In other words, do we require 100% of P2Pool users to upgrade their bitcoin clients to be BIP16 compliant to totally avoid this issue?

And if the answer to the above is yes, that's a huge vulnerability for P2Pool (because someone could maliciously join the pool and mine using an old client, to invalidate a percentage of blocks mined by the miners on P2Pool).

All P2Pool users will definitely need to upgrade bitcoind before April 1st because of this issue. The question is of how to prevent people from not upgrading, which can be done by changing the rules of the P2Pool protocol.

This could be as simple as a new version of P2Pool that checks bitcoind's version and refuses to work with older versions, combined with a protocol change on April 1st that requires miners to use the new client. Of course, this is vulnerable to people patching out the version check, but P2Pool (along with all other pools) is already vulnerable to malicious block invalidating attacks, so that's not a problem.


Hmmm - so 3 weeks for the bitcoin developers to ensure that rc2 isn't like rc1 ... and then force everyone to use it under the name of 0.6.0?

Pool: https://kano.is - low 0.5% fee PPLNS 3 Days - Most reliable Solo with ONLY 0.5% fee   Bitcointalk thread: Forum
Discord support invite at https://kano.is/ Majority developer of the ckpool code - k for kano
The ONLY active original developer of cgminer. Original master git: https://github.com/kanoi/cgminer
DeathAndTaxes
Donator
Legendary
*
Offline Offline

Activity: 1218
Merit: 1063


Gerald Davis


View Profile
March 08, 2012, 11:34:04 PM
 #1231

Hmmm - so 3 weeks for the bitcoin developers to ensure that rc2 isn't like rc1 ... and then force everyone to use it under the name of 0.6.0?

That assumes the network has the 60%? support which AFAIK it currently doesn't. 
cabin
Sr. Member
****
Offline Offline

Activity: 604
Merit: 250


View Profile
March 09, 2012, 12:24:51 AM
 #1232

anyone else getting tons of these.. or just me? I am on rc2, for sure. Earlier in this thread it was mentioned it is supposed to be 'ok', but still.. it isn't going away..

2012-03-08 19:22:44.788000 >     return g.throw(self.type, self.value, self.tb)
2012-03-08 19:22:44.788000 >   File "C:\data\miner2\p2pool-a15c106\p2pool\util\jsonrpc.py", line 67, in callRemote
2012-03-08 19:22:44.788000 >     raise Error(**resp['error'])
2012-03-08 19:22:44.789000 > p2pool.util.jsonrpc.Error: -5 Block not found
2012-03-08 19:22:44.790000
tiker
Sr. Member
****
Offline Offline

Activity: 459
Merit: 250



View Profile WWW
March 09, 2012, 12:25:17 AM
 #1233

Every time I update p2pool or stop and start it again I get new errors...

This time I'm getting the following but don't know why or how to fix it.. any ideas?

Code:

2012-03-08 19:18:37.602900 Error when requesting noncached value:
2012-03-08 19:18:37.603161 > Traceback (most recent call last):
2012-03-08 19:18:37.603401 >   File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 388, in errback
2012-03-08 19:18:37.603583 >     self._startRunCallbacks(fail)
2012-03-08 19:18:37.603746 >   File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 455, in _startRunCallbacks
2012-03-08 19:18:37.603914 >     self._runCallbacks()
2012-03-08 19:18:37.604149 >   File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 542, in _runCallbacks
2012-03-08 19:18:37.604342 >     current.result = callback(current.result, *args, **kw)
2012-03-08 19:18:37.604508 >   File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1076, in gotResult
2012-03-08 19:18:37.604674 >     _inlineCallbacks(r, g, deferred)
2012-03-08 19:18:37.604861 > --- <exception caught here> ---
2012-03-08 19:18:37.605021 >   File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1018, in _inlineCallbacks
2012-03-08 19:18:37.605215 >     result = result.throwExceptionIntoGenerator(g)
2012-03-08 19:18:37.605376 >   File "/usr/lib/python2.7/dist-packages/twisted/python/failure.py", line 350, in throwExceptionIntoGenerator
2012-03-08 19:18:37.605567 >     return g.throw(self.type, self.value, self.tb)
2012-03-08 19:18:37.605729 >   File "/home/ed/apps/p2pool/p2pool/main.py", line 171, in <lambda>
2012-03-08 19:18:37.605894 >     height_cacher = deferral.DeferredCacher(defer.inlineCallbacks(lambda block_hash: defer.returnValue((lambda x: x['blockcount'] if 'blockcount' in x else x['height'])((yield bitcoind.rpc_getblock('%x' % (block_hash,)))))))
2012-03-08 19:18:37.606063 >   File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1018, in _inlineCallbacks
2012-03-08 19:18:37.606276 >     result = result.throwExceptionIntoGenerator(g)
2012-03-08 19:18:37.606439 >   File "/usr/lib/python2.7/dist-packages/twisted/python/failure.py", line 350, in throwExceptionIntoGenerator
2012-03-08 19:18:37.606632 >     return g.throw(self.type, self.value, self.tb)
2012-03-08 19:18:37.606794 >   File "/home/ed/apps/p2pool/p2pool/util/jsonrpc.py", line 67, in callRemote
2012-03-08 19:18:37.606978 >     raise Error(**resp['error'])
2012-03-08 19:18:37.607198 > p2pool.util.jsonrpc.Error: -5 Block not found
TheHarbinger
Sr. Member
****
Offline Offline

Activity: 378
Merit: 250


Why is it so damn hot in here?


View Profile
March 09, 2012, 12:35:19 AM
 #1234

Well, I hate to do it, but I just pulled my 2GH/s from P2Pool.  Something is very seriously wrong.  I have been keeping it up to date, so don't tell me it's me version of p2pool or bitcoin, it's not.  Over the last 4 days I have watched my payout per block drop from around 0.4 to 0.15 on the last one, and p2pool.info is showing 950MH/s.  I will come back, but after what ever the hell is broken is fixed.

12Um6jfDE7q6crm1s6tSksMvda8s1hZ3Vj
stevegee58
Legendary
*
Offline Offline

Activity: 916
Merit: 1003



View Profile
March 09, 2012, 01:04:52 AM
 #1235

anyone else getting tons of these.. or just me? I am on rc2, for sure. Earlier in this thread it was mentioned it is supposed to be 'ok', but still.. it isn't going away..

2012-03-08 19:22:44.788000 >     return g.throw(self.type, self.value, self.tb)
2012-03-08 19:22:44.788000 >   File "C:\data\miner2\p2pool-a15c106\p2pool\util\jsonrpc.py", line 67, in callRemote
2012-03-08 19:22:44.788000 >     raise Error(**resp['error'])
2012-03-08 19:22:44.789000 > p2pool.util.jsonrpc.Error: -5 Block not found
2012-03-08 19:22:44.790000

Did you use the windows installer for rc2 or the zip file?  The installer is broken.  Use the zip file instead.

You are in a maze of twisty little passages, all alike.
Red Emerald
Hero Member
*****
Offline Offline

Activity: 742
Merit: 500



View Profile WWW
March 09, 2012, 01:08:21 AM
 #1236

Well, I hate to do it, but I just pulled my 2GH/s from P2Pool.  Something is very seriously wrong.  I have been keeping it up to date, so don't tell me it's me version of p2pool or bitcoin, it's not.  Over the last 4 days I have watched my payout per block drop from around 0.4 to 0.15 on the last one, and p2pool.info is showing 950MH/s.  I will come back, but after what ever the hell is broken is fixed.
The hashrate on p2pool.info is not from the last 10 minutes. It's based on shares submitted in the last 24 hours.  If you've been tinkering and moving things, then it will obviously be lower.

Quote from: p2pool.info
Note: Hashrates are very rough estimates based on the number of shares submitted in the past day. They may be off by 10-20% or more due to variance.

How large and bold should we make the word "variance" before people will read it?

Maybe try p2pmining https://bitcointalk.org/index.php?topic=66202.0

TheHarbinger
Sr. Member
****
Offline Offline

Activity: 378
Merit: 250


Why is it so damn hot in here?


View Profile
March 09, 2012, 01:35:45 AM
 #1237

Well, I hate to do it, but I just pulled my 2GH/s from P2Pool.  Something is very seriously wrong.  I have been keeping it up to date, so don't tell me it's me version of p2pool or bitcoin, it's not.  Over the last 4 days I have watched my payout per block drop from around 0.4 to 0.15 on the last one, and p2pool.info is showing 950MH/s.  I will come back, but after what ever the hell is broken is fixed.
The hashrate on p2pool.info is not from the last 10 minutes. It's based on shares submitted in the last 24 hours.  If you've been tinkering and moving things, then it will obviously be lower.

Quote from: p2pool.info
Note: Hashrates are very rough estimates based on the number of shares submitted in the past day. They may be off by 10-20% or more due to variance.

How large and bold should we make the word "variance" before people will read it?

Maybe try p2pmining https://bitcointalk.org/index.php?topic=66202.0

My rig has been running for 14 days without any changes.  Not 10 minutes.  In that 14 days, both cgminer and my local p2pool constantly report between 1.8 and 2.2 GH/s.  In the last 4 days, my hashrate on p2pool.info and payouts have dropped steadily from 2.0GH/s and 0.4BTC/block to what they are now 943 MH/s and 0.16BTC/block.

That is not variance, that is something wrong.  It doesn't matter if I use 0.5.2 or 0.6.0r2.  The ONLY thing that has changed is the version of p2pool being run, now using p2pool_win32_1f87c32.

12Um6jfDE7q6crm1s6tSksMvda8s1hZ3Vj
Red Emerald
Hero Member
*****
Offline Offline

Activity: 742
Merit: 500



View Profile WWW
March 09, 2012, 01:46:39 AM
 #1238

Well, I hate to do it, but I just pulled my 2GH/s from P2Pool.  Something is very seriously wrong.  I have been keeping it up to date, so don't tell me it's me version of p2pool or bitcoin, it's not.  Over the last 4 days I have watched my payout per block drop from around 0.4 to 0.15 on the last one, and p2pool.info is showing 950MH/s.  I will come back, but after what ever the hell is broken is fixed.
The hashrate on p2pool.info is not from the last 10 minutes. It's based on shares submitted in the last 24 hours.  If you've been tinkering and moving things, then it will obviously be lower.

Quote from: p2pool.info
Note: Hashrates are very rough estimates based on the number of shares submitted in the past day. They may be off by 10-20% or more due to variance.

How large and bold should we make the word "variance" before people will read it?

Maybe try p2pmining https://bitcointalk.org/index.php?topic=66202.0

My rig has been running for 14 days without any changes.  Not 10 minutes.  In that 14 days, both cgminer and my local p2pool constantly report between 1.8 and 2.2 GH/s.  In the last 4 days, my hashrate on p2pool.info and payouts have dropped steadily from 2.0GH/s and 0.4BTC/block to what they are now 943 MH/s and 0.16BTC/block.

That is not variance, that is something wrong.  It doesn't matter if I use 0.5.2 or 0.6.0r2.  The ONLY thing that has changed is the version of p2pool being run, now using p2pool_win32_1f87c32.
Maybe you somehow got split from the rest of the network? How many peers is p2pool showing?

Are you 100% sure you upgraded to RC2? There have been multiple people that were sure, but the installer apparently doesn't always work properly and they were actually running RC1.

tiker
Sr. Member
****
Offline Offline

Activity: 459
Merit: 250



View Profile WWW
March 09, 2012, 01:50:45 AM
 #1239

anyone else getting tons of these.. or just me? I am on rc2, for sure. Earlier in this thread it was mentioned it is supposed to be 'ok', but still.. it isn't going away..

2012-03-08 19:22:44.788000 >     return g.throw(self.type, self.value, self.tb)
2012-03-08 19:22:44.788000 >   File "C:\data\miner2\p2pool-a15c106\p2pool\util\jsonrpc.py", line 67, in callRemote
2012-03-08 19:22:44.788000 >     raise Error(**resp['error'])
2012-03-08 19:22:44.789000 > p2pool.util.jsonrpc.Error: -5 Block not found
2012-03-08 19:22:44.790000

Did you use the windows installer for rc2 or the zip file?  The installer is broken.  Use the zip file instead.

That's not it.. because I'm getting the same thing now on my linux box without upgrading to RC2..

Code:

ed@funkylinux4:~/apps$ ./clients/bitcoind getinfo
{
    "version" : 59900,
    "protocolversion" : 60000,
    "balance" : 0.00000000,
    "blocks" : 170270,
    "connections" : 8,
    "proxy" : "",
    "difficulty" : 1496978.59502557,
    "testnet" : false,
    "keypoololdest" : 1327627799,
    "keypoolsize" : 101,
    "paytxfee" : 0.00000000,
    "errors" : ""
}
TurdHurdur
Full Member
***
Offline Offline

Activity: 216
Merit: 100


View Profile
March 09, 2012, 02:07:03 AM
 #1240

I got some of those "p2pool.util.jsonrpc.Error: -5 Block not found" errors, but it doesn't seem to adversely effect my generation of shares. Maybe a peer sent me garbage.
Pages: « 1 ... 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 [62] 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 ... 814 »
  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!