Multidimensional Text
CC Attribution 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Plaice, John
The Unicode model of text makes a clear distinction between character and glyph, and in so doing, paradoxically, creates the impression that the ultimate representation for text is some form of abstraction from its visual presentation. However,the level of abstraction for different languages encoded “naturally” in Unicode is quite different. We propose instead that text be encoded as sequences of context–tagged indices into arbitrary indexed structures, including not just character sets such as Unicode, but also dictionaries of words or compound words. Furthermore, these sequences need not necessarily contain elements from the same indexed structures. Using our approach allows natural solutions for a wide range of problems, including the creation of documents that can be printed using several alternate spellings, the automatic generation of error messages with arguments, and the correct generation of nouns or adjectives with number, case or gender markers or of verb conjugations.
 When you think about it, Chris should be an author on this paper, but since we were doing this in a rush, we didn't actually have time to get an advantage by him. It wasn't appropriate to just add his title. But in some ways, this stuff all comes from discussions with Chris, starting in Samalov ten years ago, and back and forth with various Euro tech or type meetings. I think the last one that really counted was a meeting that took place in Kyoto, and these whole new directions in typesetting or something like that. And we wrote together a couple of papers, but I think it was Chris's insight that really drove all this. The idea that in many ways we're still stuck in the typewriter age, that the idea of mechanical text is still dominated by the typewriter age. The idea that the input and the output strongly resemble each other. Now they're clearly no longer identical the way they were in the original text, but they are very strongly related. So if you look at a sequence of typeset lists and the original sequence of characters that generated it, you can see they're very strongly resembling each other. But text is used for much more than typing and printing. Let me move forward. When you think about a document, it's going to be edited many times. It's going to be rendered at least as many times as it's edited these days. And when web blogs and so on and so forth, things get annotated, which means you add to it without changing it, but you add in parallel commentaries about it. Unfortunately, if you go to sites such as YouTube, most of the comments are in some pile, but from time to time you do find interesting comments. And of course they get searched, and that's how small companies like Google and Yahoo drive their business. So these companies are clearly not thinking in terms of the sequences of characters with which you've edited something. So I can't see, unfortunately, an SMS for my son in French. I first have to translate it into French before I can understand it. So I think, and I suspect this will be the case when my daughters start sending me SMSes too. But really what we need is a new model of text. But there cannot be a single new model there, because whatever single new model of text will come up with, someone who will meet, even in this room, several hands of a robot, you haven't considered this. So what we're more interested in is a new model in which you can describe naturally the different forms of text that could possibly be manipulated. Now at the very top, some of you have heard me speak about versioning. Versioning is inherent to all of us. You should be able to have different kinds of characters, different kinds of languages, different kinds of stories, different kinds of lots of things. And many different input methods, multiple outputs too. And most importantly, you should be able to take into account the different kinds of processing the text might be subject to. So that includes not just printing, it means being able to read a sequence of characters transforming this into words, stemming the words, doing some grammatical analysis, I don't know, natural language translation, all of these we should be thinking of this in terms of text. So how can we do this? So essentially we need to be able to move from one representation to another through various kinds of processing. So type setting would be one of these different kinds of transformations. And we need to be able to completely separate the different kinds of representations. Now when I say internal representations, it's deliberately plural. It's not a typo. So it's not as if there is a single internal representation, a single canonical representation in a specific organization for a specific set of purposes, there may well be a single canonical representation. But in general no. So these are the two papers that I'm referring with Chris. They're on our box if you wish to get them. The solution, it turns out, already existed. But it took us several years to invent it and then realize that we invented something that already existed. But that's not a bad sign, especially given that it already had been invented for linguists. They're called ADMs, attribute value matrices. They're also called feature structures, hand pass. And what are they? They're simply association lists, I call them tuples, where the values themselves may be ABMs. Now any of these, so you have this dimension value pair, or you might call them t-value pairs, I prefer the word dimension. And any of these values may itself be another sequence of dimension variables. So what that means is any specific value can be reached by following the path from the top. And effectively that gives you a pointer into this data structure. Nothing new. It's very difficult to invent something that's completely new that no one has ever invented before. So what can be encoded? From a long of theoretic point of view, everything simply becomes a mapping for multi-dimensional indices, the values. So there's three very common structures that will come up in text. One is the ordered sequence for flat structures. Another is the ordered tree for higher-archival structures. And then you have the multi-dimensional table. For those of you who just came in late, especially those with a linguistics background, I thought I'd mention what the solution was, which is attribute value matrices. So how do you get through these things? How do you manipulate them? The etiology with object-oriented containers is relevant. They're called iterators, so these indices actually will become iterators from a programming point of view. So if you have an ordered sequence, what counts is the natural number designating what point in this ordered sequence are we? If you have a tree, then the path leading to a specific point in the tree is what counts. If you have a multi-dimensional table, then it's a coordinate in Cartesian space that is of relevance. And the order in which the dimensions are specified is not important. If you want to define a range, then you would give it for the ordered entities a pair of iterators. For the tables, on the other hand, you might want to specify an end-dimensional parallelotope, which would then require possibly two end iterators to specify the corner, the ranges. So that's all. I have applied Ash Cross number, which is eight. So the rest is just examples. So let's look at examples. The simplest case, one that we should all be familiar with now, is a sequence of unicode characters. Here we have a sequence of things, and each of the things is a pair. It is a true tuple saying, this is a unicode character, and here's the index. Now, that's fine, but even in this conference, we've seen situations where, or at least people have talked about it, where unicode isn't enough. So it might be some situations where you'd have visual content, which doesn't have an abstract representation of the unicode character, but is conceptually equivalent to the unicode character. So for example, suppose you wanted to write a book about the origins of writing systems, and you wanted to show a picture of a specific, let's call it a glyph, carved into stone, but which doesn't correspond, but which, it's not to you, done the analysis, that you can then say this corresponds to this unicode character. So it's so long as it has not been made abstract, you need to keep track of your stone glyph. Similarly, you might have some glyph in an Adobe font, which was never encoded in unicode, so you'd want to keep track of it. So this allows you to talk about, in an abstract way, all of these things are equivalent conceptually. Then, you start, this is the kind of things that were being dealt with in Omega, then you start to think, well, we want to be able to read things, we want to be able to write things, but it might be that we don't want to say this is the only way to write things. So we might have some, take a step back, and be able to say, internally we're going to encode things as sequences of words, and then these words, if we print them, then we will choose presentational variants according to certain criteria. So this would allow us fairly easily to deal with US versus UK spelling. Yes? I'm just puzzled by the spaces between the words. I mean, at the top there's no representation of the spaces between the words, and under the spaces between the words. There wouldn't be words between the words spaces. I need more insight into that. This is, the reason we put spaces is as a visual cue to ourselves when we are reading that these are separate words. It's a convention before Carlos Magnus in its map up. The spaces are marked, yes, thank you, but the point, the words it's translated into some sequence of words, the spaces are marked. I just wanted you to say explicitly that the spaces are implicit. No. They're marked. They're an artifact of a particular visual representation. That's fine to say. Thank you. I will ignore more comments from the fine background. So here what happens is you're looking up words in a dictionary, but there's still no, nothing to deal with declination, for example. You have to look up some kind of conjugations, noun or adjective, declinations, or other such things. So then let's move on to a higher level. So here we can have some sort of analysis, and now we were, this would be the lowest dictionary, for example. But these would correspond to the stem words. So for a verb, the infinitive form, for the an adjective, a canonical representation, or now a canonical representation. And so you look at the French verb conjugations, it's, I don't know, typically 18 or 20 different actual conjugated forms, but in the dictionary you only find one entry, except for a very unusual part of this pronoun. So then this is a particular word corresponding to, no, it's a pronoun. It's a subject pronoun, subject pronoun in first, in first person singular. Then there is a verb, which is in first person singular, in the indicative, in the composed past. And then there is an indeterminate article in feminine plural. This should be S's. And then now, which once again should be singular. So once you go to this kind of structure, it turns out that in fact you can include error messages with number variants. So you can say five lines are incorrect, or zero lines are incorrect, or one line is incorrect. And so when you're generating mess, so you have one text, which corresponds to the error message with a hole in it, and only when you throw it in, then quickly it would determine whether it should have S or S, or no S, out of the line. You could have conjugation variants through time, corresponding to sound shifts, or spelling reforms, or other such quite controversial things through history. And of course dialectical and language variants. If you want to write, it's actually possible, I believe, to write a single conjugator that would work quite nicely for French, Italian, and Spanish. Alright? But let's move on. Confound words are notoriously difficult to translate. I came across this with, I think it was a Google translation, but I'm not sure. I came across a text with internet outfitters. Actually no, it wasn't internet outfitters, I was reading the Spanish. So, vendero de equipo de caballero de internet. So, cowboy, you see, internet cowboy equipment vendors. That's when internet outfitters became. And that's simply because it took each of the words in the compound word, and I'm sure you've all seen equivalents in your own language. Alright? But on the other hand, you can have a dictionary of compound words, such things do exist, and that's a higher level of discussion. And these could be encoded, and then you can have sequences. Whenever you don't have a canonical representation of this, then you would be forced to put it down in the sequence of words that form the compound word. Alright? This would allow you to do things like automatic, adding an indefinite article, if such a thing exists in your language. And as I said, you can always use a sequence of entries from some lower level. But you can move higher, you know, if you're dealing with a grammatical structure. So most languages can be described sooner or later in something that resembles this. You've got a subject, verb, object, and indirect object. And the exact order in which these appear in a text will vary from language to language, but they will even vary within the language. For example, in French, five of the six possible combinations of verb, object, indirect object may occur, depending on whether you're using pronouns for the object or the indirect object. Alright? But so all of these are different structures, yet at the same time, they're using the same canonical family of structures. And finally, I mentioned tables. Now tables are mapping from multidimensional couples to cell. There's not really no order dimensions on the actual couples. And when you visually present something, you transform it into a two-dimensional entity, this transformation may be highly complex or very simple, depending on how complex the original table was, and also on the kinds of visual representations that you're trying to encode. So the history of all this is that this came out of a project called Translucid, which is a program in language that I've been developing with the help of Lanca and Pobi. Pobi actually wrote the first multi-threaded implementation for this program in language. And this is a declarative language in which all entities are arbitrary dimensional infinites arrays. So it's through this work in continually viewing everything in terms of these infinites arrays indexed by finite couples that we came up with this idea for text. It just turned out that it was identical to the ADMs. The difference being that in linguistics, the ADMs are ad hoc structures. While we actually have a semantics and tools that allow us to manipulate these. So although we actually have no software to talk about these relevant texts, we can imagine such software actually being written. So, there's my call. Very good, John. I'm very proud of you. Next, any questions? Do you want to have all of those presentations and then we'll have all the questions if you have? I can dodge the tomatoes. You started out being very handled when talking about this one. Not only text but voice. What was it you said? Is that representable to the ADMs? I have no idea. But it's probably something worth thinking about. Is it the only other kind of audio thing that we deal with? We have speech, we have music, and the rest is just not. No. Music is just not. That's true. Because the people who use what the other end does use, do you think it's just a noise? Yes, or a cue? Yeah, I agree. So the answer is, for certain things, definitely it works. So if you're looking, for example, at perfect, imperfect plays, all the sequences, and so on and so forth, chord progressions, these can be included quite nicely this way. But when you have one phrase which is overlapping with another phrase, say Bach's Hue or something like that, I'm not sure. Probably, but I'm not sure exactly what it is you're playing. So I think that might be more relevant to the next talk where you have, where here I've been talking effectively to a single text, but with no links to the outside world. While this example I just mentioned, with the overlapping phrases, might be more multiple texts interacting in interesting ways. But that's the subject of the next one. So can I say what I'm doing? Okay, Jonathan. We can go. So what's the language for the ABMs? Well, basically they parse an entire sentence into a single ABM. That's a common thing. So it's a representation of grammar and meaning? Yeah, so it's verb phrase equals this, and that verb phrase might be composed of other things. And so on and so forth. Sorry? I'm too old to pick them. Yes, yes. And the ABMs are, it's a very short sentence. The ABMs are very close to the top. And the verb is very big sentence. And they're way, way down. Also depends on how much annotation you have. You know, how much analysis of the denominator. Okay. Great. Thank you. Thank you. Thank you. Thank you. Thank you.
 When you think about it, Chris should be an author on this paper, but since we were doing this in a rush,  we didn't actually have time to get an advantage by him. It wasn't appropriate to just add his title.  But in some ways, this stuff all comes from discussions with Chris, starting in Samalov ten years ago,  and back and forth with various Euro tech or type meetings.  I think the last one that really counted was a meeting that took place in Kyoto, and these whole new directions in typesetting or something like that.  And we wrote together a couple of papers, but I think it was Chris's insight that really drove all this.  The idea that in many ways we're still stuck in the typewriter age, that the idea of mechanical text is still dominated by the typewriter age.  The idea that the input and the output strongly resemble each other.  Now they're clearly no longer identical the way they were in the original text, but they are very strongly related.  So if you look at a sequence of typeset lists and the original sequence of characters that generated it, you can see they're very strongly resembling each other.  But text is used for much more than typing and printing.  Let me move forward.  When you think about a document, it's going to be edited many times.  It's going to be rendered at least as many times as it's edited these days.  And when web blogs and so on and so forth, things get annotated, which means you add to it without changing it, but you add in parallel commentaries about it.  Unfortunately, if you go to sites such as YouTube, most of the comments are in some pile, but from time to time you do find interesting comments.  And of course they get searched, and that's how small companies like Google and Yahoo drive their business.  So these companies are clearly not thinking in terms of the sequences of characters with which you've edited something.  So I can't see, unfortunately, an SMS for my son in French. I first have to translate it into French before I can understand it.  So I think, and I suspect this will be the case when my daughters start sending me SMSes too.  But really what we need is a new model of text.  But there cannot be a single new model there, because whatever single new model of text will come up with, someone who will meet, even in this room, several hands of a robot, you haven't considered this.  So what we're more interested in is a new model in which you can describe naturally the different forms of text that could possibly be manipulated.  Now at the very top, some of you have heard me speak about versioning.  Versioning is inherent to all of us. You should be able to have different kinds of characters, different kinds of languages, different kinds of stories, different kinds of lots of things.  And many different input methods, multiple outputs too. And most importantly, you should be able to take into account the different kinds of processing the text might be subject to.  So that includes not just printing, it means being able to read a sequence of characters transforming this into words, stemming the words, doing some grammatical analysis, I don't know, natural language translation, all of these we should be thinking of this in terms of text.  So how can we do this? So essentially we need to be able to move from one representation to another through various kinds of processing.  So type setting would be one of these different kinds of transformations. And we need to be able to completely separate the different kinds of representations.  Now when I say internal representations, it's deliberately plural. It's not a typo.  So it's not as if there is a single internal representation, a single canonical representation in a specific organization for a specific set of purposes, there may well be a single canonical representation.  But in general no. So these are the two papers that I'm referring with Chris. They're on our box if you wish to get them.  The solution, it turns out, already existed. But it took us several years to invent it and then realize that we invented something that already existed.  But that's not a bad sign, especially given that it already had been invented for linguists. They're called ADMs, attribute value matrices. They're also called feature structures, hand pass.  And what are they? They're simply association lists, I call them tuples, where the values themselves may be ABMs.  Now any of these, so you have this dimension value pair, or you might call them t-value pairs, I prefer the word dimension. And any of these values may itself be another sequence of dimension variables.  So what that means is any specific value can be reached by following the path from the top. And effectively that gives you a pointer into this data structure.  Nothing new.  It's very difficult to invent something that's completely new that no one has ever invented before.  So what can be encoded? From a long of theoretic point of view, everything simply becomes a mapping for multi-dimensional indices, the values.  So there's three very common structures that will come up in text. One is the ordered sequence for flat structures.  Another is the ordered tree for higher-archival structures. And then you have the multi-dimensional table.  For those of you who just came in late, especially those with a linguistics background, I thought I'd mention what the solution was, which is attribute value matrices.  So how do you get through these things? How do you manipulate them?  The etiology with object-oriented containers is relevant.  They're called iterators, so these indices actually will become iterators from a programming point of view.  So if you have an ordered sequence, what counts is the natural number designating what point in this ordered sequence are we?  If you have a tree, then the path leading to a specific point in the tree is what counts.  If you have a multi-dimensional table, then it's a coordinate in Cartesian space that is of relevance.  And the order in which the dimensions are specified is not important.  If you want to define a range, then you would give it for the ordered entities a pair of iterators.  For the tables, on the other hand, you might want to specify an end-dimensional parallelotope,  which would then require possibly two end iterators to specify the corner, the ranges.  So that's all. I have applied Ash Cross number, which is eight.  So the rest is just examples. So let's look at examples.  The simplest case, one that we should all be familiar with now, is a sequence of unicode characters.  Here we have a sequence of things, and each of the things is a pair.  It is a true tuple saying, this is a unicode character, and here's the index.  Now, that's fine, but even in this conference, we've seen situations where,  or at least people have talked about it, where unicode isn't enough.  So it might be some situations where you'd have visual content, which doesn't have an abstract representation of the unicode character,  but is conceptually equivalent to the unicode character.  So for example, suppose you wanted to write a book about the origins of writing systems,  and you wanted to show a picture of a specific, let's call it a glyph, carved into stone,  but which doesn't correspond, but which, it's not to you, done the analysis,  that you can then say this corresponds to this unicode character.  So it's so long as it has not been made abstract, you need to keep track of your stone glyph.  Similarly, you might have some glyph in an Adobe font, which was never encoded in unicode, so you'd want to keep track of it.  So this allows you to talk about, in an abstract way, all of these things are equivalent conceptually.  Then, you start, this is the kind of things that were being dealt with in Omega,  then you start to think, well, we want to be able to read things, we want to be able to write things,  but it might be that we don't want to say this is the only way to write things.  So we might have some, take a step back, and be able to say,  internally we're going to encode things as sequences of words,  and then these words, if we print them, then we will choose presentational variants according to certain criteria.  So this would allow us fairly easily to deal with US versus UK spelling.  Yes?  I'm just puzzled by the spaces between the words.  I mean, at the top there's no representation of the spaces between the words,  and under the spaces between the words.  There wouldn't be words between the words spaces.  I need more insight into that.  This is, the reason we put spaces is as a visual cue to ourselves when we are reading that these are separate words.  It's a convention before Carlos Magnus in its map up.  The spaces are marked, yes, thank you, but the point, the words it's translated into some sequence of words,  the spaces are marked.  I just wanted you to say explicitly that the spaces are implicit.  No.  They're marked.  They're an artifact of a particular visual representation.  That's fine to say. Thank you.  I will ignore more comments from the fine background.  So here what happens is you're looking up words in a dictionary,  but there's still no, nothing to deal with declination, for example.  You have to look up some kind of conjugations, noun or adjective,  declinations, or other such things.  So then let's move on to a higher level.  So here we can have some sort of analysis,  and now we were, this would be the lowest dictionary, for example.  But these would correspond to the stem words.  So for a verb, the infinitive form, for the an adjective, a canonical representation,  or now a canonical representation.  And so you look at the French verb conjugations,  it's, I don't know, typically 18 or 20 different actual conjugated forms,  but in the dictionary you only find one entry, except for a very unusual part of this pronoun.  So then this is a particular word corresponding to,  no, it's a pronoun.  It's a subject pronoun, subject pronoun in first, in first person singular.  Then there is a verb, which is in first person singular,  in the indicative, in the composed past.  And then there is an indeterminate article in feminine plural.  This should be S's.  And then now, which once again should be singular.  So once you go to this kind of structure,  it turns out that in fact you can include error messages with number variants.  So you can say five lines are incorrect, or zero lines are incorrect,  or one line is incorrect.  And so when you're generating mess, so you have one text,  which corresponds to the error message with a hole in it,  and only when you throw it in, then quickly it would determine  whether it should have S or S, or no S, out of the line.  You could have conjugation variants through time,  corresponding to sound shifts, or spelling reforms, or other such quite controversial things through history.  And of course dialectical and language variants.  If you want to write, it's actually possible, I believe,  to write a single conjugator that would work quite nicely for French, Italian, and Spanish.  Alright? But let's move on.  Confound words are notoriously difficult to translate.  I came across this with, I think it was a Google translation, but I'm not sure.  I came across a text with internet outfitters.  Actually no, it wasn't internet outfitters, I was reading the Spanish.  So, vendero de equipo de caballero de internet.  So, cowboy, you see, internet cowboy equipment vendors.  That's when internet outfitters became.  And that's simply because it took each of the words in the compound word,  and I'm sure you've all seen equivalents in your own language.  Alright? But on the other hand, you can have a dictionary of compound words,  such things do exist, and that's a higher level of discussion.  And these could be encoded, and then you can have sequences.  Whenever you don't have a canonical representation of this,  then you would be forced to put it down in the sequence of words that form the compound word.  Alright?  This would allow you to do things like automatic, adding an indefinite article,  if such a thing exists in your language.  And as I said, you can always use a sequence of entries from some lower level.  But you can move higher, you know, if you're dealing with a grammatical structure.  So most languages can be described sooner or later in something that resembles this.  You've got a subject, verb, object, and indirect object.  And the exact order in which these appear in a text will vary from language to language,  but they will even vary within the language.  For example, in French, five of the six possible combinations of verb, object, indirect object may occur,  depending on whether you're using pronouns for the object or the indirect object.  Alright?  But so all of these are different structures, yet at the same time,  they're using the same canonical family of structures.  And finally, I mentioned tables.  Now tables are mapping from multidimensional couples to cell.  There's not really no order dimensions on the actual couples.  And when you visually present something, you transform it into a two-dimensional entity,  this transformation may be highly complex or very simple,  depending on how complex the original table was,  and also on the kinds of visual representations that you're trying to encode.  So the history of all this is that this came out of a project called Translucid,  which is a program in language that I've been developing with the help of Lanca and Pobi.  Pobi actually wrote the first multi-threaded implementation for this program in language.  And this is a declarative language in which all entities are arbitrary dimensional infinites arrays.  So it's through this work in continually viewing everything in terms of these infinites arrays  indexed by finite couples that we came up with this idea for text.  It just turned out that it was identical to the ADMs.  The difference being that in linguistics, the ADMs are ad hoc structures.  While we actually have a semantics and tools that allow us to manipulate these.  So although we actually have no software to talk about these relevant texts,  we can imagine such software actually being written.  So, there's my call.  Very good, John. I'm very proud of you.  Next, any questions?  Do you want to have all of those presentations and then we'll have all the questions if you have?  I can dodge the tomatoes.  You started out being very handled when talking about this one.  Not only text but voice.  What was it you said?  Is that representable to the ADMs?  I have no idea.  But it's probably something worth thinking about.  Is it the only other kind of audio thing that we deal with?  We have speech, we have music, and the rest is just not.  No.  Music is just not.  That's true.  Because the people who use what the other end does use,  do you think it's just a noise?  Yes, or a cue?  Yeah, I agree.  So the answer is, for certain things, definitely it works.  So if you're looking, for example, at perfect, imperfect plays, all the sequences, and so on and so forth,  chord progressions, these can be included quite nicely this way.  But when you have one phrase which is overlapping with another phrase,  say Bach's Hue or something like that, I'm not sure.  Probably, but I'm not sure exactly what it is you're playing.  So I think that might be more relevant to the next talk where you have,  where here I've been talking effectively to a single text,  but with no links to the outside world.  While this example I just mentioned, with the overlapping phrases,  might be more multiple texts interacting in interesting ways.  But that's the subject of the next one.  So can I say what I'm doing?  Okay, Jonathan.  We can go.  So what's the language for the ABMs?  Well, basically they parse an entire sentence into a single ABM.  That's a common thing.  So it's a representation of grammar and meaning?  Yeah, so it's verb phrase equals this,  and that verb phrase might be composed of other things.  And so on and so forth.  Sorry?  I'm too old to pick them.  Yes, yes.  And the ABMs are, it's a very short sentence.  The ABMs are very close to the top.  And the verb is very big sentence.  And they're way, way down.  Also depends on how much annotation you have.  You know, how much analysis of the denominator.  Okay.  Great.  Thank you.  Thank you.  Thank you.  Thank you.  Thank you.
Multidimensional_Text_0_71.png Multidimensional_Text_72_3203.png Multidimensional_Text_3204_5255.png Multidimensional_Text_5256_7631.png Multidimensional_Text_7632_9203.png Multidimensional_Text_9204_10127.png Multidimensional_Text_10128_10631.png Multidimensional_Text_10632_10751.png Multidimensional_Text_10752_11399.png Multidimensional_Text_11400_12527.png Multidimensional_Text_12528_12827.png Multidimensional_Text_12828_14135.png Multidimensional_Text_14136_14255.png Multidimensional_Text_14256_14375.png Multidimensional_Text_14376_14855.png Multidimensional_Text_14856_16199.png Multidimensional_Text_16200_18095.png Multidimensional_Text_18096_21803.png Multidimensional_Text_21804_26051.png Multidimensional_Text_26052_28271.png Multidimensional_Text_28272_29555.png Multidimensional_Text_29556_30599.png Multidimensional_Text_30600_36895.png