<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hooten+Haller</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hooten+Haller"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Hooten_Haller"/>
	<updated>2026-06-25T12:54:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlFrand&amp;diff=1197297</id>
		<title>LlFrand</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlFrand&amp;diff=1197297"/>
		<updated>2015-08-29T16:51:52Z</updated>

		<summary type="html">&lt;p&gt;Hooten Haller: The most-possible integers requires casting llFrand to (integer) before doing the bitwise operations.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|sort=Frand&lt;br /&gt;
|func=llFrand|func_id=8|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|p1_type=float|p1_name=mag|p1_desc=Any valid float value&lt;br /&gt;
|return_type=float&lt;br /&gt;
|return_text=that is pseudo random in the range {{Interval|gte=0.0|lt=&#039;&#039;&#039;mag&#039;&#039;&#039;|lth=mag|center=return}} or {{Interval|lte=0.0|gt=&#039;&#039;&#039;mag&#039;&#039;&#039;|gth=mag|center=return}}.{{Interval/Footnote}}&amp;lt;br/&amp;gt; This means that the returned value can be any value in the range 0.0 to &#039;&#039;&#039;mag&#039;&#039;&#039; including 0.0, but not including the value of &#039;&#039;&#039;mag&#039;&#039;&#039; itself. The sign of {{LSLP|mag}} matches the return. &lt;br /&gt;
|func_footer=When converting the float to an integer, be sure to use an integer typecast &amp;lt;code&amp;gt;([[integer]])&amp;lt;/code&amp;gt; and &#039;&#039;not&#039;&#039; one of the rounding functions ([[llRound]], [[llFloor]], [[llCeil]]). The integer typecast is the only method guaranteed not to skew the distribution of integer values.&lt;br /&gt;
|caveats=*The random number generator is not a source of entropy.&lt;br /&gt;
**The sequence of random numbers are shared across the entire simulator process, and not independently seeded. Therefore, the pseudo random number generation is not suitable for any application which requires completely predictable or completely unpredictable results.&lt;br /&gt;
* It should be remembered that when passing llFrand an [[integer]] as the {{LSLP|mag}}, it will be implicitly [[typecast]] to a [[float]].&lt;br /&gt;
* Many integers outside the range {{Interval|lte=+2&amp;lt;sup&amp;gt;24&amp;lt;/sup&amp;gt;|gte=-2&amp;lt;sup&amp;gt;24&amp;lt;/sup&amp;gt;|gteh=-2^24|lteh=+2^24|center=integer}} can not be represented in a float (this is an inherent limitation of the float type); for example, outside that range no odd integers will appear. For that reason, when converting the resulting float to integer, it is impossible to generate more than 2&amp;lt;sup&amp;gt;24&amp;lt;/sup&amp;gt;+1 uniformly distributed values, and it&#039;s also impossible to generate more than 9*2&amp;lt;sup&amp;gt;23&amp;lt;/sup&amp;gt;+1 or about 75 million different integers in total. Two llFrand calls may be needed to obtain the desired integer range; see examples below.&lt;br /&gt;
|examples=&lt;br /&gt;
{{{!}} class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
{{!}}- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Method one: returns float within (5.0, 10.0]&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Method two: returns float within (5.0, 10.0]&#039;&#039;&#039;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!!}}&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        float randomFloat = 10.0 + llFrand(-5.0);&lt;br /&gt;
&lt;br /&gt;
        llSay(0, (string) randomFloat);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{!!}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        float randomFloat = 10.0 - llFrand(5.0);&lt;br /&gt;
&lt;br /&gt;
        llSay(0, (string) randomFloat);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{!}}}&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//  *near* 50:50 chance of &amp;quot;Heads&amp;quot; vs. &amp;quot;Tails&amp;quot;&lt;br /&gt;
integer coin_toss()&lt;br /&gt;
{&lt;br /&gt;
    if (llFrand(1.0) &amp;lt; 0.5) return TRUE;&lt;br /&gt;
    return FALSE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//  Sometimes it is useful to get a random integer over a given range.  This is&lt;br /&gt;
//  a surprisingly tricky and emotive subject and has caused endless discussion&lt;br /&gt;
//  on the scripting groups. The primary cause of probability errors when&lt;br /&gt;
//  employing llFrand is to have a varying bin size on the edges of the range.&lt;br /&gt;
//&lt;br /&gt;
//  As the bracket notation indicates, [0.0, mag), the function is inclusive of&lt;br /&gt;
//  the 0.0 and exclusive of the entered value. Because an LSL floating point&lt;br /&gt;
//  number is only a subset of real numbers and does not have infinite&lt;br /&gt;
//  granularity, this schema will work for any float greater than float&lt;br /&gt;
//  t = 1.175494351e-38; at which value the function will return only zero. At a&lt;br /&gt;
//  float beyond this, a math error occurs.&lt;br /&gt;
&lt;br /&gt;
//  Random integer generator:&lt;br /&gt;
//      Contributed by Mephistopheles Thalheimer,&lt;br /&gt;
//      original function posted by Hg Beeks&lt;br /&gt;
&lt;br /&gt;
//  Returns a pseudo-random integer in the range of min to max inclusive.&lt;br /&gt;
&lt;br /&gt;
//  Rationale:&lt;br /&gt;
//      Expands the range by 1.0 to ensure equal bin spacing on ends relative to&lt;br /&gt;
//      the middle of the range and then uses an integer cast to round towards&lt;br /&gt;
//      zero.&lt;br /&gt;
&lt;br /&gt;
//  Caveats:&lt;br /&gt;
//      This function is not range checked and will fail if max &amp;lt; min&lt;br /&gt;
&lt;br /&gt;
integer random_integer(integer min, integer max)&lt;br /&gt;
{&lt;br /&gt;
    return min + (integer)(llFrand(max - min + 1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
say(string message)&lt;br /&gt;
{&lt;br /&gt;
    llSay(0, message);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
//      *near* 50:50 chance of &amp;quot;Heads&amp;quot; vs. &amp;quot;Tails&amp;quot;&lt;br /&gt;
        if (coin_toss()) say(&amp;quot;Heads&amp;quot;);&lt;br /&gt;
        else             say(&amp;quot;Tails&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        integer n1 = random_integer(2, 8); // Return a random number between 2 and 8&lt;br /&gt;
        say(&amp;quot;I chose a &amp;quot; + (string)n1);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Example for generating an uniformly distributed integer with more than&lt;br /&gt;
// 16 million possible values; in particular, this code will generate&lt;br /&gt;
// 500,000,000 possible values, ranging from 0 to 499,999,999 inclusive.&lt;br /&gt;
//&lt;br /&gt;
// The method consists of not using llFrand() on a number larger than 16,777,216&lt;br /&gt;
// (2^24) but to divide the range into two numbers that are both less than that,&lt;br /&gt;
// using a scheme of the form (integer)llFrand(a)*b + (integer)llFrand(b), where&lt;br /&gt;
// a*b gives the desired range.&lt;br /&gt;
//&lt;br /&gt;
// For prime ranges, or ranges with a prime factor greater than 2^24, a rejection&lt;br /&gt;
// scheme should be used (use this method to generate a number slightly above the&lt;br /&gt;
// target range, and reject it and generate a new one if it exceeds the maximum).&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        integer rand = (integer)llFrand(500)*1000000 + (integer)llFrand(1000000);&lt;br /&gt;
        llOwnerSay(&amp;quot;Here&#039;s a random number between 0 and 499,999,999 inclusive: &amp;quot; + (string)rand);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following code produces the most possibilities for random negative integers (suitable for use as channel numbers for example)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
        integer rand = 0x80000000 | (integer)llFrand(65536) | ((integer)llFrand(65536) &amp;lt;&amp;lt; 16);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Simple integer random number tester&lt;br /&gt;
// Contributed by Mephistopheles Thalheimer&lt;br /&gt;
&lt;br /&gt;
// This is a random number tester designed to give a quick visual explanation&lt;br /&gt;
//  and proof of why some random integer functions just do not work. In general,&lt;br /&gt;
//  with any random number generator, if you can see a pattern emerging, then&lt;br /&gt;
//  chances are, the function is not random.&lt;br /&gt;
&lt;br /&gt;
//  The test case given &amp;quot;silly_random_integer( .. )&amp;quot; shows the type of pitfalls&lt;br /&gt;
//  that can happen. Superficially, it would seem like a good candidate.  I&lt;br /&gt;
//  thought so, and in fact mooted it in a discussion, however, a bit of thought&lt;br /&gt;
//  reveals that the first and last bin are only collecting rounded results from&lt;br /&gt;
//  half the float space as the rest of the integers. They are therefore&lt;br /&gt;
//  under-represented in output, and the generator is flawed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer random_integer(integer min, integer max)&lt;br /&gt;
{&lt;br /&gt;
    return min + (integer)llFrand(max - min + 1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
integer silly_random_integer(integer min, integer max)&lt;br /&gt;
{&lt;br /&gt;
    return min + (integer)(llRound(llFrand(max - min))); // Looks good, but does not work&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
say(string message)&lt;br /&gt;
{&lt;br /&gt;
    llSay(0, message);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//  Simple integer random number tester&lt;br /&gt;
//  Contributed by Mephistopheles Thalheimer&lt;br /&gt;
&lt;br /&gt;
list bins;&lt;br /&gt;
&lt;br /&gt;
integer MIN             = 2;                             // The minimum integer you want&lt;br /&gt;
integer MAX             = 5;                             // The maximum integer you want&lt;br /&gt;
&lt;br /&gt;
integer NUMBER_OF_TRIES = 10000;                         // The bigger the better.. but slower&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        say(&amp;quot;Bin tester ready.&amp;quot;);&lt;br /&gt;
        bins = [];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
        say(&amp;quot;Started, be patient&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        integer i;&lt;br /&gt;
        integer r;&lt;br /&gt;
&lt;br /&gt;
        integer range = MAX - MIN;&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt;= range; ++i)&lt;br /&gt;
        {&lt;br /&gt;
            bins += [ 0 ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        integer v;&lt;br /&gt;
        integer out_of_range;&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt; NUMBER_OF_TRIES; ++i)&lt;br /&gt;
        {&lt;br /&gt;
//          Replace the next line with the function you are testing&lt;br /&gt;
            r = silly_random_integer(MIN, MAX);&lt;br /&gt;
&lt;br /&gt;
//          Note the output on the next line has about 0.5 expected hits on the first and last bin&lt;br /&gt;
//          r = random_integer(MIN, MAX);&lt;br /&gt;
&lt;br /&gt;
            if (r &amp;gt; MAX || r &amp;lt; MIN)&lt;br /&gt;
            {&lt;br /&gt;
               out_of_range++;&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
               v = llList2Integer(bins, r - MIN);&lt;br /&gt;
               bins = llListReplaceList(bins, [++v], r - MIN, r - MIN);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt;= range; ++i)&lt;br /&gt;
        {&lt;br /&gt;
            say(&amp;quot;Bin #&amp;quot; + (string)(i + MIN) + &amp;quot; = &amp;quot; + (string)llList2Integer(bins, i));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        say(&amp;quot;Number out of range = &amp;quot; + (string)out_of_range);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
//Exponential distribution&lt;br /&gt;
//&lt;br /&gt;
// Contributed by Pat Perth on October 5th 2013&lt;br /&gt;
// No rights reserved&lt;br /&gt;
//&lt;br /&gt;
// Return an exponentially distributed random number with expected value &#039;mean_value&#039;&lt;br /&gt;
//&lt;br /&gt;
// Reference: Wikipedia article &amp;quot;Exponential distribution&amp;quot;, in particular the section&lt;br /&gt;
// entitled &amp;quot;Generating exponential variates&amp;quot; at&lt;br /&gt;
//&lt;br /&gt;
// http://en.wikipedia.org/wiki/Exponential_distribution (visited on October 5th 2013)&lt;br /&gt;
//&lt;br /&gt;
// The exponential distribution is often an appropriate way to simulate waiting times&lt;br /&gt;
// of the sort &amp;quot;It takes about x seconds for &amp;lt;something&amp;gt; to happen.&amp;quot; For&lt;br /&gt;
// example, if you want to trigger a rain shower &amp;quot;about every seven days&amp;quot;, use&lt;br /&gt;
//&lt;br /&gt;
//  time_between_rain = random_exponential(7.0 * 24.0 * 60.0 * 60.0) ;&lt;br /&gt;
//&lt;br /&gt;
// in an llSleep(...) or llSetTimerEvent(...) call.&lt;br /&gt;
//&lt;br /&gt;
// Please notice the negative sign in the return value.&lt;br /&gt;
&lt;br /&gt;
float random_exponential(float mean_value)&lt;br /&gt;
{&lt;br /&gt;
    return -mean_value * llLog(llFrand(1.0));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|helpers=[[Pseudo-random_Number_Generator]] - Suitable for apps which require repeatable results that feel random.&lt;br /&gt;
|also_header&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llListRandomize]]|}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_articles&lt;br /&gt;
|also_footer&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Math&lt;br /&gt;
|cat2=Float&lt;br /&gt;
|cat3&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Hooten Haller</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetObjectPrimCount&amp;diff=1197256</id>
		<title>LlGetObjectPrimCount</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetObjectPrimCount&amp;diff=1197256"/>
		<updated>2015-08-22T15:49:11Z</updated>

		<summary type="html">&lt;p&gt;Hooten Haller: Fix a minor spelling error.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-1={{LSL_Function/prim|prim|sim=*|}}&lt;br /&gt;
|func_id=323|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llGetObjectPrimCount&lt;br /&gt;
|return_type=integer&lt;br /&gt;
|p1_type=key|p1_name=prim|p1_desc&lt;br /&gt;
|func_footnote=Avatars sitting on the object are not counted{{Footnote|[[llGetNumberOfPrims]] on the other hand does count avatars sitting on the object.|llGetNumberOfPrims on the other hand does count avatars sitting on the object.}}. Zero is returned if {{LSLP|prim}}: {{HoverText|(A)|is not found}} is not found, {{HoverText|(B)|is part of an attachment}} is part of an attachment{{Footnote|Whether the attachment exception is a bug or a feature is unclear.|handle=attachment}}, or {{HoverText|(C)|is not a prim}} is not a prim.&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the total number of prims in the object that contains {{LSLP|prim}}.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
* This cannot be used to detect if an avatar is seated (by checking for a non-zero return), use [[llGetAgentInfo]] instead.&lt;br /&gt;
* The prim count for attachments are not returned{{Footnote|handle=attachment}}. If possible use [[llGetNumberOfPrims]] instead.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer num)&lt;br /&gt;
    {&lt;br /&gt;
        integer prims = llGetObjectPrimCount(llGetKey());&lt;br /&gt;
        if (prims == 0)&lt;br /&gt;
        {&lt;br /&gt;
            // llGetObjectPrimCount returns zero for attachments.&lt;br /&gt;
            prims = llGetNumberOfPrims();&lt;br /&gt;
            // Avatars can&#039;t sit on attachments so this is ok.&lt;br /&gt;
        }&lt;br /&gt;
        llOwnerSay(&amp;quot;This object has &amp;quot;&lt;br /&gt;
                    + (string)prims&lt;br /&gt;
                    + &amp;quot; prims and &amp;quot;&lt;br /&gt;
                    + (string)(llGetNumberOfPrims() - prims)&lt;br /&gt;
                    + &amp;quot; avatars.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetNumberOfPrims]]|Returns the number of prims in the current object.}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Object&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Hooten Haller</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetNotecardLine&amp;diff=17299</id>
		<title>LlGetNotecardLine</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetNotecardLine&amp;diff=17299"/>
		<updated>2007-04-16T19:46:53Z</updated>

		<summary type="html">&lt;p&gt;Hooten Haller: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function/inventory|name|uuid=true|type=notecard}}{{LSL_Function&lt;br /&gt;
|func_id=217|func_sleep=0.1|func_energy=10.0&lt;br /&gt;
|sort=GetNotecardLine&lt;br /&gt;
|func=llGetNotecardLine&lt;br /&gt;
|return_type=key&lt;br /&gt;
|p1_type=string|p1_name=name&lt;br /&gt;
|p2_type=integer|p2_name=line|p2_desc=Line number of a notecard (the index starts at zero).&lt;br /&gt;
|func_desc=Requests the line &#039;&#039;&#039;line&#039;&#039;&#039; of the notecard &#039;&#039;&#039;name&#039;&#039;&#039; from the dataserver.&lt;br /&gt;
|return_text=that is the handle for a {{LSLG|dataserver}} event response.&lt;br /&gt;
|func_footnote=If &#039;&#039;&#039;line&#039;&#039;&#039; is past the end of the notecard {{LSLG|EOF}} is returned by the {{LSLG|dataserver}}. If the return is a {{LSLG|NULL_KEY}} then the notecard could not be found in inventory???&lt;br /&gt;
|spec&lt;br /&gt;
|caveats&lt;br /&gt;
|constants&lt;br /&gt;
|examples&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llGetNumberOfNotecardLines]]|}}&lt;br /&gt;
|also_events={{LSL DefineRow||[[dataserver]]|}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|also_tests&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|cat1=Notecard&lt;br /&gt;
|cat2=Dataserver&lt;br /&gt;
|cat3=&lt;br /&gt;
|cat4=&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Hooten Haller</name></author>
	</entry>
</feed>