<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://the.satanic.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=BLZbub</id>
	<title>The Satanic Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://the.satanic.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=BLZbub"/>
	<link rel="alternate" type="text/html" href="https://the.satanic.wiki/index.php/Special:Contributions/BLZbub"/>
	<updated>2026-04-19T22:22:55Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://the.satanic.wiki/index.php?title=Module:Infobox&amp;diff=11333</id>
		<title>Module:Infobox</title>
		<link rel="alternate" type="text/html" href="https://the.satanic.wiki/index.php?title=Module:Infobox&amp;diff=11333"/>
		<updated>2021-06-19T20:02:52Z</updated>

		<summary type="html">&lt;p&gt;BLZbub: Created page with &amp;quot;local p = {} local args = {} local origArgs = {} local root local empty_row_categories = {} local category_in_empty_row_pattern = &amp;#039;%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
local args = {}&lt;br /&gt;
local origArgs = {}&lt;br /&gt;
local root&lt;br /&gt;
local empty_row_categories = {}&lt;br /&gt;
local category_in_empty_row_pattern = &#039;%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]&#039;&lt;br /&gt;
&lt;br /&gt;
local function fixChildBoxes(sval, tt)&lt;br /&gt;
	local function notempty( s ) return s and s:match( &#039;%S&#039; ) end&lt;br /&gt;
	&lt;br /&gt;
	if notempty(sval) then&lt;br /&gt;
		local marker = &#039;&amp;lt;span class=special_infobox_marker&amp;gt;&#039;&lt;br /&gt;
		local s = sval&lt;br /&gt;
		s = mw.ustring.gsub(s, &#039;(&amp;lt;%s*[Tt][Rr])&#039;, marker .. &#039;%1&#039;)&lt;br /&gt;
		s = mw.ustring.gsub(s, &#039;(&amp;lt;/[Tt][Rr]%s*&amp;gt;)&#039;, &#039;%1&#039; .. marker)&lt;br /&gt;
		if s:match(marker) then&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. &#039;%s*&#039; .. marker, &#039;&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;([\r\n]|-[^\r\n]*[\r\n])%s*&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. &#039;%s*([\r\n]|-)&#039;, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;(&amp;lt;/[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*&amp;gt;%s*)&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;(&amp;lt;%s*[Tt][Aa][Bb][Ll][Ee][^&amp;lt;&amp;gt;]*&amp;gt;%s*)&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;^(%{|[^\r\n]*[\r\n]%s*)&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;([\r\n]%{|[^\r\n]*[\r\n]%s*)&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. &#039;(%s*&amp;lt;/[Tt][Aa][Bb][Ll][Ee]%s*&amp;gt;)&#039;, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. &#039;(%s*\n|%})&#039;, &#039;%1&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if s:match(marker) then&lt;br /&gt;
			local subcells = mw.text.split(s, marker)&lt;br /&gt;
			s = &#039;&#039;&lt;br /&gt;
			for k = 1, #subcells do&lt;br /&gt;
				if k == 1 then&lt;br /&gt;
					s = s .. subcells[k] .. &#039;&amp;lt;/&#039; .. tt .. &#039;&amp;gt;&amp;lt;/tr&amp;gt;&#039;&lt;br /&gt;
				elseif k == #subcells then&lt;br /&gt;
					local rowstyle = &#039; style=&amp;quot;display:none&amp;quot;&#039;&lt;br /&gt;
					if notempty(subcells[k]) then rowstyle = &#039;&#039;	end&lt;br /&gt;
					s = s .. &#039;&amp;lt;tr&#039; .. rowstyle ..&#039;&amp;gt;&amp;lt;&#039; .. tt .. &#039; colspan=2&amp;gt;\n&#039; ..&lt;br /&gt;
						subcells[k]&lt;br /&gt;
				elseif notempty(subcells[k]) then&lt;br /&gt;
					if (k % 2) == 0 then&lt;br /&gt;
						s = s .. subcells[k]&lt;br /&gt;
					else&lt;br /&gt;
						s = s .. &#039;&amp;lt;tr&amp;gt;&amp;lt;&#039; .. tt .. &#039; colspan=2&amp;gt;\n&#039; ..&lt;br /&gt;
							subcells[k] .. &#039;&amp;lt;/&#039; .. tt .. &#039;&amp;gt;&amp;lt;/tr&amp;gt;&#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- the next two lines add a newline at the end of lists for the PHP parser&lt;br /&gt;
		-- [[Special:Diff/849054481]]&lt;br /&gt;
		-- remove when [[:phab:T191516]] is fixed or OBE&lt;br /&gt;
		s = mw.ustring.gsub(s, &#039;([\r\n][%*#;:][^\r\n]*)$&#039;, &#039;%1\n&#039;)&lt;br /&gt;
		s = mw.ustring.gsub(s, &#039;^([%*#;:][^\r\n]*)$&#039;, &#039;%1\n&#039;)&lt;br /&gt;
		s = mw.ustring.gsub(s, &#039;^([%*#;:])&#039;, &#039;\n%1&#039;)&lt;br /&gt;
		s = mw.ustring.gsub(s, &#039;^(%{%|)&#039;, &#039;\n%1&#039;)&lt;br /&gt;
		return s&lt;br /&gt;
	else&lt;br /&gt;
		return sval&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Returns the union of the values of two tables, as a sequence.&lt;br /&gt;
local function union(t1, t2)&lt;br /&gt;
&lt;br /&gt;
	local vals = {}&lt;br /&gt;
	for k, v in pairs(t1) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in pairs(t2) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(vals) do&lt;br /&gt;
		table.insert(ret, k)&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Returns a table containing the numbers of the arguments that exist&lt;br /&gt;
-- for the specified prefix. For example, if the prefix was &#039;data&#039;, and&lt;br /&gt;
-- &#039;data1&#039;, &#039;data2&#039;, and &#039;data5&#039; exist, it would return {1, 2, 5}.&lt;br /&gt;
local function getArgNums(prefix)&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = tostring(k):match(&#039;^&#039; .. prefix .. &#039;([1-9]%d*)$&#039;)&lt;br /&gt;
		if num then table.insert(nums, tonumber(num)) end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Adds a row to the infobox, with either a header cell&lt;br /&gt;
-- or a label/data cell combination.&lt;br /&gt;
local function addRow(rowArgs)&lt;br /&gt;
	&lt;br /&gt;
	if rowArgs.header and rowArgs.header ~= &#039;_BLANK_&#039; then&lt;br /&gt;
		root&lt;br /&gt;
			:tag(&#039;tr&#039;)&lt;br /&gt;
				:addClass(rowArgs.rowclass)&lt;br /&gt;
				:cssText(rowArgs.rowstyle)&lt;br /&gt;
				:tag(&#039;th&#039;)&lt;br /&gt;
					:attr(&#039;colspan&#039;, &#039;2&#039;)&lt;br /&gt;
					:addClass(&#039;infobox-header&#039;)&lt;br /&gt;
					:addClass(rowArgs.class)&lt;br /&gt;
					:addClass(args.headerclass)&lt;br /&gt;
					-- @deprecated next; target .infobox-&amp;lt;name&amp;gt; .infobox-header&lt;br /&gt;
					:cssText(args.headerstyle)&lt;br /&gt;
					:cssText(rowArgs.rowcellstyle)&lt;br /&gt;
					:wikitext(fixChildBoxes(rowArgs.header, &#039;th&#039;))&lt;br /&gt;
		if rowArgs.data then&lt;br /&gt;
			root:wikitext(&lt;br /&gt;
				&#039;[[Category:Pages which use infobox templates with ignored data cells]]&#039;&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	elseif rowArgs.data and rowArgs.data:gsub(&lt;br /&gt;
		category_in_empty_row_pattern, &#039;&#039;&lt;br /&gt;
		):match(&#039;^%S&#039;) then&lt;br /&gt;
		local row = root:tag(&#039;tr&#039;)&lt;br /&gt;
		row:addClass(rowArgs.rowclass)&lt;br /&gt;
		row:cssText(rowArgs.rowstyle)&lt;br /&gt;
		if rowArgs.label then&lt;br /&gt;
			row&lt;br /&gt;
				:tag(&#039;th&#039;)&lt;br /&gt;
					:attr(&#039;scope&#039;, &#039;row&#039;)&lt;br /&gt;
					:addClass(&#039;infobox-label&#039;)&lt;br /&gt;
					-- @deprecated next; target .infobox-&amp;lt;name&amp;gt; .infobox-label&lt;br /&gt;
					:cssText(args.labelstyle)&lt;br /&gt;
					:cssText(rowArgs.rowcellstyle)&lt;br /&gt;
					:wikitext(rowArgs.label)&lt;br /&gt;
					:done()&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local dataCell = row:tag(&#039;td&#039;)&lt;br /&gt;
		dataCell&lt;br /&gt;
			:attr(&#039;colspan&#039;, not rowArgs.label and &#039;2&#039; or nil)&lt;br /&gt;
			:addClass(not rowArgs.label and &#039;infobox-full-data&#039; or &#039;infobox-data&#039;)&lt;br /&gt;
			:addClass(rowArgs.class)&lt;br /&gt;
			-- @deprecated next; target .infobox-&amp;lt;name&amp;gt; .infobox(-full)-data&lt;br /&gt;
			:cssText(rowArgs.datastyle)&lt;br /&gt;
			:cssText(rowArgs.rowcellstyle)&lt;br /&gt;
			:wikitext(fixChildBoxes(rowArgs.data, &#039;td&#039;))&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(empty_row_categories, rowArgs.data or &#039;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTitle()&lt;br /&gt;
	if not args.title then return end&lt;br /&gt;
&lt;br /&gt;
	root&lt;br /&gt;
		:tag(&#039;caption&#039;)&lt;br /&gt;
			:addClass(&#039;infobox-title&#039;)&lt;br /&gt;
			:addClass(args.titleclass)&lt;br /&gt;
			-- @deprecated next; target .infobox-&amp;lt;name&amp;gt; .infobox-title&lt;br /&gt;
			:cssText(args.titlestyle)&lt;br /&gt;
			:wikitext(args.title)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderAboveRow()&lt;br /&gt;
	if not args.above then return end&lt;br /&gt;
&lt;br /&gt;
	root&lt;br /&gt;
		:tag(&#039;tr&#039;)&lt;br /&gt;
			:tag(&#039;th&#039;)&lt;br /&gt;
				:attr(&#039;colspan&#039;, &#039;2&#039;)&lt;br /&gt;
				:addClass(&#039;infobox-above&#039;)&lt;br /&gt;
				:addClass(args.aboveclass)&lt;br /&gt;
				-- @deprecated next; target .infobox-&amp;lt;name&amp;gt; .infobox-above&lt;br /&gt;
				:cssText(args.abovestyle)&lt;br /&gt;
				:wikitext(fixChildBoxes(args.above,&#039;th&#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow()&lt;br /&gt;
	if not args.below then return end&lt;br /&gt;
&lt;br /&gt;
	root&lt;br /&gt;
		:tag(&#039;tr&#039;)&lt;br /&gt;
			:tag(&#039;td&#039;)&lt;br /&gt;
				:attr(&#039;colspan&#039;, &#039;2&#039;)&lt;br /&gt;
				:addClass(&#039;infobox-below&#039;)&lt;br /&gt;
				:addClass(args.belowclass)&lt;br /&gt;
				-- @deprecated next; target .infobox-&amp;lt;name&amp;gt; .infobox-below&lt;br /&gt;
				:cssText(args.belowstyle)&lt;br /&gt;
				:wikitext(fixChildBoxes(args.below,&#039;td&#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addSubheaderRow(subheaderArgs)&lt;br /&gt;
	if subheaderArgs.data and&lt;br /&gt;
		subheaderArgs.data:gsub(category_in_empty_row_pattern, &#039;&#039;):match(&#039;^%S&#039;) then&lt;br /&gt;
		local row = root:tag(&#039;tr&#039;)&lt;br /&gt;
		row:addClass(subheaderArgs.rowclass)&lt;br /&gt;
&lt;br /&gt;
		local dataCell = row:tag(&#039;td&#039;)&lt;br /&gt;
		dataCell&lt;br /&gt;
			:attr(&#039;colspan&#039;, &#039;2&#039;)&lt;br /&gt;
			:addClass(&#039;infobox-subheader&#039;)&lt;br /&gt;
			:addClass(subheaderArgs.class)&lt;br /&gt;
			:cssText(subheaderArgs.datastyle)&lt;br /&gt;
			:cssText(subheaderArgs.rowcellstyle)&lt;br /&gt;
			:wikitext(fixChildBoxes(subheaderArgs.data, &#039;td&#039;))&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(empty_row_categories, subheaderArgs.data or &#039;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderSubheaders()&lt;br /&gt;
	if args.subheader then&lt;br /&gt;
		args.subheader1 = args.subheader&lt;br /&gt;
	end&lt;br /&gt;
	if args.subheaderrowclass then&lt;br /&gt;
		args.subheaderrowclass1 = args.subheaderrowclass&lt;br /&gt;
	end&lt;br /&gt;
	local subheadernums = getArgNums(&#039;subheader&#039;)&lt;br /&gt;
	for k, num in ipairs(subheadernums) do&lt;br /&gt;
		addSubheaderRow({&lt;br /&gt;
			data = args[&#039;subheader&#039; .. tostring(num)],&lt;br /&gt;
			-- @deprecated next; target .infobox-&amp;lt;name&amp;gt; .infobox-subheader&lt;br /&gt;
			datastyle = args.subheaderstyle,&lt;br /&gt;
			rowcellstyle = args[&#039;subheaderstyle&#039; .. tostring(num)],&lt;br /&gt;
			class = args.subheaderclass,&lt;br /&gt;
			rowclass = args[&#039;subheaderrowclass&#039; .. tostring(num)]&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addImageRow(imageArgs)&lt;br /&gt;
&lt;br /&gt;
	if imageArgs.data and&lt;br /&gt;
		imageArgs.data:gsub(category_in_empty_row_pattern, &#039;&#039;):match(&#039;^%S&#039;) then&lt;br /&gt;
		&lt;br /&gt;
		local row = root:tag(&#039;tr&#039;)&lt;br /&gt;
		row:addClass(imageArgs.rowclass)&lt;br /&gt;
&lt;br /&gt;
		local dataCell = row:tag(&#039;td&#039;)&lt;br /&gt;
		dataCell&lt;br /&gt;
			:attr(&#039;colspan&#039;, &#039;2&#039;)&lt;br /&gt;
			:addClass(&#039;infobox-image&#039;)&lt;br /&gt;
			:addClass(imageArgs.class)&lt;br /&gt;
			:cssText(imageArgs.datastyle)&lt;br /&gt;
			:wikitext(fixChildBoxes(imageArgs.data, &#039;td&#039;))&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(empty_row_categories, imageArgs.data or &#039;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderImages()&lt;br /&gt;
	if args.image then&lt;br /&gt;
		args.image1 = args.image&lt;br /&gt;
	end&lt;br /&gt;
	if args.caption then&lt;br /&gt;
		args.caption1 = args.caption&lt;br /&gt;
	end&lt;br /&gt;
	local imagenums = getArgNums(&#039;image&#039;)&lt;br /&gt;
	for k, num in ipairs(imagenums) do&lt;br /&gt;
		local caption = args[&#039;caption&#039; .. tostring(num)]&lt;br /&gt;
		local data = mw.html.create():wikitext(args[&#039;image&#039; .. tostring(num)])&lt;br /&gt;
		if caption then&lt;br /&gt;
			data&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					:addClass(&#039;infobox-caption&#039;)&lt;br /&gt;
					-- @deprecated next; target .infobox-&amp;lt;name&amp;gt; .infobox-caption&lt;br /&gt;
					:cssText(args.captionstyle)&lt;br /&gt;
					:wikitext(caption)&lt;br /&gt;
		end&lt;br /&gt;
		addImageRow({&lt;br /&gt;
			data = tostring(data),&lt;br /&gt;
			-- @deprecated next; target .infobox-&amp;lt;name&amp;gt; .infobox-image&lt;br /&gt;
			datastyle = args.imagestyle,&lt;br /&gt;
			class = args.imageclass,&lt;br /&gt;
			rowclass = args[&#039;imagerowclass&#039; .. tostring(num)]&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- When autoheaders are turned on, preprocesses the rows&lt;br /&gt;
local function preprocessRows()&lt;br /&gt;
	if not args.autoheaders then return end&lt;br /&gt;
	&lt;br /&gt;
	local rownums = union(getArgNums(&#039;header&#039;), getArgNums(&#039;data&#039;))&lt;br /&gt;
	table.sort(rownums)&lt;br /&gt;
	local lastheader&lt;br /&gt;
	for k, num in ipairs(rownums) do&lt;br /&gt;
		if args[&#039;header&#039; .. tostring(num)] then&lt;br /&gt;
			if lastheader then&lt;br /&gt;
				args[&#039;header&#039; .. tostring(lastheader)] = nil&lt;br /&gt;
			end&lt;br /&gt;
			lastheader = num&lt;br /&gt;
		elseif args[&#039;data&#039; .. tostring(num)] and&lt;br /&gt;
			args[&#039;data&#039; .. tostring(num)]:gsub(&lt;br /&gt;
				category_in_empty_row_pattern, &#039;&#039;&lt;br /&gt;
			):match(&#039;^%S&#039;) then&lt;br /&gt;
			local data = args[&#039;data&#039; .. tostring(num)]&lt;br /&gt;
			if data:gsub(category_in_empty_row_pattern, &#039;&#039;):match(&#039;%S&#039;) then&lt;br /&gt;
				lastheader = nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if lastheader then&lt;br /&gt;
		args[&#039;header&#039; .. tostring(lastheader)] = nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Gets the union of the header and data argument numbers,&lt;br /&gt;
-- and renders them all in order&lt;br /&gt;
local function renderRows()&lt;br /&gt;
&lt;br /&gt;
	local rownums = union(getArgNums(&#039;header&#039;), getArgNums(&#039;data&#039;))&lt;br /&gt;
	table.sort(rownums)&lt;br /&gt;
	for k, num in ipairs(rownums) do&lt;br /&gt;
		addRow({&lt;br /&gt;
			header = args[&#039;header&#039; .. tostring(num)],&lt;br /&gt;
			label = args[&#039;label&#039; .. tostring(num)],&lt;br /&gt;
			data = args[&#039;data&#039; .. tostring(num)],&lt;br /&gt;
			datastyle = args.datastyle,&lt;br /&gt;
			class = args[&#039;class&#039; .. tostring(num)],&lt;br /&gt;
			rowclass = args[&#039;rowclass&#039; .. tostring(num)],&lt;br /&gt;
			-- @deprecated next; target .infobox-&amp;lt;name&amp;gt; rowclass&lt;br /&gt;
			rowstyle = args[&#039;rowstyle&#039; .. tostring(num)],&lt;br /&gt;
			rowcellstyle = args[&#039;rowcellstyle&#039; .. tostring(num)]&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar()&lt;br /&gt;
	if not args.name then return end&lt;br /&gt;
&lt;br /&gt;
	root&lt;br /&gt;
		:tag(&#039;tr&#039;)&lt;br /&gt;
			:tag(&#039;td&#039;)&lt;br /&gt;
				:attr(&#039;colspan&#039;, &#039;2&#039;)&lt;br /&gt;
				:addClass(&#039;infobox-navbar&#039;)&lt;br /&gt;
				:wikitext(require(&#039;Module:Navbar&#039;)._navbar{&lt;br /&gt;
					args.name,&lt;br /&gt;
					mini = 1,&lt;br /&gt;
				})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderItalicTitle()&lt;br /&gt;
	local italicTitle = args[&#039;italic title&#039;] and mw.ustring.lower(args[&#039;italic title&#039;])&lt;br /&gt;
	if italicTitle == &#039;&#039; or italicTitle == &#039;force&#039; or italicTitle == &#039;yes&#039; then&lt;br /&gt;
		root:wikitext(mw.getCurrentFrame():expandTemplate({title = &#039;italic title&#039;}))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Categories in otherwise empty rows are collected in empty_row_categories.&lt;br /&gt;
-- This function adds them to the module output. It is not affected by&lt;br /&gt;
-- args.decat because this module should not prevent module-external categories&lt;br /&gt;
-- from rendering.&lt;br /&gt;
local function renderEmptyRowCategories()&lt;br /&gt;
	for _, s in ipairs(empty_row_categories) do&lt;br /&gt;
		root:wikitext(s)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Render tracking categories. args.decat == turns off tracking categories.&lt;br /&gt;
local function renderTrackingCategories()&lt;br /&gt;
	if args.decat == &#039;yes&#039; then return end&lt;br /&gt;
	if args.child == &#039;yes&#039; then&lt;br /&gt;
		if args.title then&lt;br /&gt;
			root:wikitext(&lt;br /&gt;
				&#039;[[Category:Pages which use embedded infobox templates with the title parameter]]&#039;&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	elseif #(getArgNums(&#039;data&#039;)) == 0 and mw.title.getCurrentTitle().namespace == 0 then&lt;br /&gt;
		root:wikitext(&#039;[[Category:Articles which use infobox templates with no data rows]]&#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
Loads the templatestyles for the infobox.&lt;br /&gt;
&lt;br /&gt;
TODO: load base templatestyles here rather than in MediaWiki:Common.css&lt;br /&gt;
We aren&#039;t doing it here yet because there are 4-5000 pages with &#039;raw&#039; infobox&lt;br /&gt;
tables. See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :).&lt;br /&gt;
When we do this we should clean up the inline CSS below too.&lt;br /&gt;
Will have to do some bizarre conversion category like with sidebar.&lt;br /&gt;
	&lt;br /&gt;
]=]&lt;br /&gt;
local function loadTemplateStyles()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
-- See function description&lt;br /&gt;
--	local base_templatestyles = frame:extensionTag{&lt;br /&gt;
--		name = &#039;templatestyles&#039;, args = { src = cfg.i18n.templatestyles }&lt;br /&gt;
--	}&lt;br /&gt;
	&lt;br /&gt;
	local templatestyles = &#039;&#039;&lt;br /&gt;
	if args[&#039;templatestyles&#039;] then templatestyles = frame:extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = args[&#039;templatestyles&#039;] }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local child_templatestyles = &#039;&#039;&lt;br /&gt;
	if args[&#039;child templatestyles&#039;] then child_templatestyles = frame:extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = args[&#039;child templatestyles&#039;] }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local grandchild_templatestyles = &#039;&#039;&lt;br /&gt;
	if args[&#039;grandchild templatestyles&#039;] then grandchild_templatestyles = frame:extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = args[&#039;grandchild templatestyles&#039;] }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat({&lt;br /&gt;
--		base_templatestyles, -- see function description&lt;br /&gt;
		templatestyles,&lt;br /&gt;
		child_templatestyles,&lt;br /&gt;
		grandchild_templatestyles&lt;br /&gt;
	})	&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Specify the overall layout of the infobox, with special settings if the&lt;br /&gt;
-- infobox is used as a &#039;child&#039; inside another infobox.&lt;br /&gt;
local function _infobox()&lt;br /&gt;
	if args.child ~= &#039;yes&#039; then&lt;br /&gt;
		root = mw.html.create(&#039;table&#039;)&lt;br /&gt;
&lt;br /&gt;
		root&lt;br /&gt;
			:addClass(args.subbox == &#039;yes&#039; and &#039;infobox-subbox&#039; or &#039;infobox&#039;)&lt;br /&gt;
			:addClass(args.bodyclass)&lt;br /&gt;
			-- @deprecated next; target .infobox-&amp;lt;name&amp;gt;&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
&lt;br /&gt;
		renderTitle()&lt;br /&gt;
		renderAboveRow()&lt;br /&gt;
	else&lt;br /&gt;
		root = mw.html.create()&lt;br /&gt;
&lt;br /&gt;
		root&lt;br /&gt;
			:wikitext(args.title)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	renderSubheaders()&lt;br /&gt;
	renderImages()&lt;br /&gt;
	preprocessRows()&lt;br /&gt;
	renderRows()&lt;br /&gt;
	renderBelowRow()&lt;br /&gt;
	renderNavBar()&lt;br /&gt;
	renderItalicTitle()&lt;br /&gt;
	renderEmptyRowCategories()&lt;br /&gt;
	renderTrackingCategories()&lt;br /&gt;
&lt;br /&gt;
	return loadTemplateStyles() .. tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- If the argument exists and isn&#039;t blank, add it to the argument table.&lt;br /&gt;
-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.&lt;br /&gt;
local function preprocessSingleArg(argName)&lt;br /&gt;
	if origArgs[argName] and origArgs[argName] ~= &#039;&#039; then&lt;br /&gt;
		args[argName] = origArgs[argName]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Assign the parameters with the given prefixes to the args table, in order, in&lt;br /&gt;
-- batches of the step size specified. This is to prevent references etc. from&lt;br /&gt;
-- appearing in the wrong order. The prefixTable should be an array containing&lt;br /&gt;
-- tables, each of which has two possible fields, a &amp;quot;prefix&amp;quot; string and a&lt;br /&gt;
-- &amp;quot;depend&amp;quot; table. The function always parses parameters containing the &amp;quot;prefix&amp;quot;&lt;br /&gt;
-- string, but only parses parameters in the &amp;quot;depend&amp;quot; table if the prefix&lt;br /&gt;
-- parameter is present and non-blank.&lt;br /&gt;
local function preprocessArgs(prefixTable, step)&lt;br /&gt;
	if type(prefixTable) ~= &#039;table&#039; then&lt;br /&gt;
		error(&amp;quot;Non-table value detected for the prefix table&amp;quot;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	if type(step) ~= &#039;number&#039; then&lt;br /&gt;
		error(&amp;quot;Invalid step value detected&amp;quot;, 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get arguments without a number suffix, and check for bad input.&lt;br /&gt;
	for i,v in ipairs(prefixTable) do&lt;br /&gt;
		if type(v) ~= &#039;table&#039; or type(v.prefix) ~= &amp;quot;string&amp;quot; or&lt;br /&gt;
			(v.depend and type(v.depend) ~= &#039;table&#039;) then&lt;br /&gt;
			error(&#039;Invalid input detected to preprocessArgs prefix table&#039;, 2)&lt;br /&gt;
		end&lt;br /&gt;
		preprocessSingleArg(v.prefix)&lt;br /&gt;
		-- Only parse the depend parameter if the prefix parameter is present&lt;br /&gt;
		-- and not blank.&lt;br /&gt;
		if args[v.prefix] and v.depend then&lt;br /&gt;
			for j, dependValue in ipairs(v.depend) do&lt;br /&gt;
				if type(dependValue) ~= &#039;string&#039; then&lt;br /&gt;
					error(&#039;Invalid &amp;quot;depend&amp;quot; parameter value detected in preprocessArgs&#039;)&lt;br /&gt;
				end&lt;br /&gt;
				preprocessSingleArg(dependValue)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get arguments with number suffixes.&lt;br /&gt;
	local a = 1 -- Counter variable.&lt;br /&gt;
	local moreArgumentsExist = true&lt;br /&gt;
	while moreArgumentsExist == true do&lt;br /&gt;
		moreArgumentsExist = false&lt;br /&gt;
		for i = a, a + step - 1 do&lt;br /&gt;
			for j,v in ipairs(prefixTable) do&lt;br /&gt;
				local prefixArgName = v.prefix .. tostring(i)&lt;br /&gt;
				if origArgs[prefixArgName] then&lt;br /&gt;
					-- Do another loop if any arguments are found, even blank ones.&lt;br /&gt;
					moreArgumentsExist = true&lt;br /&gt;
					preprocessSingleArg(prefixArgName)&lt;br /&gt;
				end&lt;br /&gt;
				-- Process the depend table if the prefix argument is present&lt;br /&gt;
				-- and not blank, or we are processing &amp;quot;prefix1&amp;quot; and &amp;quot;prefix&amp;quot; is&lt;br /&gt;
				-- present and not blank, and if the depend table is present.&lt;br /&gt;
				if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then&lt;br /&gt;
					for j,dependValue in ipairs(v.depend) do&lt;br /&gt;
						local dependArgName = dependValue .. tostring(i)&lt;br /&gt;
						preprocessSingleArg(dependArgName)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		a = a + step&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Parse the data parameters in the same order that the old {{infobox}} did, so&lt;br /&gt;
-- that references etc. will display in the expected places. Parameters that&lt;br /&gt;
-- depend on another parameter are only processed if that parameter is present,&lt;br /&gt;
-- to avoid phantom references appearing in article reference lists.&lt;br /&gt;
local function parseDataParameters()&lt;br /&gt;
&lt;br /&gt;
	preprocessSingleArg(&#039;autoheaders&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;child&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;bodyclass&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;subbox&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;bodystyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;title&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;titleclass&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;titlestyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;above&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;aboveclass&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;abovestyle&#039;)&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix = &#039;subheader&#039;, depend = {&#039;subheaderstyle&#039;, &#039;subheaderrowclass&#039;}}&lt;br /&gt;
	}, 10)&lt;br /&gt;
	preprocessSingleArg(&#039;subheaderstyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;subheaderclass&#039;)&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix = &#039;image&#039;, depend = {&#039;caption&#039;, &#039;imagerowclass&#039;}}&lt;br /&gt;
	}, 10)&lt;br /&gt;
	preprocessSingleArg(&#039;captionstyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;imagestyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;imageclass&#039;)&lt;br /&gt;
	preprocessArgs({&lt;br /&gt;
		{prefix = &#039;header&#039;},&lt;br /&gt;
		{prefix = &#039;data&#039;, depend = {&#039;label&#039;}},&lt;br /&gt;
		{prefix = &#039;rowclass&#039;},&lt;br /&gt;
		{prefix = &#039;rowstyle&#039;},&lt;br /&gt;
		{prefix = &#039;rowcellstyle&#039;},&lt;br /&gt;
		{prefix = &#039;class&#039;}&lt;br /&gt;
	}, 50)&lt;br /&gt;
	preprocessSingleArg(&#039;headerclass&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;headerstyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;labelstyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;datastyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;below&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;belowclass&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;belowstyle&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;name&#039;)&lt;br /&gt;
	-- different behaviour for italics if blank or absent&lt;br /&gt;
	args[&#039;italic title&#039;] = origArgs[&#039;italic title&#039;]&lt;br /&gt;
	preprocessSingleArg(&#039;decat&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;templatestyles&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;child templatestyles&#039;)&lt;br /&gt;
	preprocessSingleArg(&#039;grandchild templatestyles&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- If called via #invoke, use the args passed into the invoking template.&lt;br /&gt;
-- Otherwise, for testing purposes, assume args are being passed directly in.&lt;br /&gt;
function p.infobox(frame)&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		origArgs = frame:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		origArgs = frame&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	parseDataParameters()&lt;br /&gt;
	&lt;br /&gt;
	return _infobox()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- For calling via #invoke within a template&lt;br /&gt;
function p.infoboxTemplate(frame)&lt;br /&gt;
	origArgs = {}&lt;br /&gt;
	for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end&lt;br /&gt;
	&lt;br /&gt;
	parseDataParameters()&lt;br /&gt;
	&lt;br /&gt;
	return _infobox()&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>BLZbub</name></author>
	</entry>
	<entry>
		<id>https://the.satanic.wiki/index.php?title=Template:Infobox&amp;diff=11332</id>
		<title>Template:Infobox</title>
		<link rel="alternate" type="text/html" href="https://the.satanic.wiki/index.php?title=Template:Infobox&amp;diff=11332"/>
		<updated>2021-06-19T20:01:17Z</updated>

		<summary type="html">&lt;p&gt;BLZbub: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Infobox|infobox}}&amp;lt;includeonly&amp;gt;{{template other|{{#ifeq:{{PAGENAME}}|Infobox||{{#ifeq:{{str left|{{SUBPAGENAME}}|7}}|Infobox|[[Category:Infobox templates|{{remove first word|{{SUBPAGENAME}}}}]]}}}}|}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go in the /doc subpage, and interwikis go in Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>BLZbub</name></author>
	</entry>
	<entry>
		<id>https://the.satanic.wiki/index.php?title=Cevin_Soling&amp;diff=11331</id>
		<title>Cevin Soling</title>
		<link rel="alternate" type="text/html" href="https://the.satanic.wiki/index.php?title=Cevin_Soling&amp;diff=11331"/>
		<updated>2021-06-19T19:40:23Z</updated>

		<summary type="html">&lt;p&gt;BLZbub: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
&lt;br /&gt;
  | title1={{PAGENAME}}&lt;br /&gt;
&lt;br /&gt;
  | image1=[[File:CevinSolingMalcolmJarry.jpg]]&lt;br /&gt;
&lt;br /&gt;
  | caption1=Cevin Soling, left, and &amp;quot;Malcolm Jarry&amp;quot;, right&lt;br /&gt;
&lt;br /&gt;
  | born=August 5, 1966&lt;br /&gt;
&lt;br /&gt;
  | other_names=Malcolm Jarry, Calvin Soling&lt;br /&gt;
&lt;br /&gt;
  | occupation=owner of [[United Federation of Churches, LLC]], other corporations&lt;br /&gt;
&lt;br /&gt;
  | satanic_affiliation=[[The Satanic Temple]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cevin D. Soling&#039;&#039;&#039; is a Massachusetts-based business owner whose [https://en.wikipedia.org/wiki/Cevin_Soling Wikipedia article] describes him &amp;quot;an American writer, filmmaker, philosopher, musician, music producer, and artist&amp;quot;. In a &#039;&#039;Village Voice article&#039;&#039; in 2014, [[Shane Bugbee]] identified Soling as using the pseudonym &amp;quot;Malcolm Jarry&amp;quot; in his public capacity with The Satanic Temple.&amp;lt;ref&amp;gt;&#039;&#039;Bugbee says the Temple project’s mastermind, “Malcolm Jarry,” is really Cevin Soling, a documentary filmmaker who runs a company called Spectacle Films. In 2009 Soling made a well-regarded documentary about the American school system, called The War on Kids. He’s also president of the Harvard Extension Cultural Studies Club, the group that sponsored the infamous black mass.&#039;&#039;, https://www.villagevoice.com/2014/07/22/trolling-hell-is-the-satanic-temple-a-prank-the-start-of-a-new-religious-movement-or-both/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Real Estate==&lt;br /&gt;
[Under construction]&lt;br /&gt;
&lt;br /&gt;
==Music, Film, Publishing, and Entertainment Corporations==&lt;br /&gt;
[Under construction]&lt;br /&gt;
&lt;br /&gt;
==Opposition to Public Schools==&lt;br /&gt;
[Under construction]&lt;br /&gt;
&lt;br /&gt;
==Position on State of Israel==&lt;br /&gt;
[Under construction]&lt;br /&gt;
&lt;br /&gt;
==TST Corporations==&lt;br /&gt;
Soling is the listed manager of [[United Federation of Churches, LLC]]&amp;lt;ref&amp;gt;[https://corp.sec.state.ma.us/CorpWeb/CorpSearch/CorpSummary.aspx?sysvalue=9kp5dqzTSt0jbYQEV9kdTrdyMdQESXrgfmSeiovjbt8- United Federation of Churches, LLC], MA SOS corp #001127600&amp;lt;/ref&amp;gt;, which also does business as &amp;quot;[[The Satanic Temple]]&amp;quot;.&amp;lt;ref&amp;gt;https://thesatanictemple.com/pages/legal-notices&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://trademarks.justia.com/862/21/the-satanic-86221887.html&amp;lt;/ref&amp;gt; The LLC owns the trademark &amp;quot;[[Lucien Greaves]],&amp;quot; the public name used by the corporation&#039;s registered agent and other signatory, [[Douglas Misicko]]. &amp;lt;ref&amp;gt;https://trademarks.justia.com/885/74/lucien-88574615.html&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.azcentral.com/story/news/local/scottsdale/2020/01/23/scottsdale-v-satanic-tempe-trial-concludes-u-s-district-court/4559239002/&amp;lt;/ref&amp;gt; However, according to an archived version of TST&#039;s website, as late as May 2013, posts with the display name &amp;quot;Lucien&amp;quot; were still coming from the author username &amp;quot;cevin&amp;quot;.&amp;lt;ref&amp;gt;[https://web.archive.org/web/20130508170933/http://www.thesatanictemple.com/author/cevin/ WebArchive url] ending &amp;quot;author/cevin&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of 2021, a &amp;quot;Malcolm Jarry&amp;quot; is still listed as the legal registered agent of [[Cinephobia LLC]]&amp;lt;ref&amp;gt;[https://corp.sec.state.ma.us/CorpWeb/CorpSearch/CorpSummary.aspx?sysvalue=odE7BLR3yGAuwjTnark03cVSrZHvVwc_43KIcreGXks- Cinephobia LLC], MA SOS corp #001343142&amp;lt;/ref&amp;gt;, which owns and operates TST&#039;s streaming service &amp;quot;The Satanic Temple TV&amp;quot;, along with Soling and Misicko. &amp;lt;ref&amp;gt;&#039;&#039;The Satanic Temple TV is a media-services platform owned and operated by Cinephobia LLC. Launched in 2019, Cinephobia provides a wide range of video content relevant to The Satanic Temple including but not limited to: live-stream video of rituals, ceremonies, protests and other gatherings; original new media series written and created exclusively for The Satanic Temple TV; video footage of lectures and interviews; and documentary-style features about our campaigns, protests, and other activities.&#039;&#039;, https://thesatanictemple.tv/about/&amp;lt;/ref&amp;gt; Soling is president and treasurer of [[Reason Alliance, Ltd]]&amp;lt;ref&amp;gt;[https://corp.sec.state.ma.us/CorpWeb/CorpSearch/CorpSummary.aspx?sysvalue=O3bLHSBoh_kBM.n9BE5ISQ4DukMdbSn7BDEx2lffyFo- Reason Alliance, Ltd], MA SOS corp #471933964&amp;lt;/ref&amp;gt;, with Misicko serving as director, vice president, and clerk. Soling is the sole owner and fills all officer roles of [[Alliance for Integrity and Justice Ltd]]&amp;lt;ref&amp;gt;[https://corp.sec.state.ma.us/CorpWeb/CorpSearch/CorpSummary.aspx?sysvalue=0ZVXR3QjVnUeh422HMvBIByebl_mSCbTekP2AIxY0QA- Alliance for Integrity and Justice Ltd], MA SOS corp #001325870&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Additionally, Soling is the sole owner of [[64 Bridge LLC]]&amp;lt;ref&amp;gt;[https://corp.sec.state.ma.us/CorpWeb/CorpSearch/CorpSummary.aspx?sysvalue=odE7BLR3yGAuwjTnark03cVSrZHvVwc_43KIcreGXks- 64 Bridge LLC], MA SOS corp #001178574&amp;lt;/ref&amp;gt;, through which he owns 64 Bridge St, Salem, MA 01970, &amp;quot;the international headquarters for The Satanic Temple&amp;quot; and &amp;quot;Salem Art Gallery&amp;quot;.&amp;lt;ref&amp;gt;[http://salem.patriotproperties.com/default.asp Salem, MA, parcel] #36-0153-0&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.salemartgallery.com/&amp;lt;/ref&amp;gt; It is also the registered address of many of Soling&#039;s Massachusetts-based corporations.&lt;br /&gt;
&lt;br /&gt;
Outside of Massachusetts, Soling is listed as the owner of [[Spectacle Films Inc]]&amp;lt;ref&amp;gt;[https://appext20.dos.ny.gov/corp_public/corpsearch.entity_search_entry Spectacle Films Inc] New York State Department of State #1644379&amp;lt;/ref&amp;gt;, [[Xemu Records Inc]]&amp;lt;ref&amp;gt;[https://appext20.dos.ny.gov/corp_public/corpsearch.entity_search_entry Xemu Records Inc], NY DOS #1644388&amp;lt;/ref&amp;gt;, and according to third party registers, many others (see below).&amp;lt;ref&amp;gt;[https://opencorporates.com/officers?q=CEVIN+SOLING Open Corporates Listings], &amp;quot;Cevin Soling&amp;quot;&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://opencorporates.com/officers?q=CEVIN+D.+SOLING Open Corporates Listings], &amp;quot;Cevin D Soling&amp;quot;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other Corporations == &lt;br /&gt;
{| Class=&amp;quot;Article-table Sortable Mw-collapsible&amp;quot;&lt;br /&gt;
|+Associated Corporations Listing (Incomplete)&lt;br /&gt;
!ID#&lt;br /&gt;
!Legal Name&lt;br /&gt;
!Company Type&lt;br /&gt;
!Registered Agent&lt;br /&gt;
!State&lt;br /&gt;
!Physical Address&lt;br /&gt;
!Established&lt;br /&gt;
!Dissolution&lt;br /&gt;
|-&lt;br /&gt;
|001343142&lt;br /&gt;
|[[Cinephobia LLC]]&lt;br /&gt;
|Domestic LLC&lt;br /&gt;
|Malcolm Jarry (Registered Agent), Cevin Soling (Manager), Doug Misicko (Manager)&lt;br /&gt;
|MA&lt;br /&gt;
|64 Bridge Street, Salem, MA, 01970&lt;br /&gt;
|8/26/2018&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|001325870&lt;br /&gt;
|[[Alliance For Integrity And Justice Ltd.]]&lt;br /&gt;
|Nonprofit Corporation&lt;br /&gt;
|Cevin Soling&lt;br /&gt;
|MA&lt;br /&gt;
|47 High Street Suite #444, Medford, MA, 02155&lt;br /&gt;
|3/3/2018&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|001299281&lt;br /&gt;
|[[The Satanic Temple Inc]]&lt;br /&gt;
|Nonprofit Corporation&lt;br /&gt;
|Douglas Misicko (registered agent),&amp;lt;ref&amp;gt;[https://corp.sec.state.ma.us/CorpWeb/CorpSearch/CorpSummary.aspx?sysvalue=_YbpplnTcVY4HJ4Mm3CDvw5DWa26_Obxh0Q1KZP4W2Q- MA Secretary of State], 2017-2021&amp;lt;/ref&amp;gt;, Lucien Greaves (principal officer), Malcolm Jarry (co-principal officer)&amp;lt;ref&amp;gt;[https://www.guidestar.org/profile/82-3404757 GuideStar.org], ruling year 2019 lists &amp;quot;Lucien Greaves&amp;quot; as principal officer with &amp;quot;Malcolm Jarry&amp;quot; as co-principal officer, but it&#039;s not obvious what documents that is references as the Form 990s are not available&amp;lt;/ref&amp;gt;&lt;br /&gt;
|MA&lt;br /&gt;
|64 Bridge Street, Salem, 01970 MA&lt;br /&gt;
|11/14/2017&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|001230217&lt;br /&gt;
|[[The Alliance For Self-directed Education, Inc.]]&lt;br /&gt;
|Nonprofit Corporation&lt;br /&gt;
|Peter Gray (Resident Agent, President), Cevin Soling (Director)&lt;br /&gt;
|MA&lt;br /&gt;
|9 King Philip Trail, Norfolk, MA, 02056&lt;br /&gt;
|7/2/2016&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|001178574&lt;br /&gt;
|[[Sixty Four Bridge LLC]]&lt;br /&gt;
|Domestic LLC&lt;br /&gt;
|Cevin Soling&lt;br /&gt;
|MA&lt;br /&gt;
|64 Bridge Street, Salem, 01970 MA&lt;br /&gt;
|6/23/2015&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|720461&lt;br /&gt;
|[[350 Village Street LLC]]&lt;br /&gt;
|Domestic LLC&lt;br /&gt;
|Cevin Soling&lt;br /&gt;
|NH&lt;br /&gt;
|112 4th Street, Medford, MA, 02155, USA&lt;br /&gt;
|1/26/2015&lt;br /&gt;
|1/6/2019&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|471933964&lt;br /&gt;
|[[Reason Alliance, Ltd.]]&lt;br /&gt;
|Nonprofit Corporation&lt;br /&gt;
|Malcolm Jarry&lt;br /&gt;
|MA&lt;br /&gt;
|64 Bridge Street, Salem, 01970 MA&lt;br /&gt;
|9/6/2014&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|001127600&lt;br /&gt;
|[[United Federation Of Churches, LLC]]&lt;br /&gt;
|Domestic LLC&lt;br /&gt;
|Douglas Misicko (registered agent), Cevin Soling (manager)&lt;br /&gt;
|MA&lt;br /&gt;
|64 Bridge Street, Salem, 01970 MA&lt;br /&gt;
|2/4/2014&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|3775372&lt;br /&gt;
|[[MK-ULTRA, LLC]]&lt;br /&gt;
|Domestic LLC&lt;br /&gt;
|Cevin Soling&lt;br /&gt;
|NY&lt;br /&gt;
|2 East Broadway Suite 901, New York, New York, 10038&lt;br /&gt;
|2/17/2009&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|3250795&lt;br /&gt;
|[[World Watch Productions Inc.]]&lt;br /&gt;
|Domestic Not-for-Profit Corporation&lt;br /&gt;
|Cevin Soling&lt;br /&gt;
|NY&lt;br /&gt;
|609 Kappock Street #1A, Bronx, New York, 10463&lt;br /&gt;
|8/31/2005&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2755378&lt;br /&gt;
|A2X Records, LLC&lt;br /&gt;
|Domestic LLC&lt;br /&gt;
|None&amp;lt;ref&amp;gt;[https://pilato.com/a2x-records/ Pilato.com], A2X Records LLC is a full service record production company and record label integrating the artist and their ability to create from concept to completion a product through modern technology. When Pigs Fly www.pigsflycd.com was produced, packaged and distributed under A2X Records LLC, a record production company and their affiliates Aorta Entertainment and Xemu Records.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://www.crowdcast.io/e/hangout-with-manager-and/register Crowdcast.io],&#039;&#039; In 2002, Aorta merged with the New York City based independent label, Xemu Records, to form a joint venture called A2X Records, LLC, distributed nationally by Redeye Distribution. The first A2X release is a compilation album called WHEN PIGS FLY- THE SONGS YOU NEVER THOUGHT YOU’D HEAR, which was co-produced by Cevin Soling and Bruce Pilato. It features new recordings of classic covers done by artists such as Ani DiFranco &amp;amp; Jackie Chan, Devo, The Fixx, The Oak Ridge Boys, Billy Preston, and others.&lt;br /&gt;
&lt;br /&gt;
Pilato is also an archivist and writer for the acclaimed www.wolfgangvault.com website, which features the vast musical archives of the late concert promoter Bill Graham and the historic Fillmore East &amp;amp; West. In 2011, he became Director of Marketing and a Co-producer of  the multi-media stage production, THIS IS THE 60s, in conjunction with South Carolina’s Lyric Media Inc. Outside of the entertainment industry, he is an equity partner in the automotive website, [[CarZoom.com LLC]].&amp;lt;/ref&amp;gt;&lt;br /&gt;
|NY&lt;br /&gt;
|31 East Main Street, Suite 200, ROCHESTER, NEW YORK, 14614&lt;br /&gt;
|04/16/2002&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2268917&lt;br /&gt;
|[[Monolithic Industries, LLC]]&lt;br /&gt;
|Domestic LLC&lt;br /&gt;
|Cevin D Soling&lt;br /&gt;
|NY&lt;br /&gt;
|609 Kappock Street #1a, Bronx, New York, 10463&lt;br /&gt;
|6/12/1998&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|LLC4571-1997&lt;br /&gt;
|[[Mad World, LLC]]&lt;br /&gt;
|Domestic LLC&lt;br /&gt;
|Cevin Soling (Managing Member)&lt;br /&gt;
Samuel Buckingham (Registered Agent) &lt;br /&gt;
|NV&lt;br /&gt;
|8005 Cetus Circle, No 201, Las Vegas, NV, 89128&lt;br /&gt;
|11/17/1997&lt;br /&gt;
|11/30/1998&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|000568580&lt;br /&gt;
|Olmstead Leasing Corporation&lt;br /&gt;
|Foreign Corporation&lt;br /&gt;
|Chester Soling (Registered Agent), Cevin Soling (President)&lt;br /&gt;
|MA&lt;br /&gt;
|600 3rd Ave, New York, NY 10016&lt;br /&gt;
|3/10/1997&lt;br /&gt;
|3/31/2008&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1967068&lt;br /&gt;
|Carleton Holdings, Inc.&lt;br /&gt;
|Foreign Business Corporation&lt;br /&gt;
|Cevin Soling, Chief Executive Officer&lt;br /&gt;
|NY&lt;br /&gt;
|19 West 21st St #503, New York, New York, 10010&lt;br /&gt;
|10/23/1995&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2547256&lt;br /&gt;
|Carleton Holdings, Inc.&lt;br /&gt;
|Domestic Business Corporation&lt;br /&gt;
|Corporation Service Company&lt;br /&gt;
|DE&lt;br /&gt;
|251 Little Falls Drive, Wilmington, New Castle, DE, 19808&lt;br /&gt;
|9/28/1995&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1644388&lt;br /&gt;
|[[Xemu Records, Inc.]]&lt;br /&gt;
|Domestic Business Corporation&lt;br /&gt;
|Cevin D Soling&lt;br /&gt;
|NY&lt;br /&gt;
|2 East Broadway, Suite 901, New York, New York 10038&lt;br /&gt;
|6/16/1992&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1644379&lt;br /&gt;
|[[Spectacle Films, Inc]]&lt;br /&gt;
|Domestic Business Corporation&lt;br /&gt;
|Cevin D. Soling&lt;br /&gt;
|NY&lt;br /&gt;
|10 Fiske Place Suite 319, Mount Vernon, 10550 New York&lt;br /&gt;
|6/16/1992&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1619263&lt;br /&gt;
|[[Carleton 130, L.P.]]&lt;br /&gt;
|Foreign Limited Partnership&lt;br /&gt;
|Cevin D. Soling&lt;br /&gt;
|NY&lt;br /&gt;
|609 Kappock Street # 1A, Bronx, New York, 10463&lt;br /&gt;
|3/9/1992&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2289637&lt;br /&gt;
|Carleton 130, L.P.&lt;br /&gt;
|Domestic Limited Partnership&lt;br /&gt;
|The Corporation Trust Company&lt;br /&gt;
|DE&lt;br /&gt;
|Corporation Trust Center 1209 Orange St, Wilmington, New Castle, De, 19801&lt;br /&gt;
|3/2/1992&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1610835&lt;br /&gt;
|Carleton Kappock, L.P.&lt;br /&gt;
|Foreign Limited Partnership&lt;br /&gt;
|Cevin D. Soling&lt;br /&gt;
|NY&lt;br /&gt;
|609 Kappock Street #1A, Bronx, New York, 10463&lt;br /&gt;
|2/6/1992&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1610833&lt;br /&gt;
|[[Agsard Industries, Inc.]]&lt;br /&gt;
|Domestic Business Corporation&lt;br /&gt;
|Robert E. Hill (Registered Agent), Cevin Soling (Chief Executive Officer)&lt;br /&gt;
|NY&lt;br /&gt;
|Cevin Soling, 279 W 231st St, Bronx, New York, 10463&lt;br /&gt;
|2/6/1992&lt;br /&gt;
|*Not Confirmed In NYDOS Files&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2287220&lt;br /&gt;
|Carleton Kappock, L.P.&lt;br /&gt;
|Domestic Limited Partnership&lt;br /&gt;
|The Corporation Trust Company&lt;br /&gt;
|DE&lt;br /&gt;
|Corporation Trust Center 1209 Orange St, Wilmington, New Castle, DE, 19801&lt;br /&gt;
|2/5/1992&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1453193&lt;br /&gt;
|SYK Corporation&lt;br /&gt;
|Foreign Business Corporation&lt;br /&gt;
|Cevin D Soling&lt;br /&gt;
|NY&lt;br /&gt;
|16 North Broadway, Apt 1P, White Plains, New York, 1060&lt;br /&gt;
|6/5/1990&lt;br /&gt;
|6/27/2001&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|1554102&lt;br /&gt;
|SYK Corporation&lt;br /&gt;
|Foreign Business Corporation&lt;br /&gt;
|Cevin Soling (President)&lt;br /&gt;
Adam Kristol (Treasurer)&lt;br /&gt;
|PA&lt;br /&gt;
|800 N 2nd St Harrisburg PA 17102&lt;br /&gt;
|2/28/1990&lt;br /&gt;
| -&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|2198418&lt;br /&gt;
|[[SYK Corporation]]&lt;br /&gt;
|Domestic General Corporation&lt;br /&gt;
|Inactive Agent Account&lt;br /&gt;
|DE&lt;br /&gt;
| -&lt;br /&gt;
|6/6/1989&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|1097219&lt;br /&gt;
|The Soling Family Foundation&lt;br /&gt;
|Foreign Not-For-Profit Corporation&lt;br /&gt;
|none&lt;br /&gt;
|DE&lt;br /&gt;
|None&lt;br /&gt;
|12/05/1986&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|2064805&lt;br /&gt;
|[[The Soling Family Foundation]]&lt;br /&gt;
|Domestic Exempt Corporation&lt;br /&gt;
|United States Corporation Company&lt;br /&gt;
|DE&lt;br /&gt;
|None&amp;lt;ref&amp;gt;[https://www.guidestar.org/profile/13-3288798 GuideStar.org], EIN 13-3288798, Form 990-PF for years [https://pdf.guidestar.org/PDF_Images/2009/133/288/2009-133288798-078dd52f-F.pdf 2009], [https://pdf.guidestar.org/PDF_Images/2010/133/288/2010-133288798-07928aa2-F.pdf 2010], and [https://pdf.guidestar.org/PDF_Images/2011/133/288/2011-133288798-07e7bc29-F.pdf 2011] completed by Cevin Soling, including final year 2011 which reported complete $804,734 &amp;quot;theft loss&amp;quot; of all foundation assets&amp;lt;/ref&amp;gt;&lt;br /&gt;
|6/21/1986&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>BLZbub</name></author>
	</entry>
	<entry>
		<id>https://the.satanic.wiki/index.php?title=Template:Infobox&amp;diff=11329</id>
		<title>Template:Infobox</title>
		<link rel="alternate" type="text/html" href="https://the.satanic.wiki/index.php?title=Template:Infobox&amp;diff=11329"/>
		<updated>2021-06-19T19:10:54Z</updated>

		<summary type="html">&lt;p&gt;BLZbub: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{{#invoke:CIB|main}}&amp;lt;/includeonly&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:CIB|main}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>BLZbub</name></author>
	</entry>
	<entry>
		<id>https://the.satanic.wiki/index.php?title=Module:CIB&amp;diff=11328</id>
		<title>Module:CIB</title>
		<link rel="alternate" type="text/html" href="https://the.satanic.wiki/index.php?title=Module:CIB&amp;diff=11328"/>
		<updated>2021-06-19T19:09:08Z</updated>

		<summary type="html">&lt;p&gt;BLZbub: Created page with &amp;quot;local capiunto = require &amp;#039;capiunto&amp;#039;  local p = {}  function p.main(frame) 	local args = frame:getParent().args 	local headerStyle 	if args.headerstyle and args.headerstyle ~=...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local capiunto = require &#039;capiunto&#039;&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local headerStyle&lt;br /&gt;
	if args.headerstyle and args.headerstyle ~= &#039;&#039; then&lt;br /&gt;
		headerStyle = string.format(&#039;background-color:%s;&#039;, args.headerstyle)&lt;br /&gt;
	else&lt;br /&gt;
		headerStyle = &#039;background-color:grey;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local retval = capiunto.create( {&lt;br /&gt;
		title = args.title,&lt;br /&gt;
		headerStyle = headerStyle, &lt;br /&gt;
	} )&lt;br /&gt;
	:addImage( args.image, args.caption )&lt;br /&gt;
	:addRow( &#039;Foo&#039;, args.foo )&lt;br /&gt;
	:addHeader( &#039;A header between the data rows&#039; )&lt;br /&gt;
	:addRow( &#039;Bar&#039;, args.bar )&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>BLZbub</name></author>
	</entry>
</feed>