Item Search
     
BG-Wiki Search
+ Reply to Thread
Page 7 of 9 FirstFirst ... 5 6 7 8 9 LastLast
Results 121 to 140 of 172

Thread: pDif and damage     submit to reddit submit to twitter

  1. #121
    Masamune
    Guest

    Quote Originally Posted by Motenten View Post
    That would also mean Masa's IRL buffalo data should be hitting 1.0 at the top end. Initial estimates indicates that that was possible (assuming BD=71, and secondary multiplier not going above 1.042 for the observed sample set), but a larger data set is needed to see if it's hitting absolute max.
    Mmmm if i follow BGwiki correctly, i get:
    DeltaSTR=112-118= -6, so have to use (DeltaSTR+9)/4 formula
    which gives fSTR=0.75
    => BaseDMG=70.75

  2. #122
    Custom Title
    Join Date
    Nov 2008
    Posts
    1,066
    BG Level
    6
    FFXI Server
    Diabolos

    Quote Originally Posted by Masamune View Post
    Ok thanks for confirming Attack Bonus from a buff/WSbonus/TempItem can go over 999. (still no proof about base attack - just with STR and attack gears - can go over 999)
    Not sure what difference you're trying to imply. Of course you need gear/STR/buffs to get over 999 attack. It's the fact that the display limit is easily surpassed that is seemingly in strange contention here. If attack capped at 999 then Resolution would be doing a definite 20% less damage to Bluffalo (7% attack penalty on 999 attack over 516 defense is 1.8 Ratio, 80% of 2.25) than to other 'softer' targets no matter what attack buffs I put up, but the fact that I do the same rough 5.0-5.2k at the top end with Reso, SA/VV/Echoes, on Bluffalo that I do on piddly Tahrongi mandies should be enough, and when LR wears and I drop 15% of my attack I fall to around 4.5k damage while still playing with a 999 displayed attack. Attack goes past the 999 display limit, full stop and hands down.

    Can you understand why I never really cared about cRatio below ~1.5 now?

  3. #123
    Masamune
    Guest

    The difference is i'm thinking about base attack UNBUFFED, since we are speaking about pdif determination here. That means to avoid any attack boosting in testing to stay the most objective as possible... (and yea in before pointing at my parses using defender on mobs with crit def bonus: i'm even about to delete them if Motenten didnot need them)
    When i wondered if can actually be capped @ 999, i werenot aware that currently a player can't reach 999 just with his base attack and gears/merits. Using Attack buffs or attack boosted WSs doesnot prove anything on that topic and i'd even say is offtopic here.

  4. #124
    BG Content
    Join Date
    Jul 2007
    Posts
    21,105
    BG Level
    10
    FFXI Server
    Lakshmi
    Blog Entries
    1

    I think I have gotten lost in the last few pages. Do we have a model that contains the two main footprints (1.0 frequency spike and slightly uneven distribution between high and low randomizers?) If so, could someone summarize it?

  5. #125
    Custom Title
    Join Date
    Nov 2008
    Posts
    1,066
    BG Level
    6
    FFXI Server
    Diabolos

    Quote Originally Posted by Byrthnoth View Post
    I think I have gotten lost in the last few pages. Do we have a model that contains the two main footprints (1.0 frequency spike and slightly uneven distribution between high and low randomizers?) If so, could someone summarize it?
    Mine generates the 1.0 spike, both as high and low and inbetween, by taking pre-secondary pDif between 0.75 and 1.0 and setting it to 1 and pre-secondary pDif below 0.75 and adding 0.25. This can be dialed in a bit more just based on where the ceiling and floors start and end, but nobody but Masa publishes their data.

    I don't believe Primary to be nonuniform. Put it this way: If you have 100 'pre-secondary' values evenly distributed from 101-200, and then these are multiplied up by 1.00-1.05, you end up with 'more hits' above 150 (What a simple 1.0 multiplier would be) than you might expect, coming out with 57 above a '1.0 primary' and 43 below... You might see that as '32.75% more hits above a 1.0 multiplier' and easily make the wrong conclusion that said multiplier isn't evenly distributed. Dig into this too far that you even correct each side for being uneven in width and you're just asking to see something going on that looks like an imbalance but probably isn't.

    Masa is really pushing my buttons with the "You can't prove attack goes over 999 because you're using buffs to get there" stance. I might grant him that WS attack bonuses might function differently (still a long standing mystery if they're applied before or after level correction because of some SAM vs Kirin data), but he's being obtuse about 999 being purely a display cap for no ready reason. It is certainly NOT irrelevant to the testing here because targets where knowing your cRatio is important are the ones that may require >1000 attack to cap. If attack truly capped at 999 there are plenty of targets that would require this consideration be added to spreadsheets and calculations therein, Bluffalo not being the least of them, because it would vastly affect what maximum Ratio would be as I already pointed out (and these aren't even NMs).

  6. #126
    BG Content
    Join Date
    Jul 2007
    Posts
    21,105
    BG Level
    10
    FFXI Server
    Lakshmi
    Blog Entries
    1

    I would like to believe the entire thing is one linear equation applied to wRatio with a piecewise equation stacked on top of it to make the frequency spike, but I think Motenten's model precludes that possibility.

  7. #127
    Custom Title
    Join Date
    Nov 2008
    Posts
    1,066
    BG Level
    6
    FFXI Server
    Diabolos

    Quote Originally Posted by Byrthnoth View Post
    I would like to believe the entire thing is one linear equation applied to wRatio with a piecewise equation stacked on top of it to make the frequency spike, but I think Motenten's model precludes that possibility.
    Think of it in a programming sense rather than a mathematical sense. In my model the main randomization is not piecewise, nor does any function upon it need to refer back to Ratio, instead all work upon Intermediate or Final pDif and would come out to simple if-then statements really.

    It's easy to say "Is this value low but not too low? set it to this. Is it even lower than that? add something to it" in programming. FFXI is a program, not a set of linear functions. It gets more fitting when you start thinking about lazy programming (The best programmers are the lazy ones!), and that any piecewise deal is going to be a huge stack of conditionals that is too much of a pain to write and even worse to edit. Just remember: Programmers are lazy, especially the good ones. If it takes more than three lines of code (like a piecewise anything probably would) you can maybe give it a second thought.

    But nooooo... whenever I appeal to simplicity or sensibility in game design the regressionists and statisticians all scoff that such things are unnecessary and not relevant and don't belong in mathematically analysis of a game programmed by humans.

  8. #128
    BG Content
    Join Date
    Jul 2007
    Posts
    21,105
    BG Level
    10
    FFXI Server
    Lakshmi
    Blog Entries
    1

    What I was suggesting is ultimately the simplest way to generate a function with the form we observe.


    wRatio = cRatio + (crit > rand) + rand*windowsze

    pDIF = m*wRatio + b

    if 1 < pDIF < 1.2; pDIF = 1
    if pDIF > 1.2; pDIF = pDIF - .2;


    There, you artificially create a distribution that looks like what we observe (minus the up/down frequency distribution) using four statements. I just wish that was how it works.

  9. #129
    Chram
    Join Date
    Sep 2007
    Posts
    2,526
    BG Level
    7
    FFXI Server
    Fenrir

    Quote Originally Posted by Byrthnoth View Post
    I think I have gotten lost in the last few pages. Do we have a model that contains the two main footprints (1.0 frequency spike and slightly uneven distribution between high and low randomizers?) If so, could someone summarize it?
    I'm not entirely comfortable with the max pDif limit below the point where it hits the cap of 0.375, but it seems to be a reasonably good fit, so I'm willing to let it stand for now. I'm pretty confident in the min pDif limit. I have not yet settled on a means of generating the 1.0 spike, which of course also implies that I don't have a complete model for a distribution formula, though I'm pondering a few ideas.

    Quote Originally Posted by Raelia
    but nobody but Masa publishes their data.
    Yeah, I need to put all my parse data into a spreadsheet and post it on Google Docs. Won't be as fancy as Masa's, but at least the raw data will be out there.

    Quote Originally Posted by Raelia
    I don't believe Primary to be nonuniform.
    I mostly agree with you here (one set of equations for entire wRatio value range), though I'm still uncertain about the distribution for above vs below wRatio.

    Quote Originally Posted by Raelia
    Put it this way: If you have 100 'pre-secondary' values evenly distributed from 101-200, and then these are multiplied up by 1.00-1.05, you end up with 'more hits' above 150 (What a simple 1.0 multiplier would be) than you might expect, coming out with 57 above a '1.0 primary' and 43 below... You might see that as '32.75% more hits above a 1.0 multiplier' and easily make the wrong conclusion that said multiplier isn't evenly distributed. Dig into this too far that you even correct each side for being uneven in width and you're just asking to see something going on that looks like an imbalance but probably isn't.
    Not entirely sure if this is related to the prior mentioned "above vs below wRatio", but I'll note that it's not that there are "more hits" above wRatio, it's that "the frequency of each damage point is higher" above wRatio. There may in fact be the same number of total hits above and below wRatio, but with more possible damage values below wRatio they end up getting spread a bit thinner, ending up with lower frequencies.

    If they had equal frequencies across all damage values to begin with, then the secondary multiplier would have no effect on most of the value range (obviously ignoring the leading and trailing edges); in fact the lower-end primary damage values should have a minutely higher frequency than the higher end values because the secondary multiplier spreads the results across fewer values (eg: d100 gets spread between 100 and 105; d190 gets spread between 190 and 199).

    Quote Originally Posted by Raelia
    If attack truly capped at 999 there are plenty of targets that would require this consideration be added to spreadsheets and calculations therein, Bluffalo not being the least of them, because it would vastly affect what maximum Ratio would be as I already pointed out (and these aren't even NMs).
    Completely agree with this. A few years ago there might have been some valid concern that attack capped at the actual displayed value, before anyone really investigated it or had the means to easily surpass it. However, given that it's clear that it -does- go above that value, there is no reason to expect that buffs that affect attack result in anything that is at all different than if you added that attack with gear or skill (just as you could say with gear vs magical haste when considering total haste, or haste and dual wield when considering total delay reduction). If the attack that you gain from Berserk is different from the attack that you gain from skill, then attempting to model the effects of that attack become mostly nonsensical.

    Quote Originally Posted by Byrthnoth
    I would like to believe the entire thing is one linear equation applied to wRatio with a piecewise equation stacked on top of it to make the frequency spike, but I think Motenten's model precludes that possibility.
    Well, you inherently have two equations anyway: one to define the upper boundary and one to define the lower boundary (both of which are single sets of equations across the entire length of wRatio, though technically that means that neither of them represent a 'single equation', either). The only real question (in my model, anyway) is whether the randomization picks a value from either [wRatio .. upper bounary] or [lower boundary .. wRatio], or whether it's a single spread between [lower boundary .. upper boundary].

    Quote Originally Posted by Raelia
    FFXI is a program, not a set of linear functions.
    You make it sound like those are two different things

    Quote Originally Posted by Raelia
    Just remember: Programmers are lazy, especially the good ones.
    I thought we were talking about SE here? >.>

    Quote Originally Posted by Raelia
    If it takes more than three lines of code (like a piecewise anything probably would) you can maybe give it a second thought.
    Actually, not strictly true. It's fine for combat calculations to be relatively complex. The primary limiter is whether the computer can process all the attacks from a zone full of people (~750), both for and against those players, within a bounding time span (eg: 1 second). If they're all dual-wielders, and they all double attack, and all the mobs get two attacks, that's 4*750 + 2*750 = 4500 attacks to be processed within 1 second.

    So the restriction in programming terms is to make sure you can handle all the calculations for a single combat swing within about 0.2 milliseconds (200 microseconds). The most expensive part of the equation is likely to be the call to rand(), so you want to minimize the number of times it can be called (once for crit, once for additional effect on weapon (with additional rolls for magic resistance), once for primary pDif, once for secondary modifier, etc). But beyond that you probably have a fair bit of wiggle room.

    Of course that same time interval has to handle other things as well: delay to next round, special immunities or absorbs or additional effects (eg: Treasure Hunter), etc., so you don't get all of that time dedicated to just calculating the damage. And it doesn't mean you need to force complexity into things; you still want to make the results as simple and straightfoward as possible. However even a few dozen lines is not necessarily completely unfounded.


    Quote Originally Posted by Raelia
    But nooooo... whenever I appeal to simplicity or sensibility in game design the regressionists and statisticians all scoff that such things are unnecessary and not relevant and don't belong in mathematically analysis of a game programmed by humans.
    Well, you were the one that originally really brought statistics into this. It was definitely an important point to make, but don't pretend you had nothing to do with it when some of the results run counter to your own predictions.

    Also, while simplicity is good, one must remember that the goal is to find "the simplest equation that can fully explain the phenomenon", not merely "the simplest equation". There can be a pretty large gap between those two points.

    Quote Originally Posted by Byrthnoth
    wRatio = cRatio + (crit > rand) + rand*windowsze

    pDIF = m*wRatio + b

    if 1 < pDIF < 1.2; pDIF = 1
    if pDIF > 1.2; pDIF = pDIF - .2;

    However windowsize is dependant on the upper and lower boundaries, and those boundaries are dependant on wRatio, so that function is circular.

    Personally, I'm trying very hard to come up with a mechanism for generating the 1.0 spike without chopping a hole in the pDif range.

  10. #130
    Custom Title
    Join Date
    Nov 2008
    Posts
    1,066
    BG Level
    6
    FFXI Server
    Diabolos

    Quote Originally Posted by Motenten View Post
    Personally, I'm trying very hard to come up with a mechanism for generating the 1.0 spike without chopping a hole in the pDif range.
    My way doesn't. It logically 'continuous' and a way to give a +0.25 pDif 'bonus' when it rolls low without making a weird jump in minimum happen. There is definitely a middle range of pDif being set to 1.0 to be generating the 1.0 spike while pDif can still range above and below it, and my method does precisely that. My graphing program just can't handle the conditionals to show it (or rather, can't handle the conditionals without rerolling it's rand function at each step -_-). What I really need is data at low enough values and large enough volumes to see what portion of damage is falling into that spike and if it corresponds with my 0.25 section being set to 1.0, not to mention it controls where the celing/floor start and end as well.

    Hell, I'll just use a real-world example: It only takes my 4ghz box, using only one core because I had Speedfan open and watching mind you, about 12 seconds to run off the (whoops, missed a zero!) 1,000,000 randomized hits I was making histograms of, so would take 0.054 seconds for those 4500 hits. This stuff is hilariously trivial for a computer and you're sorely overestimating the workload. There's probably an orders-of-magnitude larger load issue involved in sending out the packets to each player about all the other players' attacks. For a person writing code it's generally true that what can be done in three lines instead of thirty will be, but asking a computer to do math isn't such a big deal.

  11. #131
    Masamune
    Guest

    Here 2 simple examples

    The basic principle to generate a spike is to follow the basic form of a randomized step:

    Y = START + INT(RANGE*Generator)

    ... and set conditionals inside the function Generator (or RANGE up to yu)so that Generator*RANGE=0, resulting in whole randomized step = START (ie pDIF=1).
    In the 2 examples above, i set START=RANGE=BaseDMG and put conditionals inside Generator... but there are other possible formulations...

  12. #132
    Custom Title
    Join Date
    Nov 2008
    Posts
    1,066
    BG Level
    6
    FFXI Server
    Diabolos

    Quote Originally Posted by Masamune View Post
    Cannot display in browser.

    I don't mean to reflect this upon you, but please stop using proprietary trash software -_-. It doesn't even work in the standalone excel I found because, again, my version is 'too old', and I can't be the only one hesitant to install (let alone purchase ;D) a full version of Office.

    Anyway, examples of what for that matter?

  13. #133
    Chram
    Join Date
    Sep 2007
    Posts
    2,526
    BG Level
    7
    FFXI Server
    Fenrir

    Well, yes, obviously there's a lot more going on than that simplistic little example. The system has to handle pathing and decision making (eg: updating hate decay, current target, etc) for all mobs in the zone, monitor all buffs and debuffs for all players and mobs, compose the network message, accept player input, pass through chat text, etc.

    But yes, you're right, network bandwidth is probably the primary limiting factor in terms of actions per zone. But then that implies that you have far more room to mess around with complex calculations, as long as it doesn't broach that limit.

    Quote Originally Posted by Raelia
    My way doesn't.
    Actually, yes, it does. It resets everything between 1.0 and 0.75, and then shifts stuff below 0.75 up. That's what I meant by 'chopping a hole' in the data. The reset portion is fine, but I don't want to be shifting data around after the fact.


    Quote Originally Posted by Masamune
    The basic principle to generate a spike is to follow the basic form of a randomized step:

    Y = START + INT(RANGE*Generator)

    ... and set conditionals inside the function Generator (or RANGE up to yu)so that Generator*RANGE=0, resulting in whole randomized step = START (ie pDIF=1).
    Very nitpicky point: It's not that Generator*RANGE is 0, which inherently implies that either Generator or RANGE must be 0 (which should never occur in RANGE, and almost never occur in the Generator, though certain setups would allow it to be possible), but rather that the product of those values may be set to 0 before being added to START, either through their own values or due to an additional function being applied to the result.

  14. #134
    Masamune
    Guest

    i never wanted to say that but only to set generator*range=0 to generate a frequency spike at exactly Y=START, nothing else...

    So knowing that definition, you can "play" with either generator and/or range terms to achieve that.
    Logically, as you pointed out, Range can't be =0 (unless you meet the condition fSTR=-1 with a dmg1 weapon), so i naturally played with generator term only, setting range arbitrarily to = BaseDMG, but this could be whatever you think suits best.
    The demonstration is simple:
    If you put range*generator=0 for a particular cRatio range, the formula becomes Y=(Start+INT(0))*(1+5%*2ndaryRand)=BaseDMG*(1+5%*2ndaryRand)
    The bolded result means that whenever cRatio is inside that range, all generated values will be inside [BaseDMG; BaseDMG*1.05], which is observable with a spike for the damage values = BaseDMG, BaseDMG+1 and BaseDMG+2.

    For Raellia, here is a quick manual conversion of the 1st example, on a googlesheet.
    Select an empty cell and hit DELETE key to "reroll" all RANDs.
    I didnot find either how to link together points with a line...

  15. #135
    Custom Title
    Join Date
    Nov 2008
    Posts
    1,066
    BG Level
    6
    FFXI Server
    Diabolos

    Quote Originally Posted by Motenten View Post
    Actually, yes, it does. It resets everything between 1.0 and 0.75, and then shifts stuff below 0.75 up. That's what I meant by 'chopping a hole' in the data. The reset portion is fine, but I don't want to be shifting data around after the fact..
    I meant that there's no gap or jump in the values. From a programming perspective, which we just discussed, it would be maybe one or two lines of code intended to shore up the bottom end of cRatio for fewer hits for zero. Show me that min pDif below 1.2xx cRatio where the 1.0 floor ends isn't parallel to min pDif above 1.5 cRatio. Put plainly it's actually in the same step as if you use a flat +1.0 for criticals (which has actually been a good validation to tweak my Primary in, because it can be made to fit...)

  16. #136
    Chram
    Join Date
    Sep 2007
    Posts
    2,526
    BG Level
    7
    FFXI Server
    Fenrir

    Well, the min pDif slope below ~1.25 does appear to be exactly parallel to the min pDif above ~1.5, with the slope of 1.15..

    However, I just had a vague thought in how your idea would work in my model.. min pDif is (wRatio * 1.15) - n, with some other little trickery in there. Above 1.5 wRatio, n appears to be 751/1024. Below 1.25 I've been using -448, though the actual regression supplied a value of 446 (448 seemed a nicer value to use since it fit other known values, and the regression is of course not exact). An interesting point, though, is that 751/1024 - 0.3 (307/1024) is 444/1024, very close to that regression value. Or, put the other way:

    wRatio * 1.15 - 751/1024 at 1.5 and higher
    wRatio * 1.15 - 751/1024 + 0.3 == wRatio * 1.15 - 444/1024 at 1.25 at lower

    I'll have to give it some thought as to whether that would make sense overall. And actually, 755/1024 (448/1024 + 0.3) is a valid offset for the minimum pDif when using 153/1024 as the slope (ie: 1.15), and maintains fairly solid results up til crit territory, where lower sample sizes start making the extremity values more rare. That's also easier to reconcile than (1 - 1/3.75).

    In any case, it's +0.3 instead of the +0.25 of yours, but I wonder if the general idea can be reconciled.

    Still haven't worked out a proper emergent form for the 1.0 spike, though (ie: one that doesn't explicitly rely on checking whether the pDif range can include 1.0).

  17. #137
    Custom Title
    Join Date
    Nov 2008
    Posts
    1,066
    BG Level
    6
    FFXI Server
    Diabolos

    Quote Originally Posted by Motenten View Post
    In any case, it's +0.3 instead of the +0.25 of yours, but I wonder if the general idea can be reconciled.
    I don't disagree in the slightest with adjusting the value. 0.3 was actually my original guess, then altered to 0.25 to make the floors start and end at certain values on top of my Primary model as it stood at the time, so if you've got a definite show here that it's a 0.3 bump then I'll go back and rework my Primary model instead to make the floors fit as a starting point, then readjust from there.

  18. #138
    Masamune
    Guest

    Quote Originally Posted by Motenten View Post
    Still haven't worked out a proper emergent form for the 1.0 spike, though (ie: one that doesn't explicitly rely on checking whether the pDif range can include 1.0).
    How are you trying to do it?

    For Raellia, i always wondered why i never managed to make your proposal work: please check the googlesheet 2nd sheet plz (and last post in your thread) and can you tell me what i forgot? the problem is that it doesnot generate any spike.

    EDIT: nvm, i made it but had to add one more column for the conditionals on primary pdif.

  19. #139
    BG Content
    Join Date
    Jul 2007
    Posts
    21,105
    BG Level
    10
    FFXI Server
    Lakshmi
    Blog Entries
    1

    Quote Originally Posted by Motenten View Post
    However windowsize is dependant on the upper and lower boundaries, and those boundaries are dependant on wRatio, so that function is circular.

    Personally, I'm trying very hard to come up with a mechanism for generating the 1.0 spike without chopping a hole in the pDif range.
    You could add another letter to Ratio and make it:

    Code:
    wRatio = cRatio + (crit > rand);
     lolRatio = wRatio + windowfunc(wRatio)*rand;
    
     pDIF = m*lolRatio + b;
     
     if 1 < pDIF < 1.2; pDIF = 1;
     if pDIF > 1.2; pDIF = pDIF - .2;
    My main problem with it is that the slopes of the max and the min lines are (if I am looking at your graphs correctly) not parallel. The simplest way to generate the frequency spike is to chop a hole and there isn't anything I'm aware of that indicates it is done a different way.

    Quote Originally Posted by Motenten View Post
    Well, the min pDif slope below ~1.25 does appear to be exactly parallel to the min pDif above ~1.5, with the slope of 1.15..

    However, I just had a vague thought in how your idea would work in my model.. min pDif is (wRatio * 1.15) - n, with some other little trickery in there. Above 1.5 wRatio, n appears to be 751/1024. Below 1.25 I've been using -448, though the actual regression supplied a value of 446 (448 seemed a nicer value to use since it fit other known values, and the regression is of course not exact). An interesting point, though, is that 751/1024 - 0.3 (307/1024) is 444/1024, very close to that regression value. Or, put the other way:

    wRatio * 1.15 - 751/1024 at 1.5 and higher
    wRatio * 1.15 - 751/1024 + 0.3 == wRatio * 1.15 - 444/1024 at 1.25 at lower

    I'll have to give it some thought as to whether that would make sense overall. And actually, 755/1024 (448/1024 + 0.3) is a valid offset for the minimum pDif when using 153/1024 as the slope (ie: 1.15), and maintains fairly solid results up til crit territory, where lower sample sizes start making the extremity values more rare. That's also easier to reconcile than (1 - 1/3.75).

    In any case, it's +0.3 instead of the +0.25 of yours, but I wonder if the general idea can be reconciled.

    Still haven't worked out a proper emergent form for the 1.0 spike, though (ie: one that doesn't explicitly rely on checking whether the pDif range can include 1.0).
    Are the max pDIF lines parallel to each other as well? what if you took the above and used different m/b values for above and below wRatio?

  20. #140
    Custom Title
    Join Date
    Nov 2008
    Posts
    1,066
    BG Level
    6
    FFXI Server
    Diabolos

    Quote Originally Posted by Byrthnoth View Post
    Are the max pDIF lines parallel to each other as well? what if you took the above and used different m/b values for above and below wRatio?
    Not sure anyone has data low enough in cRatio to see that. You gotta be well below 0.5 cRatio to stop hitting 1.0s, so getting low enough to see a slope is even crazier. Definitely time to look at doing it backwards: let a mob hit you, determine it's base damage and attack, then boost defense to get it's Ratio low, assuming it's found that mobs have the same 1.0 flats (which is questionable, but won't stop us from finding out if pDif max slope is the same as above the flat)

+ Reply to Thread
Page 7 of 9 FirstFirst ... 5 6 7 8 9 LastLast