July 10, 2003

Identifying things in FOAF

There is growing interest in FOAF and its relationship to various approaches to "identity management" on the Internet. The FOAF approach to all this is distinctly pluralistic, to the extent that you might not even notice that there is a FOAF way of dealing with identity. There aren't, for example, 'FOAF identifiers' as such, although there is certainly a FOAF approach to identifying things. So this is a first cut at writing up some of the as-yet-unarticulated design assumptions behind FOAF. A more user-friendly version would have examples, those will have to come later.

So here's the basic story. FOAF is built on top of W3C's Resource Description Framework (RDF), which itself uses XML and Unicode as file format standards. All FOAF documents are RDF documents, and any RDF application vocabularies (such as Dublin Core, RSS 1.0 core + extensions, MusicBrainz, Wordnet etc.) can be used within FOAF documents. FOAF shares with RDF a concern to use standard Web identifiers (URIs) wherever possible. The URI specification (RFC 2396) provides a common syntax for naming things on the Web, providing an umbrella concept which covers both 'URLs' and 'URNs'.

To the extent that everything we want to talk about has a well known URI, this solves all our problems. Lots and lots of things that we want to talk about do have URIs. There are URIs for Web pages, for mailboxes, for Java classes, for telephones, for ISBN-registered publications, and so on. This is great - when you want to talk about one of these things in a FOAF file, you just mention its URI. Simple, decentralised, standard.

However our story doesn't end here, FOAF needs to play in a world where we don't all have total knowledge of every relevant fact. Sometimes a thing might 'have' a URI (in some pedantic sense) yet 99% of parties on the Web might not know what that URI is. Or, closer to my main theme, we might want to talk in our FOAF files about things that it has proved peculiarly difficult to get agreement about identifying. People, for example.

Just try setting up a planet-wide system for identifying people and you'll see my point. There is significant resistence to the idea of creating a single set of identifiers used to 'tag' everyone. To put it mildly. So... where does this leave FOAF? FOAF documents are scattered around the Web, and each document makes a unique contribution to a bigger picture which can only be seen when those documents are merged together. In FOAF, we need to identify people, without there being agreement on person-identifiers. Tricky!

So here is the good news. RDF was designed for generic, cross-domain data merging. Imagine taking two arbitrary SQL databases and merging them, so that your new database could answer questions which required knowledge of things which were previously described partially in one dataset, and partially in another. That sort of operation is hard to do, because SQL wasn't designed in a way that makes this easy. Neither was XML. But RDF was, and FOAF is built as an RDF application. In RDF, there are off the shelf software tools which can take RDF documents, 'parse' them into a set of simple 3-part statements (triples) which make claims about the world, and store those statements alongside others in a merged RDF database. To the extent that both datasets use the exact same identifiers when mentioning things they describe, you get a rather handy data-merge effect.

So here is the (not very) bad news. If two different RDF files (eg. FOAF documents) are talking about the same thing but don't use exactly the same URI when mentioning that thing, how are our poor stupid computers supposed to be able to understand? In the real world, we want to write RDF documents (eg. for FOAF) about things that we've not yet agreed on common identifiers for. This is one of the core problems we've had to address in FOAF.

Basically, off the shelf RDF tools can still do a lot to help us, but we have to help them. FOAF, as an application that focusses on the distributed, decentralised, almost out of control use of RDF 'in the wild', ran into this problem after we had about half a dozen FOAF files. There are now hundreds, soon thousands, of FOAF documents. Most of them talk about people, quite successfully, despite the absence of a global person-id registry. This sounds like a recipe for chaos, yet somehow many of our FOAF aggregation tools are quite happy with this situation. They can often figure out when two files are about the self-same thing, without much help from the authors of those documents. We do this using what might be called "reference by description". Instead of saying, "this page was created by urn:global-person-registry:person-n22314151", we say "this page was created by the peson whose (some-property...) is (some-value...)", taking care to use an unambiguous property such as foaf:homepage or foaf:mbox_sha1sum.

Here's how it works. Recall that FOAF is built on top of RDF, and so every FOAF document boils down to nothing more than a set of 3-part statements which relate two things together via terms such as 'workplaceHomepage', 'homepage', 'mbox'.

I am related to those things that are my homepages; FOAF's name for that relationship is 'foaf:homepage'.

