<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.runerealm.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfobox_Monster%2Fsandbox</id>
	<title>Module:Infobox Monster/sandbox - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.runerealm.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfobox_Monster%2Fsandbox"/>
	<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Infobox_Monster/sandbox&amp;action=history"/>
	<updated>2026-05-05T15:18:49Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://wiki.runerealm.org/index.php?title=Module:Infobox_Monster/sandbox&amp;diff=34998&amp;oldid=prev</id>
		<title>Alex: Created page with &quot;-------------------------- -- Module for Template:Infobox Monster ------------------------ local p = {}  local onmain = require(&#039;Module:Mainonly&#039;).on_main local commas = require(&#039;Module:Addcommas&#039;)._add local infobox = require(&#039;Module:Infobox&#039;) local signed = require(&#039;Module:Format eq stat&#039;).signed  local slayer_masters = { &#039;turael&#039;, &#039;spria&#039;, &#039;krystilia&#039;, &#039;mazchna&#039;, &#039;vannaka&#039;, &#039;chaeldar&#039;, &#039;konar&#039;, &#039;nieve&#039;, &#039;steve&#039;, &#039;duradel&#039; } local attributes = { 	demon = &#039;[[Demon (...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Infobox_Monster/sandbox&amp;diff=34998&amp;oldid=prev"/>
		<updated>2024-10-16T23:12:19Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;-------------------------- -- Module for &lt;a href=&quot;/w/Template:Infobox_Monster&quot; title=&quot;Template:Infobox Monster&quot;&gt;Template:Infobox Monster&lt;/a&gt; ------------------------ local p = {}  local onmain = require(&amp;#039;Module:Mainonly&amp;#039;).on_main local commas = require(&amp;#039;Module:Addcommas&amp;#039;)._add local infobox = require(&amp;#039;Module:Infobox&amp;#039;) local signed = require(&amp;#039;Module:Format eq stat&amp;#039;).signed  local slayer_masters = { &amp;#039;turael&amp;#039;, &amp;#039;spria&amp;#039;, &amp;#039;krystilia&amp;#039;, &amp;#039;mazchna&amp;#039;, &amp;#039;vannaka&amp;#039;, &amp;#039;chaeldar&amp;#039;, &amp;#039;konar&amp;#039;, &amp;#039;nieve&amp;#039;, &amp;#039;steve&amp;#039;, &amp;#039;duradel&amp;#039; } local attributes = { 	demon = &amp;#039;[[Demon (...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--------------------------&lt;br /&gt;
-- Module for [[Template:Infobox Monster]]&lt;br /&gt;
------------------------&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local onmain = require(&amp;#039;Module:Mainonly&amp;#039;).on_main&lt;br /&gt;
local commas = require(&amp;#039;Module:Addcommas&amp;#039;)._add&lt;br /&gt;
local infobox = require(&amp;#039;Module:Infobox&amp;#039;)&lt;br /&gt;
local signed = require(&amp;#039;Module:Format eq stat&amp;#039;).signed&lt;br /&gt;
&lt;br /&gt;
local slayer_masters = { &amp;#039;turael&amp;#039;, &amp;#039;spria&amp;#039;, &amp;#039;krystilia&amp;#039;, &amp;#039;mazchna&amp;#039;, &amp;#039;vannaka&amp;#039;, &amp;#039;chaeldar&amp;#039;, &amp;#039;konar&amp;#039;, &amp;#039;nieve&amp;#039;, &amp;#039;steve&amp;#039;, &amp;#039;duradel&amp;#039; }&lt;br /&gt;
local attributes = {&lt;br /&gt;
	demon = &amp;#039;[[Demon (attribute)|Demon]]&amp;#039;,&lt;br /&gt;
	dragon = &amp;#039;[[Draconic (attribute)|Draconic]]&amp;#039;,&lt;br /&gt;
	fiery = &amp;#039;[[Fiery (attribute)|Fiery]]&amp;#039;,&lt;br /&gt;
	golem = &amp;#039;[[Golem (attribute)|Golem]]&amp;#039;,&lt;br /&gt;
	kalphite = &amp;#039;[[Kalphite (attribute)|Kalphite]]&amp;#039;,&lt;br /&gt;
	leafy = &amp;#039;[[Leafy (attribute)|Leafy]]&amp;#039;,&lt;br /&gt;
	penance = &amp;#039;[[Penance (attribute)|Penance]]&amp;#039;,&lt;br /&gt;
	rat = &amp;#039;[[Rat (attribute)|Rat]]&amp;#039;,&lt;br /&gt;
	shade = &amp;#039;[[Shade (attribute)|Shade]]&amp;#039;,&lt;br /&gt;
	spectral = &amp;#039;[[Spectral (attribute)|Spectral]]&amp;#039;,&lt;br /&gt;
	undead = &amp;#039;[[Undead (attribute)|Undead]]&amp;#039;,&lt;br /&gt;
	vampyre1 = &amp;#039;[[Vampyre (attribute)|Vampyre (tier 1)]]&amp;#039;,&lt;br /&gt;
	vampyre2 = &amp;#039;[[Vampyre (attribute)|Vampyre (tier 2)]]&amp;#039;,&lt;br /&gt;
	vampyre3 = &amp;#039;[[Vampyre (attribute)|Vampyre (tier 3)]]&amp;#039;,&lt;br /&gt;
	xerician = &amp;#039;[[Xerician (attribute)|Xerician]]&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
&lt;br /&gt;
    return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local ret = infobox.new(args)&lt;br /&gt;
&lt;br /&gt;
	local numeric_args = {&lt;br /&gt;
		&amp;#039;att&amp;#039;, &amp;#039;str&amp;#039;, &amp;#039;def&amp;#039;, &amp;#039;range&amp;#039;, &amp;#039;mage&amp;#039;,&lt;br /&gt;
	}&lt;br /&gt;
	for _, v in ipairs(numeric_args) do&lt;br /&gt;
		ret:defineParams{&lt;br /&gt;
			{ name = v, func = { name = numericarg, params = { v, v }, flag = { &amp;#039;d&amp;#039;, &amp;#039;r&amp;#039; } } },&lt;br /&gt;
			{ name = v..&amp;#039;_smw&amp;#039;, func = { name = tonumber_norefs, params = { v }, flag = { &amp;#039;d&amp;#039; } } },&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local numeric_args_commas = {&lt;br /&gt;
		&amp;#039;combat&amp;#039;, &amp;#039;hitpoints&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
	for _, v in ipairs(numeric_args_commas) do&lt;br /&gt;
		ret:defineParams{&lt;br /&gt;
			{ name = v, func = { name = numericarg_commas, params = { v, v }, flag = { &amp;#039;d&amp;#039;, &amp;#039;r&amp;#039; } } },&lt;br /&gt;
			{ name = v..&amp;#039;_smw&amp;#039;, func = { name = tonumber_norefs, params = { v }, flag = { &amp;#039;p&amp;#039; } } },&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local signed_numeric_args = {&lt;br /&gt;
		&amp;#039;amagic&amp;#039;, &amp;#039;arange&amp;#039;,&lt;br /&gt;
		&amp;#039;dstab&amp;#039;, &amp;#039;dslash&amp;#039;, &amp;#039;dcrush&amp;#039;, &amp;#039;dmagic&amp;#039;, &amp;#039;drange&amp;#039;,&lt;br /&gt;
		&amp;#039;attbns&amp;#039;, &amp;#039;strbns&amp;#039;, &amp;#039;mbns&amp;#039;, &amp;#039;rngbns&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	for _, v in ipairs(signed_numeric_args) do&lt;br /&gt;
		ret:defineParams{&lt;br /&gt;
			{ name = v, func = { name = signednumericarg, params = { v, v }, flag = { &amp;#039;d&amp;#039;, &amp;#039;r&amp;#039; } } },&lt;br /&gt;
			{ name = v..&amp;#039;_smw&amp;#039;, func = { name = tonumber_norefs, params = { v }, flag = { &amp;#039;d&amp;#039; } } },&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	ret:defineParams{&lt;br /&gt;
		{ name = &amp;#039;name&amp;#039;, func = &amp;#039;name&amp;#039;},&lt;br /&gt;
		{ name = &amp;#039;image&amp;#039;, func = &amp;#039;image&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;image_smw&amp;#039;, func = { name = image_smw, params = { &amp;#039;image&amp;#039; }, flag = &amp;#039;p&amp;#039; } },&lt;br /&gt;
&lt;br /&gt;
		{ name = &amp;#039;release&amp;#039;, func = &amp;#039;release&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;removal&amp;#039;, func = &amp;#039;removal&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;aka&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
&lt;br /&gt;
		{ name = &amp;#039;size&amp;#039;, func = sizeparam },&lt;br /&gt;
		{ name = &amp;#039;size_smw&amp;#039;, func = { name = &amp;#039;has_content&amp;#039;, params = {&amp;#039;size&amp;#039;}, flag = &amp;#039;p&amp;#039;} },&lt;br /&gt;
		{ name = &amp;#039;members&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;examine&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
&lt;br /&gt;
		{ name = &amp;#039;aggressive&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;poisonous&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;attributes&amp;#039;, func = attributesarg },&lt;br /&gt;
		{ name = &amp;#039;attributes_smw&amp;#039;, func = { name = attributes_smw, params = { &amp;#039;attributes&amp;#039; }, flag = &amp;#039;p&amp;#039; } },&lt;br /&gt;
		{ name = &amp;#039;attack style&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;attack style_smw&amp;#039;, func = { name = csv_to_multi, params = { &amp;#039;attack style&amp;#039;, true }, flag = { &amp;#039;d&amp;#039;, &amp;#039;r&amp;#039; } } },&lt;br /&gt;
		{ name = &amp;#039;attack speed&amp;#039;, func = attackspeedarg },&lt;br /&gt;
		{ name = &amp;#039;attack speed_smw&amp;#039;, func = { name = attackspeed_smw, params = { &amp;#039;attack speed&amp;#039; }, flag = &amp;#039;p&amp;#039; } },&lt;br /&gt;
&lt;br /&gt;
		{ name = &amp;#039;xpbonus&amp;#039;, func = { name = signedpercentnumericarg, params = { &amp;#039;xpbonus&amp;#039;, &amp;#039;xpbonus&amp;#039; }, flag = { &amp;#039;d&amp;#039;, &amp;#039;r&amp;#039; } } },&lt;br /&gt;
		{ name = &amp;#039;xpbonus_smw&amp;#039;, func = { name = tonumber_norefs, params = { &amp;#039;xpbonus&amp;#039; }, flag = { &amp;#039;p&amp;#039; } } },&lt;br /&gt;
&lt;br /&gt;
		{ name = &amp;#039;max hit&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;max_hit_fmt&amp;#039;, func = { name = csv_to_formatted, params = { &amp;#039;max hit&amp;#039; }, flag = { &amp;#039;d&amp;#039; } } },&lt;br /&gt;
		{ name = &amp;#039;max_hit_smw&amp;#039;, func = { name = csv_to_multi, params = { &amp;#039;max hit&amp;#039;, true }, flag = { &amp;#039;d&amp;#039;, &amp;#039;r&amp;#039; } } },&lt;br /&gt;
&lt;br /&gt;
		{ name = &amp;#039;respawn&amp;#039;, func = respawnarg },&lt;br /&gt;
&lt;br /&gt;
		{ name = &amp;#039;cat&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;cat_smw&amp;#039;, func = { name = csv_to_multi, params = { &amp;#039;cat&amp;#039;, true }, flag = { &amp;#039;d&amp;#039;, &amp;#039;r&amp;#039; } } },&lt;br /&gt;
		{ name = &amp;#039;slaylvl&amp;#039;, func = { name = &amp;#039;has_content&amp;#039;, params = {&amp;#039;slaylvl&amp;#039;, &amp;#039;None&amp;#039; }, flag = { &amp;#039;d&amp;#039;, &amp;#039;r&amp;#039; } } },&lt;br /&gt;
		{ name = &amp;#039;slaylvl_smw&amp;#039;, func = { name = tonumber_norefs, params = { &amp;#039;slaylvl&amp;#039; }, flag = { &amp;#039;d&amp;#039; } } },&lt;br /&gt;
		{ name = &amp;#039;assignedby&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;assignedby_pics&amp;#039;, func = { name = assignedbyarg, params = { &amp;#039;assignedby&amp;#039; }, flag = &amp;#039;d&amp;#039; } },&lt;br /&gt;
		{ name = &amp;#039;assignedby_smw&amp;#039;, func = { name = csv_to_multi, params = { &amp;#039;assignedby&amp;#039;, true }, flag = { &amp;#039;d&amp;#039;, &amp;#039;r&amp;#039; } } },&lt;br /&gt;
		{ name = &amp;#039;slayxp&amp;#039;, func = exp_arg },&lt;br /&gt;
		{ name = &amp;#039;slayxp_smw&amp;#039;, func = { name = tonumber_norefs, params = { &amp;#039;slayxp&amp;#039; }, flag = { &amp;#039;p&amp;#039; } } },&lt;br /&gt;
&lt;br /&gt;
		{ name = &amp;#039;immunepoison&amp;#039;, func = { name = immunearg, params = {&amp;#039;immunepoison&amp;#039;, &amp;#039;immunepoison&amp;#039;}, flag = { &amp;#039;d&amp;#039;, &amp;#039;r&amp;#039;, &amp;#039;r&amp;#039; } } },&lt;br /&gt;
		{ name = &amp;#039;immunepoison_smw&amp;#039;, func = { name = immunearg_smw, params = {&amp;#039;immunepoison&amp;#039;, &amp;#039;immunepoison&amp;#039;}, flag = { &amp;#039;p&amp;#039;, &amp;#039;r&amp;#039; } } },&lt;br /&gt;
		{ name = &amp;#039;immunevenom&amp;#039;, func = { name = immunearg, params = {&amp;#039;immunevenom&amp;#039;, &amp;#039;immunevenom&amp;#039;}, flag = { &amp;#039;d&amp;#039;, &amp;#039;r&amp;#039;, &amp;#039;r&amp;#039; } } },&lt;br /&gt;
		{ name = &amp;#039;immunevenom_smw&amp;#039;, func = { name = immunearg_smw, params = {&amp;#039;immunevenom&amp;#039;, &amp;#039;immunevenom&amp;#039;}, flag = { &amp;#039;p&amp;#039;, &amp;#039;r&amp;#039; } } },&lt;br /&gt;
		{ name = &amp;#039;immunecannon&amp;#039;, func = { name = immunearg, params = {&amp;#039;immunecannon&amp;#039;, &amp;#039;immunecannon&amp;#039;}, flag = { &amp;#039;d&amp;#039;, &amp;#039;r&amp;#039;, &amp;#039;r&amp;#039; } } },&lt;br /&gt;
		{ name = &amp;#039;immunethrall&amp;#039;, func = { name = immunearg, params = {&amp;#039;immunethrall&amp;#039;, &amp;#039;immunethrall&amp;#039;}, flag = { &amp;#039;d&amp;#039;, &amp;#039;r&amp;#039;, &amp;#039;r&amp;#039; } } },&lt;br /&gt;
		{ name = &amp;#039;freezeresistance&amp;#039;, func = freezeresistancearg },&lt;br /&gt;
&lt;br /&gt;
		{ name = &amp;#039;id&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;id_smw&amp;#039;, func = { name = csv_to_multi, params = { &amp;#039;id&amp;#039;, false }, flag = { &amp;#039;p&amp;#039;, &amp;#039;r&amp;#039; } } },&lt;br /&gt;
		{ name = &amp;#039;version&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;usesinfobox&amp;#039;, func = { name = tostring, params = { &amp;#039;Monster&amp;#039; }, flag = &amp;#039;r&amp;#039; } },&lt;br /&gt;
		{ name = &amp;#039;usesskill&amp;#039;, func = { name = usesskillarg, params = { &amp;#039;slayxp_smw&amp;#039; }, flag = &amp;#039;d&amp;#039; } },&lt;br /&gt;
		{ name = &amp;#039;dropversion&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	ret:defineLinks({ hide = true })&lt;br /&gt;
&lt;br /&gt;
	local smw_mapping = {&lt;br /&gt;
		members = &amp;#039;Is members only&amp;#039;,&lt;br /&gt;
		release = &amp;#039;Release date&amp;#039;,&lt;br /&gt;
		id_smw = &amp;#039;NPC ID&amp;#039;,&lt;br /&gt;
		image_smw = &amp;#039;Image&amp;#039;,&lt;br /&gt;
		combat_smw = &amp;#039;Combat level&amp;#039;,&lt;br /&gt;
		examine = &amp;#039;Examine&amp;#039;,&lt;br /&gt;
		poisonous = &amp;#039;Poisonous&amp;#039;,&lt;br /&gt;
		attributes_smw = &amp;#039;Monster attribute&amp;#039;,&lt;br /&gt;
		hitpoints_smw = &amp;#039;Hitpoints&amp;#039;,&lt;br /&gt;
		max_hit_smw = &amp;#039;Max hit&amp;#039;,&lt;br /&gt;
		slaylvl_smw = &amp;#039;Slayer level&amp;#039;,&lt;br /&gt;
		slayxp_smw = &amp;#039;Slayer experience&amp;#039;,&lt;br /&gt;
		usesskill = &amp;#039;Uses skill&amp;#039;,&lt;br /&gt;
		assignedby_smw = &amp;#039;Assigned by&amp;#039;,&lt;br /&gt;
		att_smw = &amp;#039;Attack level&amp;#039;,&lt;br /&gt;
		str_smw = &amp;#039;Strength level&amp;#039;,&lt;br /&gt;
		def_smw = &amp;#039;Defence level&amp;#039;,&lt;br /&gt;
		range_smw = &amp;#039;Ranged level&amp;#039;,&lt;br /&gt;
		mage_smw = &amp;#039;Magic level&amp;#039;,&lt;br /&gt;
		amagic_smw = &amp;#039;Magic attack bonus&amp;#039;,&lt;br /&gt;
		arange_smw = &amp;#039;Range attack bonus&amp;#039;,&lt;br /&gt;
		dstab_smw = &amp;#039;Stab defence bonus&amp;#039;,&lt;br /&gt;
		dslash_smw = &amp;#039;Slash defence bonus&amp;#039;,&lt;br /&gt;
		dcrush_smw = &amp;#039;Crush defence bonus&amp;#039;,&lt;br /&gt;
		dmagic_smw = &amp;#039;Magic defence bonus&amp;#039;,&lt;br /&gt;
		drange_smw = &amp;#039;Range defence bonus&amp;#039;,&lt;br /&gt;
		attbns_smw = &amp;#039;Attack bonus&amp;#039;,&lt;br /&gt;
		strbns_smw = &amp;#039;Strength bonus&amp;#039;,&lt;br /&gt;
		rngbns_smw = &amp;#039;Ranged Strength bonus&amp;#039;,&lt;br /&gt;
		mbns_smw = &amp;#039;Magic Damage bonus&amp;#039;,&lt;br /&gt;
		version = &amp;#039;Version anchor&amp;#039;,&lt;br /&gt;
		name = &amp;#039;Name&amp;#039;,&lt;br /&gt;
		cat_smw = &amp;#039;Slayer category&amp;#039;,&lt;br /&gt;
		immunepoison_smw = &amp;#039;Immune to poison&amp;#039;,&lt;br /&gt;
		immunevenom_smw = &amp;#039;Immune to venom&amp;#039;,&lt;br /&gt;
		[&amp;#039;attack style_smw&amp;#039;] = &amp;#039;Attack style&amp;#039;,&lt;br /&gt;
		[&amp;#039;attack speed_smw&amp;#039;] = &amp;#039;Attack speed&amp;#039;,&lt;br /&gt;
		xpbonus_smw = &amp;#039;Experience bonus&amp;#039;,&lt;br /&gt;
		usesinfobox = &amp;#039;Uses infobox&amp;#039;,&lt;br /&gt;
		size_smw = &amp;#039;Size&amp;#039;,&lt;br /&gt;
	}&lt;br /&gt;
	local smw_all_mapping = {}&lt;br /&gt;
	for param, property_name in pairs(smw_mapping) do&lt;br /&gt;
		smw_all_mapping[param] = &amp;#039;All &amp;#039;..property_name&lt;br /&gt;
	end&lt;br /&gt;
	ret:useSMWSubobject(smw_mapping)&lt;br /&gt;
	ret:useSMWOne(smw_all_mapping)&lt;br /&gt;
&lt;br /&gt;
	ret:customButtonPlacement(true)&lt;br /&gt;
	ret:create()&lt;br /&gt;
	ret:cleanParams()&lt;br /&gt;
&lt;br /&gt;
	ret:addButtonsCaption()&lt;br /&gt;
&lt;br /&gt;
	ret:defineName(&amp;#039;Infobox Monster&amp;#039;)&lt;br /&gt;
	ret:addClass(&amp;#039;infobox-monster&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	ret:addRow{&lt;br /&gt;
		{ tag = &amp;#039;argh&amp;#039;, content = &amp;#039;name&amp;#039;, class=&amp;#039;infobox-header&amp;#039;, colspan = &amp;#039;30&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	:pad(30)&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;image&amp;#039;, class=&amp;#039;infobox-image infobox-full-width-content&amp;#039;, colspan = &amp;#039;30&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:pad(30)&lt;br /&gt;
&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Released&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;release&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ret:paramDefined(&amp;#039;removal&amp;#039;, &amp;#039;all&amp;#039;) then&lt;br /&gt;
		ret:addRow{&lt;br /&gt;
			{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Removal&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
			{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;removal&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if ret:paramDefined(&amp;#039;aka&amp;#039;, &amp;#039;all&amp;#039;) then&lt;br /&gt;
		ret:addRow{&lt;br /&gt;
			{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Also called&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
			{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;aka&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	ret:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Members]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;members&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Combat level]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;combat&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ret:paramDefined(&amp;#039;size&amp;#039;, &amp;#039;all&amp;#039;) then&lt;br /&gt;
		ret:addRow{&lt;br /&gt;
			{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Size]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
			{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;size&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	ret:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Examine]]&amp;#039;, colspan= &amp;#039;10&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;examine&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:pad(30)&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Combat info&amp;#039;, colspan = &amp;#039;30&amp;#039;, class = &amp;#039;infobox-subheader&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:pad(30)&lt;br /&gt;
&lt;br /&gt;
	if ret:paramDefined(&amp;#039;attributes&amp;#039;, &amp;#039;all&amp;#039;) then&lt;br /&gt;
		ret:addRow{&lt;br /&gt;
			{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Monster attribute|Attribute]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
			{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;attributes&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if ret:paramDefined(&amp;#039;xpbonus&amp;#039;, &amp;#039;all&amp;#039;) then&lt;br /&gt;
		ret:addRow{&lt;br /&gt;
			{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Experience bonus|XP bonus]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
			{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;xpbonus&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	ret:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Monster maximum hit|Max hit]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;max_hit_fmt&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Aggressiveness|Aggressive]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;aggressive&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Poison|Poisonous]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;poisonous&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Combat Options|Attack style]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;attack style&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Monster attack speed|Attack speed]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;attack speed&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ret:paramDefined(&amp;#039;respawn&amp;#039;, &amp;#039;all&amp;#039;) then&lt;br /&gt;
		ret:addRow{&lt;br /&gt;
			{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Respawn time&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
			{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;respawn&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	ret:pad(30)&lt;br /&gt;
&lt;br /&gt;
	-- If a monster is assigned or has a slayer level, include slayer info&lt;br /&gt;
	local slaylvl_defined = ret:paramGrep(&amp;#039;slaylvl&amp;#039;, function(x) return string.lower(x or &amp;#039;none&amp;#039;) ~= &amp;#039;none&amp;#039; end)&lt;br /&gt;
	if ret:paramDefined(&amp;#039;assignedby&amp;#039;, &amp;#039;all&amp;#039;) or slaylvl_defined then&lt;br /&gt;
		ret:addRow{&lt;br /&gt;
			{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Slayer icon.png|link=Slayer]] [[Slayer|Slayer info]]&amp;#039;, colspan = &amp;#039;30&amp;#039;, class = &amp;#039;infobox-subheader&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
		:pad(30)&lt;br /&gt;
		:addRow{&lt;br /&gt;
			{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Slayer|Slayer level]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
			{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;slaylvl&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		-- If a monster is assigned, include assignment info&lt;br /&gt;
		if ret:paramDefined(&amp;#039;assignedby&amp;#039;, &amp;#039;all&amp;#039;) then&lt;br /&gt;
			ret:addRow{&lt;br /&gt;
				{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Slayer|Slayer XP]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
				{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;slayxp&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			:addRow{&lt;br /&gt;
				{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Slayer task#List of assignments|Category]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
				{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;cat&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			:addRow{&lt;br /&gt;
				{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Slayer Master|Assigned by]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
				{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;assignedby_pics&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
			ret:addRow{&lt;br /&gt;
				{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Slayer Master|Assigned by]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
				{ tag = &amp;#039;td&amp;#039;, content = &amp;#039;Not assigned&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		ret:pad(30)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	ret:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Combat icon.png|link=Combat]] [[Combat|Combat stats]]&amp;#039;, colspan = &amp;#039;30&amp;#039;, class = &amp;#039;infobox-subheader&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:pad(30)&lt;br /&gt;
&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Hitpoints icon.png|link=Hitpoints]]&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Attack icon.png|link=Attack]]&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Strength icon.png|link=Strength]]&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Defence icon.png|link=Defence]]&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Magic icon.png|link=Magic]]&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Ranged icon.png|link=Ranged]]&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;hitpoints&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;att&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;str&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;def&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;mage&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;range&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	:pad(30)&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Attack icon.png|link=Attack]] [[Attack|Aggressive stats]]&amp;#039;, colspan = &amp;#039;30&amp;#039;, class = &amp;#039;infobox-subheader&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:pad(30)&lt;br /&gt;
&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Attack icon.png|link=Attack|Monster attack bonus]]&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Strength icon.png|link=Strength|Monster strength bonus]]&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Magic icon.png|link=Magic]]&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Magic Damage icon.png|link=Magic damage|Monster magic strength bonus]]&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Ranged icon.png|link=Ranged]]&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Ranged Strength icon.png|link=Ranged Strength|Monster ranged strength bonus]]&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;attbns&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;strbns&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;amagic&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;mbns&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;arange&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;rngbns&amp;#039;, colspan = &amp;#039;5&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	:pad(30)&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Defence icon.png|link=Defence]] [[Defence|Defensive stats]]&amp;#039;, colspan = &amp;#039;30&amp;#039;, class = &amp;#039;infobox-subheader&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:pad(30)&lt;br /&gt;
&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:White dagger.png|link=Stab]]&amp;#039;, colspan = &amp;#039;6&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:White scimitar.png|link=Slash]]&amp;#039;, colspan = &amp;#039;6&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:White warhammer.png|link=Crush]]&amp;#039;, colspan = &amp;#039;6&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Magic icon.png|link=Magic]]&amp;#039;, colspan = &amp;#039;6&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[File:Ranged icon.png|link=Ranged]]&amp;#039;, colspan = &amp;#039;6&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;dstab&amp;#039;, colspan = &amp;#039;6&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;dslash&amp;#039;, colspan = &amp;#039;6&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;dcrush&amp;#039;, colspan = &amp;#039;6&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;dmagic&amp;#039;, colspan = &amp;#039;6&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;drange&amp;#039;, colspan = &amp;#039;6&amp;#039;, class = &amp;#039;infobox-nested&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	:pad(30)&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Immunities&amp;#039;, colspan = &amp;#039;30&amp;#039;, class = &amp;#039;infobox-subheader&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:pad(30)&lt;br /&gt;
&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Poison]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;immunepoison&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Venom]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;immunevenom&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	if ret:paramDefined(&amp;#039;immunecannon&amp;#039;, &amp;#039;all&amp;#039;) then&lt;br /&gt;
		ret:addRow{&lt;br /&gt;
			{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Cannons]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
			{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;immunecannon&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	if ret:paramDefined(&amp;#039;immunethrall&amp;#039;, &amp;#039;all&amp;#039;) then&lt;br /&gt;
		ret:addRow{&lt;br /&gt;
			{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Thralls]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
			{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;immunethrall&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	if ret:paramDefined(&amp;#039;freezeresistance&amp;#039;, &amp;#039;all&amp;#039;) then&lt;br /&gt;
		ret:addRow{&lt;br /&gt;
			{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Freeze]]&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
			{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;freezeresistance&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	ret:pad(30)&lt;br /&gt;
&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Advanced data&amp;#039;, class = &amp;#039;infobox-subheader&amp;#039;, colspan = &amp;#039;30&amp;#039; },&lt;br /&gt;
		meta = {addClass = &amp;#039;advanced-data&amp;#039;}&lt;br /&gt;
	}&lt;br /&gt;
	:pad(30, &amp;#039;advanced-data&amp;#039;)&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Monster ID&amp;#039;, colspan = &amp;#039;10&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;id&amp;#039;,  colspan = &amp;#039;20&amp;#039; },&lt;br /&gt;
		meta = {addClass = &amp;#039;advanced-data&amp;#039;}&lt;br /&gt;
	}&lt;br /&gt;
	:pad(30, &amp;#039;advanced-data&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	ret:addDropLevelVars(&amp;#039;combat&amp;#039;, &amp;#039;combat&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	if onmain() then&lt;br /&gt;
		local a1 = ret:param(&amp;#039;all&amp;#039;)&lt;br /&gt;
		local a2 = ret:categoryData()&lt;br /&gt;
		ret:wikitext(addcategories(a1, a2))&lt;br /&gt;
	end&lt;br /&gt;
	return ret:tostring()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function numericarg(arg, arg_name)&lt;br /&gt;
	if not infobox.isDefined(arg) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return arg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function numericarg_commas(arg, arg_name)&lt;br /&gt;
	if not infobox.isDefined(arg) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local n = tonumber(arg)&lt;br /&gt;
	if n == nil then&lt;br /&gt;
		return arg&lt;br /&gt;
	else&lt;br /&gt;
		return commas(tonumber(arg))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- If the arg is numeric, return the signed version (starts with + or -)&lt;br /&gt;
function signednumericarg(arg, arg_name)&lt;br /&gt;
	local _arg = numericarg(arg, arg_name)&lt;br /&gt;
	if tonumber(_arg) ~= nil then&lt;br /&gt;
		return signed(_arg)&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Sign the arg and append a percent sign&lt;br /&gt;
function signedpercentnumericarg(arg, arg_name)&lt;br /&gt;
	local _arg = signednumericarg(arg, arg_name)&lt;br /&gt;
	if _arg ~= nil then&lt;br /&gt;
		return _arg..&amp;#039;%&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Remove &amp;lt;ref&amp;gt;&amp;lt;/ref&amp;gt; from the string before converting tonumber()&lt;br /&gt;
function tonumber_norefs(arg)&lt;br /&gt;
	local raw = string.gsub(arg, &amp;quot;.&amp;#039;\&amp;quot;`UNIQ[^`]*QINU`\&amp;quot;&amp;#039;.&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	return tonumber(raw)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function attributesarg(arg)&lt;br /&gt;
	if not infobox.isDefined(arg) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local arg = string.lower(arg)&lt;br /&gt;
	if arg == &amp;#039;no&amp;#039; then&lt;br /&gt;
		return &amp;#039;None&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local result = {}&lt;br /&gt;
	for attribute_i in string.gmatch(arg, &amp;quot;[^,]+&amp;quot;) do&lt;br /&gt;
		local trimmed = attribute_i:gsub(&amp;quot;^%s*(.-)%s*$&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
		if attributes[trimmed] then&lt;br /&gt;
			table.insert(result, attributes[trimmed])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if #result &amp;gt; 0 then&lt;br /&gt;
		return table.concat(result, &amp;#039;, &amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;None&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Returns list of types in smw format&lt;br /&gt;
function attributes_smw(arg)&lt;br /&gt;
	if not infobox.isDefined(arg) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local arg = string.lower(arg)&lt;br /&gt;
	if arg == &amp;#039;no&amp;#039; then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local result = {}&lt;br /&gt;
	for attribute_i in string.gmatch(arg, &amp;quot;[^,]+&amp;quot;) do&lt;br /&gt;
		local trimmed = attribute_i:gsub(&amp;quot;^%s*(.-)%s*$&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
		if attributes[trimmed] then&lt;br /&gt;
			table.insert(result, trimmed)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if #result &amp;gt; 0 then&lt;br /&gt;
		return table.concat(result, &amp;#039;&amp;amp;&amp;amp;SPLITPOINT&amp;amp;&amp;amp;&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function respawnarg(arg)&lt;br /&gt;
	if not infobox.isDefined(arg) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- if arg is a valid number, display ticks and seconds&lt;br /&gt;
	if tonumber(arg) then&lt;br /&gt;
		local plural = tonumber(arg) ~= 1 and &amp;#039;s&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
		return arg .. &amp;#039; tick&amp;#039; .. plural .. &amp;#039; (&amp;#039; .. arg * 0.6 .. &amp;#039; seconds)&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- if arg isn&amp;#039;t a number, return it unmodified&lt;br /&gt;
	return arg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Generate pics for defined slayer masters, or return nil if undefined&lt;br /&gt;
function assignedbyarg(arg)&lt;br /&gt;
	if not infobox.isDefined(arg) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local arg = string.lower(arg)&lt;br /&gt;
	if arg == &amp;#039;no&amp;#039; then&lt;br /&gt;
		return &amp;#039;Not assigned&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local result = {}&lt;br /&gt;
	for i, slayer_master in ipairs(slayer_masters) do&lt;br /&gt;
		if string.match(arg, slayer_master) then&lt;br /&gt;
			table.insert(result, string.format(&amp;#039;[[File:%s chathead.png|x40px|link=%s]]&amp;#039;, slayer_master, slayer_master))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if #result &amp;gt; 0 then&lt;br /&gt;
		return table.concat(result, &amp;#039; &amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function exp_arg(arg)&lt;br /&gt;
	if not infobox.isDefined(arg) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not tonumber(arg) then&lt;br /&gt;
		return arg&lt;br /&gt;
	end&lt;br /&gt;
	return string.format(&amp;#039;&amp;lt;span class=&amp;quot;infobox-quantity&amp;quot; data-val-each=&amp;quot;%s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;infobox-quantity-replace&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt; xp&amp;lt;/span&amp;gt;&amp;#039;, arg, commas(arg))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function immunearg_smw(arg, arg_name)&lt;br /&gt;
	if not infobox.isDefined(arg) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local arg = string.lower(arg)&lt;br /&gt;
	if arg == &amp;#039;no&amp;#039; or arg == &amp;#039;not immune&amp;#039; then&lt;br /&gt;
		return &amp;#039;Not immune&amp;#039;&lt;br /&gt;
	elseif arg == &amp;#039;yes&amp;#039; or arg == &amp;#039;immune&amp;#039; then&lt;br /&gt;
		return &amp;#039;Immune&amp;#039;&lt;br /&gt;
	elseif arg:sub(1, #&amp;#039;poison&amp;#039;) == &amp;#039;poison&amp;#039; then&lt;br /&gt;
		return &amp;#039;Poisons&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return badarg(arg_name, &amp;quot;should be &amp;#039;yes&amp;#039; or &amp;#039;no&amp;#039;.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function immunearg(arg, arg_name)&lt;br /&gt;
	if not infobox.isDefined(arg) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local arg = string.lower(arg)&lt;br /&gt;
	if arg == &amp;#039;no&amp;#039; or arg == &amp;#039;not immune&amp;#039; then&lt;br /&gt;
		return &amp;#039;Not immune&amp;#039;&lt;br /&gt;
	elseif arg == &amp;#039;yes&amp;#039; or arg == &amp;#039;immune&amp;#039; then&lt;br /&gt;
		return &amp;#039;Immune&amp;#039;&lt;br /&gt;
	elseif arg:sub(1, #&amp;#039;poison&amp;#039;) == &amp;#039;poison&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;lt;span &amp;#039;..&lt;br /&gt;
			&amp;#039;title=&amp;quot;This monster will be poisoned instead of envenomed.&amp;quot; &amp;#039;..&lt;br /&gt;
			&amp;#039;style=&amp;quot;cursor:help; border-bottom:1px dotted;&amp;quot;&amp;gt;&amp;#039;..&lt;br /&gt;
			&amp;#039;Converts to poison&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return badarg(arg_name, &amp;quot;should be &amp;#039;yes&amp;#039; or &amp;#039;no&amp;#039;.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function freezeresistancearg(arg)&lt;br /&gt;
	if not infobox.isDefined(arg) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return arg..&amp;#039;% resistance&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function image_smw(arg)&lt;br /&gt;
	local _img = string.match(arg, &amp;quot;File:.-%.png&amp;quot;)&lt;br /&gt;
	return _img&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function attackspeedarg(arg)&lt;br /&gt;
	if not infobox.isDefined(arg) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local lowarg = string.lower(arg)&lt;br /&gt;
	local numarg = tonumber(arg)&lt;br /&gt;
	&lt;br /&gt;
	if lowarg == &amp;#039;no&amp;#039; or lowarg == &amp;#039;n/a&amp;#039; then&lt;br /&gt;
		return &amp;#039;Does not attack&amp;#039;&lt;br /&gt;
	elseif lowarg == &amp;#039;varies&amp;#039; or lowarg == &amp;#039;random&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;lt;span title=&amp;quot;This monster has a variable attack speed.&amp;quot; style=&amp;quot;cursor:help; border-bottom:1px dotted;&amp;quot;&amp;gt;Variable&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if numarg ~= nil then&lt;br /&gt;
		return string.format(&amp;#039;%s %s (%.1f seconds)&amp;#039;, numarg, (numarg &amp;gt; 1) and &amp;#039;ticks&amp;#039; or &amp;#039;tick&amp;#039;, numarg * 0.6)&lt;br /&gt;
	end	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function attackspeed_smw(arg)&lt;br /&gt;
	if not infobox.isDefined(arg) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local arg = string.lower(arg)&lt;br /&gt;
	if arg == &amp;#039;no&amp;#039; then&lt;br /&gt;
		return -1&lt;br /&gt;
	end&lt;br /&gt;
	return arg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function csv_to_formatted(raw)&lt;br /&gt;
	if not infobox.isDefined(raw) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    local r = string.gsub(raw, &amp;#039;%s*,%s*&amp;#039;, &amp;#039;&amp;lt;br/&amp;gt;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function csv_to_multi(raw, striplinks)&lt;br /&gt;
    assert(type(striplinks) == &amp;#039;boolean&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    local r = raw&lt;br /&gt;
	if infobox.isDefined(raw) then&lt;br /&gt;
		if striplinks then&lt;br /&gt;
	        r = string.gsub(raw,&amp;#039;[%[%]]&amp;#039;, &amp;#039;&amp;#039;)	&lt;br /&gt;
		end&lt;br /&gt;
		r = string.gsub(r, &amp;#039;%s*,%s*&amp;#039;, &amp;#039;&amp;amp;&amp;amp;SPLITPOINT&amp;amp;&amp;amp;&amp;#039;)&lt;br /&gt;
		return r&lt;br /&gt;
    end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- red ERR span with title hover for explanation&lt;br /&gt;
function badarg(argname, argmessage)&lt;br /&gt;
	return &amp;#039;&amp;lt;span &amp;#039;..&lt;br /&gt;
			&amp;#039;title=&amp;quot;The parameter «&amp;#039;..argname..&amp;#039;» &amp;#039;..argmessage..&amp;#039;&amp;quot; &amp;#039;..&lt;br /&gt;
			&amp;#039;style=&amp;quot;color:red; font-weight:bold; cursor:help; border-bottom:1px dotted red;&amp;quot;&amp;gt;&amp;#039;..&lt;br /&gt;
			&amp;#039;ERR&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function sizeparam(arg)&lt;br /&gt;
	if not infobox.isDefined(arg) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return string.format(&amp;#039;%sx%s&amp;#039;, arg, arg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function usesskillarg(slayxp)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	if infobox.isDefined(slayxp) then&lt;br /&gt;
		table.insert(ret, &amp;quot;Slayer&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	-- If needed, insert additional skills to the ret table here.&lt;br /&gt;
	return csv_to_multi(table.concat(ret, &amp;quot;,&amp;quot;), false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function addcategories(args, catargs)&lt;br /&gt;
	local ret = { &amp;#039;Monsters&amp;#039; }&lt;br /&gt;
&lt;br /&gt;
 	-- Add the associated category if the parameter has content&lt;br /&gt;
	local defined_args = {&lt;br /&gt;
		aka = &amp;#039;Pages with AKA&amp;#039;,&lt;br /&gt;
		aspeed = &amp;#039;Pages with aspeed&amp;#039;,&lt;br /&gt;
	}&lt;br /&gt;
	for n, v in pairs(defined_args) do&lt;br /&gt;
		if catargs[n] and catargs[n].one_defined then&lt;br /&gt;
			table.insert(ret, v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
 	-- Add the associated category if the parameter doesn&amp;#039;t have content&lt;br /&gt;
 	local notdefined_args = {&lt;br /&gt;
 		image = &amp;#039;Needs image&amp;#039;,&lt;br /&gt;
 		members = &amp;#039;Needs members status&amp;#039;,&lt;br /&gt;
 		release = &amp;#039;Needs release date&amp;#039;,&lt;br /&gt;
 		examine = &amp;#039;Needs examine added&amp;#039;,&lt;br /&gt;
 		combat = &amp;#039;Needs combat level&amp;#039;,&lt;br /&gt;
 		id = &amp;#039;Needs ID&amp;#039;&lt;br /&gt;
 	}&lt;br /&gt;
	for n, v in pairs(notdefined_args) do&lt;br /&gt;
		if catargs[n] and catargs[n].all_defined == false then&lt;br /&gt;
			table.insert(ret, v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Adds Category:Needs Monster Examine if any of these are not defined&lt;br /&gt;
	local monster_examine_args = {&lt;br /&gt;
		&amp;#039;att&amp;#039;, &amp;#039;str&amp;#039;, &amp;#039;def&amp;#039;, &amp;#039;range&amp;#039;, &amp;#039;mage&amp;#039;,&lt;br /&gt;
		&amp;#039;amagic&amp;#039;, &amp;#039;arange&amp;#039;,&lt;br /&gt;
		&amp;#039;dstab&amp;#039;, &amp;#039;dslash&amp;#039;, &amp;#039;dcrush&amp;#039;, &amp;#039;dmagic&amp;#039;, &amp;#039;drange&amp;#039;,&lt;br /&gt;
		&amp;#039;attbns&amp;#039;, &amp;#039;strbns&amp;#039;, &amp;#039;rngbns&amp;#039;, &amp;#039;mbns&amp;#039;,&lt;br /&gt;
		&amp;#039;immunepoison&amp;#039;, &amp;#039;immunevenom&amp;#039;, &amp;#039;attack speed&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
	for _, arg in ipairs(monster_examine_args) do&lt;br /&gt;
		if not catargs[arg] or not catargs[arg].all_defined then&lt;br /&gt;
			table.insert(ret, &amp;#039;Needs Monster Examine&amp;#039;)&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Adds Category:Needs slayer information if slayer info is required&lt;br /&gt;
	-- but not all args are defined&lt;br /&gt;
	local slayer_args = {&lt;br /&gt;
		&amp;#039;slaylvl&amp;#039;, &amp;#039;slayxp&amp;#039;, &amp;#039;cat&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
	if catargs[&amp;#039;assignedby&amp;#039;].one_defined then&lt;br /&gt;
		table.insert(ret, &amp;#039;Slayer monsters&amp;#039;)&lt;br /&gt;
		for i, arg in ipairs(slayer_args) do&lt;br /&gt;
			if not catargs[arg] or not catargs[arg].all_defined then&lt;br /&gt;
				table.insert(ret, &amp;#039;Needs slayer information&amp;#039;)&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- combine table and format category wikicode&lt;br /&gt;
	for i, v in ipairs(ret) do&lt;br /&gt;
		if (v ~= &amp;#039;&amp;#039;) then&lt;br /&gt;
			ret[i] = string.format(&amp;#039;[[Category:%s]]&amp;#039;, v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat(ret, &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
</feed>