I am related to those things that are my personal mailboxes by a relationship FOAF calls 'foaf:mbox'.

I am related to the strings that you get from feeding my mailbox identifiers to the SHA1 mathematical function by a relationship FOAF calls 'foaf:mbox_sha1sum'.

I am related to a myers briggs personality classification, FOAF calls that relationship 'foaf:myersBriggs'.

I am related to my workplace homepage (http://www.w3.org/) by a relationship called -- you guessed it -- 'foaf:workplaceHomepage'.

I am related to my name, 'Dan Brickley' by the 'foaf:name' relationship.

I am related to my AIM chat identifier by a relationship FOAF calls 'foaf:aimChatID'.

And so on. Other RDF vocabularies can define additional relationships (see the FoafVocab entry in our wiki for pointers). They all relate things to other things in named ways. A FOAF document, like any RDF document, is simply a collection of these simple claims about how things in the world relate.

But look again.There is a hidden pattern here. Some of these relationships are special.

foaf:homepage foaf:mbox foaf:mbox_sha1sum foaf:aimChatID fall in one category.

foaf:workplaceHomepage, foaf:myersBriggs, foaf:name fall in another.

Here's the difference. The former kinds of relationship (or 'property' in RDF-talk) have a special characteristic. They have been defined such that there is at most one thing in the world that has any particular value for that property.

There is... at most one thing in the world with any given foaf:homepage. Or foaf:mbox, or foaf:mbox_sha1sum, or foaf:aimChatID. By contrast, there may well be multiple things in the world with the same foaf:workplaceHomepage, or foaf:myersBriggs, or even (it's a big world) foaf:name. Apparently there's another Dan Brickley out there. And lots of my colleagues share my workplace homepage. And there are a lot of people who myers brigg surveys classify as 'INTP' . But there is nobody else at all who has the same foaf:homepage as me, or the same foaf:mbox. Or foaf:aimChatID.

This is one of the design principles underlying FOAF (and for that matter the entire Semantic Web effort): a pragmatic, pluralistic approach to resource description and identification. Rather than building big, centralised registries of people (or companies, or physical things) we look for cheaper, more lightweight shared strategies for identification. In FOAF, we do this by making sure there are multiple ways we can identify things.

So one FOAF file might mention 'here is a photo; it depicts the person whose mailbox is danbri@rdfweb.org'. Another FOAF file might say 'here is a weblog entry written by the person whose homepage is http://rdfweb.org/people/danbri/', a 3rd FOAF file might say, 'here is a chat transcript by the person whose foaf:aimChatID is danbri_2002'. To the extent that there is publically readable RDF in the Web that makes all these claims, and that there is, perhaps scattered around, enough information to deduce that these all describe the same people, RDF /FOAF tools can 'smush' it all together. They could 'realise' that the photo and the weblog and the chat log were all associated with the self-same thing, ie me.

To do that, we need certain pieces of information. We need to know which, of all the kinds of relationship there are, are the uniquely identifying ones. In RDF terminology we call these unambiguous (or more technically, inverse-functional) properties. When RDF software reads the FOAF spec it can determine this from markup embedded in the document itself. So machines can find out quite easily which properties are ones which uniquely identify people. They can do this for the FOAF spec, and for any other RDF vocabulary that is used alongside FOAF.

The other bit of information needed is that somewhere in the Web, it would need to be claimed that there is a person who has a mailbox of ... and a homepage of ... and an aimChatID of ...

If that information is available, then FOAF tools are all set to do the data merge, even though there is no planet-wide unified identification system for people. We don't use anything else except off the shelf standards: URIs plus W3C RDF and OWL technology.

If you find the data merging potential creepy, you are not alone. This kind of technology is not going away, but there are steps you can take. A full discussion of the privacy aspect isn't possible here, but the basic idea is (i) be aware -- scattered information can easily be merged (ii) keep things as secret as they need to be. Don't tell the world (in your FOAF file or elsewhere) all the chat IDs and homepages and mailboxes that you use, then act suprised when people and machines piece together your scattered contributions to the Web. Reading up on PGP might be a good idea.

We don't need to wait for a global identity management system before privacy and data merging becomes an issue. FOAF is intended to explore these issues, and to provide some advance warning for the way certain aspects of semantic web technology may affect our lives. Just as the world has had to adapt to the notion of 'being Googled' and having things that once seemed obscure now all to easily found, the rise of semantic web technology needs to be accompanied by an understanding of the risks and opportunities that 'being identified' presents.

Finally... a couple of points of further reading on the technical rather than social side of this problem. A couple of years ago I wrote a brief note on aggregation strategies which describes the 'smushing' problem. A more recent writeup by Matt Biddulph describing his Java implementation is worth a read too, as are many of the documents from the TAP project, which share FOAF's concern for reference-by-description. Guha and Rob's overview paper sets out the issues very clearly.

Posted by danbri at July 10, 2003 12:05 PM | TrackBack
Comments

Short version:

In FOAF, we use URIs to identify things while describing them.

When we don't have URIs handy, we take care to use identifying properties in our descriptions.

We don't care which properties we use, so long as they are unambiguous. The more that get into general use, the easier it becomes to figure out when two documents are describing the same entity.

Posted by: Dan Brickley on July 10, 2003 01:36 PM

Coolio dude - thanks for this. But the process of smushing is kind of 'challenging' when the end-user holds onto their own foaf.rdf file.

So we have this idea of: a) hosting a database of foaf.rdf files that get 'shared' for FOAFster-type funtionality (if end-users don't care) and b) if they DO care about holding onto their own foaf.rdf files - then we assume that their file is the master, and we'll set up a mirroring process - where any changes to the master - is uploaded to the 'shared' database.

How does that sound?

Posted by: Marc Canter on July 10, 2003 04:12 PM

danbri, nice work.

Marc, I'm not sure the users holding their own files is likely to be such an issue. But to do stuff with the data you'll have to read it into your own system anyway. You could just store the URIs and poll them whenever needed, but it would probably make sense in terms of performance to keep a version in your DB as a cache. This should also lend itself to pretty simple load distribution - it doesn't really matter where the FOAF statements are held. So I think what you're suggesting probably would be a good approach, but for a slightly different reason ;-)

I know there's plenty of work being done with the query languages, but maybe systems like this call for a very simple standardised subset plus some system-level comms. i.e. just two or three fairly FOAF-specific queries (e.g. give me all your Persons with any of these properties) combined with URIs for the stores. Make it easy a possible to implement, but allow sync and the forwarding of queries between DBs (that may even have completely different purposes, but still expose the same mini-interface).

Posted by: Danny on July 11, 2003 01:17 AM

Great, and really illustrative example, Dan.

Marc and Danny: I am thinking about similar things, which I see as:

1. another level of DNS-like mapping to specific documents that gives those documents non-volitile identifiers

2. document stores that automatically plug-in to that DNS-like mapping, and provide interfaces exposing the stored documents to queries

3. tools for querying, caching, and syncing document data across different document stores

(4. safe and easy to integrate with existing/other tools, like websites, blogs, wikis, and email, and with other standards like N/echo and RSS!)

Posted by: Jay Fienberg on July 13, 2003 12:02 AM

Great_Blog_I_agree_with_you_completely

Posted by: online basketball betting sports betting on January 17, 2004 06:38 PM

Great_Blog_I_agree_with_you_completely

Posted by: basketball betting line sports betting on January 17, 2004 06:39 PM

Great_Blog_I_agree_with_you_completely

Posted by: college basketball betting line on January 17, 2004 06:39 PM

Great_Blog_I_agree_with_you_completely

Posted by: march madness bet on January 17, 2004 06:39 PM

Great_Blog_I_agree_with_you_completely

Posted by: ncaa basketball odds on January 17, 2004 06:39 PM

Great_Blog_I_agree_with_you_completely

Posted by: ncaa basketball point spread bet on January 17, 2004 06:40 PM

Great_Blog_I_agree_with_you_completely

Posted by: college basketball betting on January 17, 2004 06:40 PM

Great_Blog_I_agree_with_you_completely

Posted by: college basketball betting line on January 17, 2004 06:40 PM

Nice_Blog_Come_visit_us

Posted by: basketballs betting line sports betting on January 17, 2004 06:40 PM

Great_Blog_I_agree_with_you_completely

Posted by: online basketball betting on January 17, 2004 06:40 PM

Great_Blog_I_agree_with_you_completely

Posted by: basketball gambling line on January 17, 2004 06:41 PM

Great_Blog_I_agree_with_you_completely

Posted by: college basketball betting on January 17, 2004 06:41 PM

Great_Blog_I_agree_with_you_completely

Posted by: online basketball betting on January 17, 2004 06:41 PM

Great_Blog_I_agree_with_you_completely

Posted by: march madness odds on January 17, 2004 06:41 PM

Great_Blog_I_agree_with_you_completely

Posted by: bet march madness bet on January 17, 2004 06:42 PM

Great_Blog_I_agree_with_you_completely

Posted by: ncaa march madness on January 17, 2004 06:42 PM

Great_Blog_I_agree_with_you_completely

Posted by: online basketball betting on January 17, 2004 06:42 PM

Nice_Blog_Come_visit_us

Posted by: ibet royal sports betting on January 17, 2004 06:42 PM

Great_Blog_I_agree_with_you_completely

Posted by: Online Casinos bonus matching service on January 17, 2004 06:43 PM

Nice_Blog_Come_visit_us

Posted by: online casinos slots machines on January 17, 2004 06:43 PM

Great_Blog_I_agree_with_you_completely

Posted by: Free slot machines online on January 17, 2004 06:43 PM

Nice_Blog_Come_visit_us

Posted by: Online Casino on January 17, 2004 06:43 PM

Great_Blog_I_agree_with_you_completely

Posted by: Online Casinos Affiliate Program on January 17, 2004 06:43 PM

Nice_Blog_Come_visit_us

Posted by: Online Casino on January 17, 2004 06:44 PM

Online Casinos Betting Online Gambling

Posted by: Online Casinos Affiliate Program on January 17, 2004 06:44 PM

Online Casinos Betting Online Gambling

Posted by: Online Sports Betting on January 17, 2004 06:44 PM

Online Casinos Betting Online Gambling

Posted by: Online Sports Betting on January 17, 2004 06:44 PM

Online Casinos Betting Online Gambling

Posted by: Sports Betting on January 17, 2004 06:45 PM

Great_Blog_I_agree_with_you_completely

Posted by: Online Casinos on January 17, 2004 06:52 PM

Great_Blog_I_agree_with_you_completely

Posted by: Online Casinos on January 17, 2004 06:53 PM

Great_Blog_I_agree_with_you_completely

Posted by: Sports Betting on January 17, 2004 06:55 PM

Great_Blog_I_agree_with_you_completely

Posted by: Sports Betting on January 17, 2004 06:55 PM

Great_Blog_I_agree_with_you_completely

Posted by: Sports Betting on January 17, 2004 06:55 PM

Great_Blog_I_agree_with_you_completely

Posted by: Sports Betting on January 17, 2004 06:56 PM

Great_Blog_I_agree_with_you_completely

Posted by: Sports Betting on January 17, 2004 06:56 PM

Great_Blog_I_agree_with_you_completely

Posted by: Sports Betting on January 17, 2004 06:56 PM

Great_Blog_I_agree_with_you_completely

Posted by: Sports Betting on January 17, 2004 06:56 PM

Great_Blog_I_agree_with_you_completely

Posted by: Sports Betting on January 17, 2004 06:56 PM

Great_Blog_I_agree_with_you_completely

Posted by: Sports Betting on January 17, 2004 06:57 PM

Great_Blog_I_agree_with_you_completely

Posted by: Sports Betting on January 17, 2004 06:57 PM

Great_Blog_I_agree_with_you_completely

Posted by: Online Casinos on January 17, 2004 06:57 PM

Great_Blog_I_agree_with_you_completely

Posted by: Casino Affiliates Programs on January 17, 2004 06:58 PM

Great_Blog_I_agree_with_you_completely

Posted by: Internet Casinos on January 17, 2004 06:58 PM

Great_Blog_I_agree_with_you_completely

Posted by: Sports Betting on January 17, 2004 06:58 PM

Man, these guys are hammering you!

Posted by: milf on January 18, 2004 02:16 AM

Since the Heap has no definite rules as to where it will create space for you, there must be some way of figuring out where your new space is. And the answer is, simply enough, addressing. When you create new space in the heap to hold your data, you get back an address that tells you where your new space is, so your bits can move in. This address is called a Pointer, and it's really just a hexadecimal number that points to a location in the heap. Since it's really just a number, it can be stored quite nicely into a variable.

Posted by: Dionise on January 20, 2004 08:14 AM

These secret identities serve a variety of purposes, and they help us to understand how variables work. In this lesson, we'll be writing a little less code than we've done in previous articles, but we'll be taking a detailed look at how variables live and work.

Posted by: Venetia on January 20, 2004 08:14 AM

Note the new asterisks whenever we reference favoriteNumber, except for that new line right before the return.

Posted by: Gartheride on January 20, 2004 08:14 AM

This back and forth is an important concept to understand in C programming, especially on the Mac's RISC architecture. Almost every variable you work with can be represented in 32 bits of memory: thirty-two 1s and 0s define the data that a simple variable can hold. There are exceptions, like on the new 64-bit G5s and in the 128-bit world of AltiVec

Posted by: John on January 20, 2004 08:14 AM

Note first that favoriteNumbers type changed. Instead of our familiar int, we're now using int*. The asterisk here is an operator, which is often called the "star operator". You will remember that we also use an asterisk as a sign for multiplication. The positioning of the asterisk changes its meaning. This operator effectively means "this is a pointer". Here it says that favoriteNumber will be not an int but a pointer to an int. And instead of simply going on to say what we're putting in that int, we have to take an extra step and create the space, which is what does. This function takes an argument that specifies how much space you need and then returns a pointer to that space. We've passed it the result of another function, , which we pass int, a type. In reality, is a macro, but for now we don't have to care: all we need to know is that it tells us the size of whatever we gave it, in this case an int. So when is done, it gives us an address in the heap where we can put an integer. It is important to remember that the data is stored in the heap, while the address of that data is stored in a pointer on the stack.

Posted by: Leonard on January 20, 2004 08:15 AM

These secret identities serve a variety of purposes, and they help us to understand how variables work. In this lesson, we'll be writing a little less code than we've done in previous articles, but we'll be taking a detailed look at how variables live and work.

Posted by: Abacuck on January 20, 2004 08:15 AM

To address this issue, we turn to the second place to put variables, which is called the Heap. If you think of the Stack as a high-rise apartment building somewhere, variables as tenets and each level building atop the one before it, then the Heap is the suburban sprawl, every citizen finding a space for herself, each lot a different size and locations that can't be readily predictable. For all the simplicity offered by the Stack, the Heap seems positively chaotic, but the reality is that each just obeys its own rules.

Posted by: Helegor on January 20, 2004 08:15 AM

This is another function provided for dealing with the heap. After you've created some space in the Heap, it's yours until you let go of it. When your program is done using it, you have to explicitly tell the computer that you don't need it anymore or the computer will save it for your future use (or until your program quits, when it knows you won't be needing the memory anymore). The call to simply tells the computer that you had this space, but you're done and the memory can be freed for use by something else later on.

Posted by: Quivier on January 20, 2004 08:15 AM

Earlier I mentioned that variables can live in two different places. We're going to examine these two places one at a time, and we're going to start on the more familiar ground, which is called the Stack. Understanding the stack helps us understand the way programs run, and also helps us understand scope a little better.

Posted by: Phillip on January 20, 2004 08:15 AM

The Stack is just what it sounds like: a tower of things that starts at the bottom and builds upward as it goes. In our case, the things in the stack are called "Stack Frames" or just "frames". We start with one stack frame at the very bottom, and we build up from there.

Posted by: Tobias on January 20, 2004 08:15 AM

http://free-girls-sex-usa.prosexhost.com/index2352.html
http://free-girls-sex-usa.prosexhost.com/index2353.html
http://free-girls-sex-usa.prosexhost.com/index2354.html
http://free-girls-sex-usa.prosexhost.com/index2355.html
http://free-girls-sex-usa.prosexhost.com/index2356.html
http://free-girls-sex-usa.prosexhost.com/index2357.html
http://free-girls-sex-usa.prosexhost.com/index2358.html
http://free-girls-sex-usa.prosexhost.com/index2359.html
http://free-girls-sex-usa.prosexhost.com/index2360.html
http://free-girls-sex-usa.prosexhost.com/index2361.html
http://free-girls-sex-usa.prosexhost.com/index2362.html
http://free-girls-sex-usa.prosexhost.com/index2363.html
http://free-girls-sex-usa.prosexhost.com/index2364.html
http://free-girls-sex-usa.prosexhost.com/index2365.html
http://free-girls-sex-usa.prosexhost.com/index2366.html
http://free-girls-sex-usa.prosexhost.com/index2367.html
http://free-girls-sex-usa.prosexhost.com/index2368.html
http://free-girls-sex-usa.prosexhost.com/index2369.html
http://free-girls-sex-usa.prosexhost.com/index2370.html
http://free-girls-sex-usa.prosexhost.com/index2371.html
http://free-girls-sex-usa.prosexhost.com/index2372.html
http://free-girls-sex-usa.prosexhost.com/index2373.html
http://free-girls-sex-usa.prosexhost.com/index2374.html
http://free-girls-sex-usa.prosexhost.com/index2375.html
http://free-girls-sex-usa.prosexhost.com/index2376.html
http://free-girls-sex-usa.prosexhost.com/index2377.html
http://free-girls-sex-usa.prosexhost.com/index2378.html
http://free-girls-sex-usa.prosexhost.com/index2379.html
http://free-girls-sex-usa.prosexhost.com/index2380.html
http://free-girls-sex-usa.prosexhost.com/index2381.html
http://free-girls-sex-usa.prosexhost.com/index2382.html
http://free-girls-sex-usa.prosexhost.com/index2383.html
http://free-girls-sex-usa.prosexhost.com/index2384.html
http://free-girls-sex-usa.prosexhost.com/index2385.html
http://free-girls-sex-usa.prosexhost.com/index2386.html
http://free-girls-sex-usa.prosexhost.com/index2387.html
http://free-girls-sex-usa.prosexhost.com/index2388.html
http://free-girls-sex-usa.prosexhost.com/index2389.html
http://free-girls-sex-usa.prosexhost.com/index2390.html
http://free-girls-sex-usa.prosexhost.com/index2391.html
http://free-girls-sex-usa.prosexhost.com/index2392.html
http://free-girls-sex-usa.prosexhost.com/index2393.html
http://free-girls-sex-usa.prosexhost.com/index2394.html
http://free-girls-sex-usa.prosexhost.com/index2395.html
http://free-girls-sex-usa.prosexhost.com/index2396.html
http://free-girls-sex-usa.prosexhost.com/index2397.html
http://free-girls-sex-usa.prosexhost.com/index2398.html
http://free-girls-sex-usa.prosexhost.com/index2399.html
http://free-girls-sex-usa.prosexhost.com/index2300.html
http://free-girls-sex-usa.prosexhost.com/index2301.html
http://free-girls-sex-usa.prosexhost.com/index2302.html
http://free-girls-sex-usa.prosexhost.com/index2303.html
http://free-girls-sex-usa.prosexhost.com/index2304.html
http://free-girls-sex-usa.prosexhost.com/index2305.html
http://free-girls-sex-usa.prosexhost.com/index2306.html
http://free-girls-sex-usa.prosexhost.com/index2307.html
http://free-girls-sex-usa.prosexhost.com/index2308.html
http://free-girls-sex-usa.prosexhost.com/index2309.html
http://free-girls-sex-usa.prosexhost.com/index2310.html
http://free-girls-sex-usa.prosexhost.com/index2311.html
http://free-girls-sex-usa.prosexhost.com/index2312.html
http://free-girls-sex-usa.prosexhost.com/index2313.html
http://free-girls-sex-usa.prosexhost.com/index2313.html
http://free-girls-sex-usa.prosexhost.com/index2315.html
http://free-girls-sex-usa.prosexhost.com/index2316.html
http://free-girls-sex-usa.prosexhost.com/index2317.html
http://free-girls-sex-usa.prosexhost.com/index2318.html
http://free-girls-sex-usa.prosexhost.com/index2313.html
http://free-girls-sex-usa.prosexhost.com/index2320.html
http://free-girls-sex-usa.prosexhost.com/index2321.html
http://free-girls-sex-usa.prosexhost.com/index2322.html
http://free-girls-sex-usa.prosexhost.com/index2323.html
http://free-girls-sex-usa.prosexhost.com/index2324.html
http://free-girls-sex-usa.prosexhost.com/index2325.html
http://free-girls-sex-usa.prosexhost.com/index2326.html
http://free-girls-sex-usa.prosexhost.com/index2327.html
http://free-girls-sex-usa.prosexhost.com/index2328.html
http://free-girls-sex-usa.prosexhost.com/index2329.html
http://free-girls-sex-usa.prosexhost.com/index2330.html
http://free-girls-sex-usa.prosexhost.com/index2331.html
http://free-girls-sex-usa.prosexhost.com/index2332.html
http://free-girls-sex-usa.prosexhost.com/index2333.html
http://free-girls-sex-usa.prosexhost.com/index2334.html
http://free-girls-sex-usa.prosexhost.com/index2335.html
http://free-girls-sex-usa.prosexhost.com/index2336.html
http://free-girls-sex-usa.prosexhost.com/index2337.html
http://free-girls-sex-usa.prosexhost.com/index2338.html
http://free-girls-sex-usa.prosexhost.com/index2339.html
http://free-girls-sex-usa.prosexhost.com/index2340.html
http://free-girls-sex-usa.prosexhost.com/index2341.html
http://free-girls-sex-usa.prosexhost.com/index2342.html
http://free-girls-sex-usa.prosexhost.com/index2343.html
http://free-girls-sex-usa.prosexhost.com/index2344.html
http://free-girls-sex-usa.prosexhost.com/index2345.html
http://free-girls-sex-usa.prosexhost.com/index2346.html
http://free-girls-sex-usa.prosexhost.com/index2347.html
http://free-girls-sex-usa.prosexhost.com/index2348.html
http://free-girls-sex-usa.prosexhost.com/index2349.html
http://free-girls-sex-usa.prosexhost.com/index2352.html
http://free-girls-sex-usa.prosexhost.com/index2351.html
http://free-girls-sex-usa.prosexhost.com/index2350.html

Re: Re: <a href=' http://free-girls-sex-usa.prosexhost.com/index2350.html'

http://free-girls-sex-usa.prosexhost.com/index2352.html
http://free-girls-sex-usa.prosexhost.com/index2353.html
http://free-girls-sex-usa.prosexhost.com/index2354.html
http://free-girls-sex-usa.prosexhost.com/index2355.html
http://free-girls-sex-usa.prosexhost.com/index2356.html
http://free-girls-sex-usa.prosexhost.com/index2357.html
http://free-girls-sex-usa.prosexhost.com/index2358.html
http://free-girls-sex-usa.prosexhost.com/index2359.html
http://free-girls-sex-usa.prosexhost.com/index2360.html
http://free-girls-sex-usa.prosexhost.com/index2361.html
http://free-girls-sex-usa.prosexhost.com/index2362.html
http://free-girls-sex-usa.prosexhost.com/index2363.html
http://free-girls-sex-usa.prosexhost.com/index2364.html
http://free-girls-sex-usa.prosexhost.com/index2365.html
http://free-girls-sex-usa.prosexhost.com/index2366.html
http://free-girls-sex-usa.prosexhost.com/index2367.html
http://free-girls-sex-usa.prosexhost.com/index2368.html
http://free-girls-sex-usa.prosexhost.com/index2369.html
http://free-girls-sex-usa.prosexhost.com/index2370.html
http://free-girls-sex-usa.prosexhost.com/index2371.html
http://free-girls-sex-usa.prosexhost.com/index2372.html
http://free-girls-sex-usa.prosexhost.com/index2373.html
http://free-girls-sex-usa.prosexhost.com/index2374.html
http://free-girls-sex-usa.prosexhost.com/index2375.html
http://free-girls-sex-usa.prosexhost.com/index2376.html
http://free-girls-sex-usa.prosexhost.com/index2377.html
http://free-girls-sex-usa.prosexhost.com/index2378.html
http://free-girls-sex-usa.prosexhost.com/index2379.html
http://free-girls-sex-usa.prosexhost.com/index2380.html
http://free-girls-sex-usa.prosexhost.com/index2381.html
http://free-girls-sex-usa.prosexhost.com/index2382.html
http://free-girls-sex-usa.prosexhost.com/index2383.html
http://free-girls-sex-usa.prosexhost.com/index2384.html
http://free-girls-sex-usa.prosexhost.com/index2385.html
http://free-girls-sex-usa.prosexhost.com/index2386.html
http://free-girls-sex-usa.prosexhost.com/index2387.html
http://free-girls-sex-usa.prosexhost.com/index2388.html
http://free-girls-sex-usa.prosexhost.com/index2389.html
http://free-girls-sex-usa.prosexhost.com/index2390.html
http://free-girls-sex-usa.prosexhost.com/index2391.html
http://free-girls-sex-usa.prosexhost.com/index2392.html
http://free-girls-sex-usa.prosexhost.com/index2393.html
http://free-girls-sex-usa.prosexhost.com/index2394.html
http://free-girls-sex-usa.prosexhost.com/index2395.html
http://free-girls-sex-usa.prosexhost.com/index2396.html
http://free-girls-sex-usa.prosexhost.com/index2397.html
http://free-girls-sex-usa.prosexhost.com/index2398.html
http://free-girls-sex-usa.prosexhost.com/index2399.html
http://free-girls-sex-usa.prosexhost.com/index2300.html
http://free-girls-sex-usa.prosexhost.com/index2301.html
http://free-girls-sex-usa.prosexhost.com/index2302.html
http://free-girls-sex-usa.prosexhost.com/index2303.html
http://free-girls-sex-usa.prosexhost.com/index2304.html
http://free-girls-sex-usa.prosexhost.com/index2305.html
http://free-girls-sex-usa.prosexhost.com/index2306.html
http://free-girls-sex-usa.prosexhost.com/index2307.html
http://free-girls-sex-usa.prosexhost.com/index2308.html
http://free-girls-sex-usa.prosexhost.com/index2309.html
http://free-girls-sex-usa.prosexhost.com/index2310.html
http://free-girls-sex-usa.prosexhost.com/index2311.html
http://free-girls-sex-usa.prosexhost.com/index2312.html
http://free-girls-sex-usa.prosexhost.com/index2313.html
http://free-girls-sex-usa.prosexhost.com/index2313.html
http://free-girls-sex-usa.prosexhost.com/index2315.html
http://free-girls-sex-usa.prosexhost.com/index2316.html
http://free-girls-sex-usa.prosexhost.com/index2317.html
http://free-girls-sex-usa.prosexhost.com/index2318.html
http://free-girls-sex-usa.prosexhost.com/index2313.html
http://free-girls-sex-usa.prosexhost.com/index2320.html
http://free-girls-sex-usa.prosexhost.com/index2321.html
http://free-girls-sex-usa.prosexhost.com/index2322.html
http://free-girls-sex-usa.prosexhost.com/index2323.html
http://free-girls-sex-usa.prosexhost.com/index2324.html
http://free-girls-sex-usa.prosexhost.com/index2325.html
http://free-girls-sex-usa.prosexhost.com/index2326.html
http://free-girls-sex-usa.prosexhost.com/index2327.html
http://free-girls-sex-usa.prosexhost.com/index2328.html
http://free-girls-sex-usa.prosexhost.com/index2329.html
http://free-girls-sex-usa.prosexhost.com/index2330.html
http://free-girls-sex-usa.prosexhost.com/index2331.html
http://free-girls-sex-usa.prosexhost.com/index2332.html
http://free-girls-sex-usa.prosexhost.com/index2333.html
http://free-girls-sex-usa.prosexhost.com/index2334.html
http://free-girls-sex-usa.prosexhost.com/index2335.html
http://free-girls-sex-usa.prosexhost.com/index2336.html
http://free-girls-sex-usa.prosexhost.com/index2337.html
http://free-girls-sex-usa.prosexhost.com/index2338.html
http://free-girls-sex-usa.prosexhost.com/index2339.html
http://free-girls-sex-usa.prosexhost.com/index2340.html
http://free-girls-sex-usa.prosexhost.com/index2341.html
http://free-girls-sex-usa.prosexhost.com/index2342.html
http://free-girls-sex-usa.prosexhost.com/index2343.html
http://free-girls-sex-usa.prosexhost.com/index2344.html
http://free-girls-sex-usa.prosexhost.com/index2345.html
http://free-girls-sex-usa.prosexhost.com/index2346.html
http://free-girls-sex-usa.prosexhost.com/index2347.html
http://free-girls-sex-usa.prosexhost.com/index2348.html
http://free-girls-sex-usa.prosexhost.com/index2349.html
http://free-girls-sex-usa.prosexhost.com/index2352.html
http://free-girls-sex-usa.prosexhost.com/index2351.html
http://free-girls-sex-usa.prosexhost.com/index2350.html

Re: Re: <a href=' http://free-girls-sex-usa.prosexhost.com/index2350.html'

Posted by: rgerhgrt on January 24, 2004 04:35 PM
Post a comment