﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Travis Miller</title>
	<atom:link href="http://www.electrumdigital.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.electrumdigital.com</link>
	<description>Web Developer for Hire</description>
	<lastBuildDate>Thu, 22 Jul 2010 14:17:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Casting arrays as objects (and vice-versa) in PHP</title>
		<link>http://www.electrumdigital.com/2010/07/casting-arrays-as-objects-and-vice-versa-in-php/</link>
		<comments>http://www.electrumdigital.com/2010/07/casting-arrays-as-objects-and-vice-versa-in-php/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 14:17:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.electrumdigital.com/?p=370</guid>
		<description><![CDATA[I just learned that it's possible to cast an associative array as an object in PHP.
It works the other way, too—an object can be cast as an array.
This is especially useful when working with the results of database queries. A lot of codebases seem unsure whether to treat database rows as arrays, or as objects. [...]]]></description>
			<content:encoded><![CDATA[<p>I just learned that it's possible to <a href="http://us.php.net/manual/en/language.types.object.php#language.types.object.casting">cast an associative array as an object</a> in PHP.</p>
<p>It works the other way, too—an object can be <a href="http://us.php.net/manual/en/language.types.array.php#language.types.array.casting">cast as an array</a>.</p>
<p>This is especially useful when working with the results of database queries. A lot of codebases seem unsure whether to treat database rows as arrays, or as objects. In these environments, it's likely that you'll get one type as the return value from a particular method, but need to pass the other type as an argument to a second method.</p>
<p>So it's nice to have a simple and language-native way to convert between the two. Some simple demo code:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// create an array</span>
<span style="color: #000088;">$array</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
	<span style="color: #0000ff;">'prop1'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'value1'</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'prop2'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'value2'</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// cast it to an object</span>
<span style="color: #000088;">$object</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>object<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$array</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'The value of the property prop1 is: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$object</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">prop1</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'The value of the property prop2 is: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$object</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">prop2</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// cast it back to an array</span>
<span style="color: #000088;">$array2</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$object</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'The value for the key prop1 is: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$array2</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'prop1'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'The value for the key prop2 is: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$array2</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'prop2'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.electrumdigital.com/2010/07/casting-arrays-as-objects-and-vice-versa-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Peter Michaux</title>
		<link>http://www.electrumdigital.com/2010/07/peter-michaux/</link>
		<comments>http://www.electrumdigital.com/2010/07/peter-michaux/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 23:31:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AJAX & JavaScript]]></category>
		<category><![CDATA[design patterns]]></category>

		<guid isPermaLink="false">http://www.electrumdigital.com/?p=366</guid>
		<description><![CDATA[Douglas Crockford's articles on JavaScript (and his posts at the Yahoo! User Interface Blog) have helped me greatly to understand the more exotic and subtle features of the language, along with the patterns that exploit those features.
Now I've discovered a similar collection of articles by Peter Michaux. They often riff on Crockford's ideas, sometimes offering [...]]]></description>
			<content:encoded><![CDATA[<p>Douglas Crockford's <a href="http://javascript.crockford.com/">articles on JavaScript</a> (and his posts at <a href="http://www.yuiblog.com/blog/">the Yahoo! User Interface Blog</a>) have helped me greatly to understand the more exotic and subtle features of the language, along with the patterns that exploit those features.</p>
<p>Now I've discovered <a href="http://peter.michaux.ca/">a similar collection of articles by Peter Michaux</a>. They often riff on Crockford's ideas, sometimes offering a fresh perspective and sometimes explaining things in a more accessible way. Well worth a read for aspiring JavaScript ninjas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.electrumdigital.com/2010/07/peter-michaux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fun with hot dogs!</title>
		<link>http://www.electrumdigital.com/2010/03/fun-with-hot-dogs/</link>
		<comments>http://www.electrumdigital.com/2010/03/fun-with-hot-dogs/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 20:42:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[XHTML & CSS]]></category>
		<category><![CDATA[bleeding edge]]></category>
		<category><![CDATA[client-side technologies]]></category>
		<category><![CDATA[data: URIs]]></category>
		<category><![CDATA[hot dogs]]></category>
		<category><![CDATA[page load optimization]]></category>

		<guid isPermaLink="false">http://www.electrumdigital.com/?p=336</guid>
		<description><![CDATA[Check this out:

If you're using any modern browser (that rules out IE6 and IE7), you should
see a picture of a hot dog above.
But no such image file exists on my server&#8212;or on any other server. You're looking at a PNG image, but there's no PNG file anywhere.
How is that possible?
Right-click on the hot dog and [...]]]></description>
			<content:encoded><![CDATA[<p>Check this out:</p>
<p><img src="data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%88%00%00%00%40%08%02%00%00%00Nc%A8%DC%00%00%00%19tEXtSoftware%00Adobe%20ImageReadyq%C9e%3C%00%001%2BIDATx%DA%EC%7Di%AF%25%D7u%5D%9D%A1%C6%3B%BF%B9%E7%26%9B%14e%8A%A2%24%CA%B2%2C%0B%1E%05'A%128v%80%20%01%F2)%DF%F2%93%F29%082%20%08%02%07%01%0C%0FQ%24%DB%8AlYV%2C%8A%F3%D4d%8Fo%BE%EFN5%9D%AASYk%D7%A3%A6H%B0(%C9%B6l%EB%A9Iv%BF%BE%EF%DE%AA%3D%AC%BD%D6%DE%FB%94T%D7u%C1O%BF~L_0%A5%FA1%BD%95%FD%A95%BF%87m%DB%D67e%E7%5C%80%B0uU%E7%7D%9Bo%DA%C6%A9%A0%D3%260%D1%B8%D3*PZ%9B%A8S%F8%8F%EET%60%C2DY%83%3F%04%C6%F4%EF%D1u%1E%FF%C1%97%F8J%FD%D41%1F%C8%09%5D%D0%D4%5D%D3%04%DE%FBj%05%EB7%EB%8B%B6%D8%B8%E5%85%2BV%AD%2B%E8%98%B6%EE%94n%E1%24%98%B8%F3V%07*%D9%F5%BE%09%BA%06F%D7a%8C%B7Q%C6*%13j%1B%F9%B6%F6%AA3F%2B%9B%FA%96%BE%D1%A1%8D%C6%B3%E1%B5%A7%CDp%02O%FE%E0%D7%A6%FE%BE%40%19%9C%D06%BE%CE%7D%5D%C2%F4%CDf%D1%5E%1CU%AB%85%5B%9FtM%AD%03%DF%05%CE%B7%9Dw9%CC%8C_%DAX%98%B5k%9D2%AA%F3%8DIg%9E%5E%F2AU%B6a%02%13%2Be%E09%D5i%A6%87%89%DA%B6%C5%7Ft%14%87%26p%C5%3A%3F%3F5If%B3%B1%89%92(%0CU%E0%EDp%3A%B8%F2%E1%F4%E0%89p0%FA%7B%E4%98o%03%F7%CE%17%B9%9B%1F6%CB%23%18%AAu%81%AF%D6n%B3i%F3ES%5D%B4%95%0B%DA%12Y%10t%CE%D7%95%17%20R%B0%AD6%DA%1A%84%BA16%D0%A1IF%C8%00%15%8D%E0%13%E7J%DF%D4%CA%24%D5%EA%C4-%96M%D3%BA%F5%06%1F%12%D8D%C1W*t%9B%A5RVE%C67%0D%DC%A0%2C%BE%B3Pa%D2%95%1B%3B%1A%0D%AE%DE%C6%7B%03%10%7D%B5%0C%1A%97n%DF%DA%7F%FEW%D2%2B%B7%FE%1E8%86e%C0%B9%D5y%B3%99%D7g%87%CD%EA%AC%BE8q%9B%13e%10%EF%9D%2B%9Do%E0%06%AF4%5E%8A%7F%C3%F8%81%8A%ACIRT%0E8C%C7Cc%E3%C0%0E%B4E%A1%18%893j%D4%8F%FC%ECa%B9%9A%03%9D%AA%F3%F3V%05n%9D%FB%AA%F4-%FC%15%C2WM%8Bw%09%EB%CD%DA%24%83%B6.%9A%D2%99%24%B2p%ADG%5D%C1%E7z%1D%C7%00%3E%13%DBp8%EA%DAR%5B%8D%EF%E8(R%9DK%C7%3B%D7%7F%E1%9F'%DBW%FE%EE9%A6%03%F8%B4%9B%85%9B%9F%D4%A7%F7%8B%F9i%BD%5E7%F9%99R%0D%FC%D0%B1n%B44%BA%09%B4R%DEw%BEmU%9C%20%13%F8%CDP%9Bx%10%26%83%C0f%3A%CA%60%BBx8%D3(%E6%BE%AB%8A%8BruQ-N%AA%F5%AA9%3Bi%8Dm%1B%D5%94U%A0-%FE%DDV%B5%8ES%3B%18%19%1B%B6%AE%A9r%80%98j%AA%AA%F1%B4%5E%B9%3E%B3Q6%98%ED%23F%F0)Q%9AtU%0D%D7%D9d%80%D7%E3JT%96%99%D1%B0mW%81%C2%85%E9l%B4u%FB%97%FF%95%19%8E%D5%DF%16%C7%FC%FFt%13%85%01%BF%9A%7C%85Th%16%F3%06%88%B4%3Am6%17M%B9%F4-%2Bp%E3%1D%89%8F%E7KQ%C3%03%83%D4h%94%8D%95V%06Aj%B3%C0Z%ADZ%13F%80%23%1D%CD%60h%94j%BC%10%25%BFZ%3FV%3A%05%DD%CA%CFN%EB%CD%DCm%F2%40%EB%B6h%DA%BA%C6%1B%B9%AA%C5G%20Gl%94%988%CB%CF%0F5%F0%8D%19G%DE%D5%81%84%D9%B0X.%AA%CD%19R64i%9Cdp%82%B5%24g%9Dk%82%D6%07%3ASall%032%60%92X%0Dc%B5%3B%0E%12%5C%8F%BF%F6%D1_%DEz%E6%E3%3F%D9%19%83%0BPtG%D78%A0%04K%02H%D1r%DE%00%D3%91%16%9B9%8B%01*v%BDB%ED%F5%AE%C6k%11t%E0%3F4%13%F0%23%85%B1%22M%B4%07%BEG%C0%25%04*%EC%08g%E0%05%C8%0C%A5%0D%5D%EB%8A%A6ruQ%B8j%C3H%2F%8B%16iW%BBr%B1%A9Q%81J%17%18%8Blr%20%02%26B%F47H%BF%CA%81'%DB(%02i%40%DEEi%8C%1F%2CW9%3E%03%D9%D8%94%A5a92Q%A8%60%C4%96%5E%04s%03o%B6UQ%23H%CC%C0n%3Fi%5C%D1%1D%BF%B2%C47m%18%E1%7F%F1d%7B%F4%D1g%5DR%D9t%F4%D4%AF%FC%8B0%1D%FC%E4%D1e%A0%0C%A8L%91%17G%EF%D6%F3%23%D8%A8%5E%9E%A2D%83%EA%A0*%B4%AD%D3%ED%1AQ%19%B45%CA%03%C2%9Fu%C2%AA0%22%3D%0Dt%17%85%13e-%9Cda%980%D5%D10%1A%EE*%AA%0C%AD%ED%B0k%AA%16%89P%D7%D5%C9Q%B1%3C%07%D6%D5%F9%06%09%D1%BAJG)%B0M%A3T%D4%C8%94%CAw%AA%ED%92%CEF%88%D1%86T7%F5%C0%A3%BCjk%E4%1FjT%D1%16%88%EF%26%D4%91_o%22U%EF%5EMF%07%B0%BE%EB%9C.%17%C1%C5%BDj%7D%0C%9F%B8%D0%22%BBH%CCP%87%EC%D4%5Ey~%3A%BB%5D%A7%C3C%04M%ED%92%93%D7j%D3%10%027%F8Z%AFw%3E%FE%7Cc%EB%CD%D9%C9%F4%FA%E0o(c%BE%99%0D%88%F6%12*a%09%0ES%9D%1D%96%17%F0%C1%B2)k%24%04h%93%0E%9A%CE%13%3D%A0*P%84%B5jT%14%23p%E1!%96M%40C%9C!%2C%81M%FC%A3N4%CA5%5C%00!%E8%3D%00%05%7F%D1%EA%2CJ%86M%5D%97%05%EA%CD%B2%98%9FT%F3%B3j%5D6U%8D%2CD%FCud%B4%9E%BE%84%09%CB%B6%EDPD%92N%C1%2F%81o%F0%AF%A0%CEs%DD6%60%C1p%83j%1B~%AAkt%87%0B%88%90%06%AD%F3%E3%9B%E9%95OT%F1%F0%C8w%2B%D0ha%D5%91%AF%B2%8B%FB%C3%D37%C2%D5%BD%B2.s%A4Ov%DB%DC%F9%A5a%9C%1E%220F%3B%9F%DB%9C%7F%F9%E8M%FB%DA%EF%02%CBZ%D6%3F%60%5D%18M%F7o%5E%F9%C5%17%EC%D4%DC%FC%F4o%DAl%F0%D7%911%9D%F0U%EA5%E7%DA%CD%BA%3C%3B%AC6%B9%5B%1C%D5%ABs%FC%82%80%F0%0E%BA%ACD0%92%BF%40%05%04%AD%89%AC%1A%0E%8C%02%3E%03%82v%94B%CD%40%9CEt%A8%B2%DA%D2%0D%26%1EK%19%81%80%40%3D%81%E6%AB%C0%9D%EAb%D9%B4%08%F3%BC.%F2%AA%F2%AE(%AB%F5%DA%15E%B3%5EA%D8%89%B0%08%E9%B3%0EQ%DC%06%0Ee%B95%8D%D7%0D%85b%07%CAk%EAP4%23%2BS%D3%26%AA%B3p%1E2%AD%AC%19H(C%0D%F0%CCS%60%9Av%EF%E3%E9%B5%17.%7C%FB%C0U%B16Sd%95%D6%19%F0%AB%E9.%C6%B7%CEgOL%96%0FF%87%2F%0F%BA(%B8%F5%E9%D6%DA%BB%8D%1Bf%D3OmV%87%8B%D3%B9%D3%7B%3A%D3%F5%A6A%C4A%12u%3E%5C%9E%1DM%EF%9F%C6%BAY%DE%7Bq%EB%C3%9F%F9%2BtL%5B%16%F5r%99%9F%1Do%1E%BE%5D%2FQ%15%5Cyq%D2%949%E4%82%06C%85P%40%12%04%00%FD%08%60%13f%B1M%13%84a%07%DC%09Q%17R%93%8E!%9Eu2%B3a%82%1A%EE%1B%FC%947%14%D5%88%E0%D0%03%B9%95%C57%8B%8B%23%94%97%B6%DA%C01%AE%04%3A-%DB%B2)%CF%CE%3D%AD%AB!%BA%11%A4a%3A%AB%3C%E3%22%CA%A6(N%CD%A60M%17%A3%7C%90U%B7%B8%98x%00(%AB%03%13%13M%91a%ABM%07~%DC%05U%01%94K%A2%B1%8A%B6%91%9F%080Pc%ED%B5%8F%87%C1%F4V%90%CC%EE%E2C%8D%DDF%D1%22%17%83%CB%82%1C%F5L%EB%3D%854%2F%E7%C9%EE%C9%93%BF%16%E1%3A%03%8F%BB%1E%CE%AE%FF%86s%D5%F2%DD%FFUm%3A%20dmKrC%D0t%80C%E3*%15%14%CBb%60o%96%F3%C7%1D%82%8C%F8%FCC%3B%E6%3B%09%13%40%A6%C97%D5%E2%7C%F1%DE%9B%D5%C5Y9%07SZ%BA%7C%1D%D4U%00%26%13%C1%DC%81%85K(%7B%F1o%A4%C2%00%F5%120%14(%D0%F9%24%1B%EF%E2%B6%3B%B0W%80%12*%06%AA%07%7Cf%E16p*%5B.%CEP%AD%89%F5%20%02%C5%DA%81%92UH%8B%0A!o%D3A%BD%5C%20%0E%5CY7y%11%40%11%26%03%0A%F5(%0C%12%E5%96%85%B6%FE%DA%CFd%D3%BD2I%EB%B6%CA%9B%22%05%F3%3A%7BuS.K%7C%20%8A%C6j%BD%C9%17%2B%FC%1E%A5%0B%F6m%D9%19%0Btb%A7O%26%07%CFw%A3%FDV%87%AB%20%D8%08%08%E3%1F%87%BA%0ER%E2%EB%14%5EQj%B0D%F6%17%9B%A6%08%DA%96%CA%D4%266L%87%B8l%A5R%F6%CCp%8Fj%94%0C%9F%2C%F3%FB%CB%A3%AF%3B%04P%938%87%FA%E2M%9C%B4%1D%CCS%D3%E6FUU%15F%3B6%C9%80%AE%3FZ%C60%E9%7D5%3F_%3Dzw%F9%E8A~z%5E-%CE%DCz%E1%11%12ue%23%1B%C6%9E%94%7D%0C%F0%B1%D1%205%A6%05%20%85C%08%B7%01%FE%0B%2C%02x%EBp%60%A2%2C0%09.%C8%B3%DB%01%0A%1B%03%FAa!%D0%AD%B6%2C%91%E9%D5%E2%B4%B88%A9%96%17%F5%FA%02%0E%40%11%16%D0C%AA%A4%0D%AAT%E3%02%F0.c%F1%FAh8%06%F7%AD%CB%D2%E7%8B%A0j%11%8D%B7%3F%91%EC%DC%9C%07%FAA%E0V%5D%EDA%CC%A2%91%DE%99f%A3%EB%B3%E3o%0C%1E%7F%3D%F75%8A%0B%81%0DI%01%04k%1Bk%B3n%EF%A3%D9%FEsU%3A%3B%EF%DA%A2%EB%A2.%80%F8%D8G%EC%E1%CA%11F%90%84Hc%DD%F9%D5%E2%DD%B2x%E8%CA2_%84%AB%F3%14%E2%D2%1A%3F%18%15%E9%E8%22%CC%820%84V%0D%A3d%BB%F5%DD%FA%E2%DD%B6y%AB%5C%CF%5D%1D6mzq%DA%AC%D7%DD4%86%87%F1%3F%80%20%0C%D6%9E%DD%BB%3B%7Dk%3B%3E%F8T%F0%7D%1Ah%7F%B9c%40%26%DA%7Cs%F6%E6%1B%F3%BBo%E4'%0F%19%CEU%09%25%80%F2%00v%AAS%E8%E5%10%9C5%04%89%0Fc%9Bea%14%D9d%CC4'A%0A%03%93%01Y%2C2%06%C6%0D%91.%13%8A%00%0F%F4%D0%0D%B2%60%7DZ%AF%96%F0%01%A0%0F5%C3m%AA%26_%03%D8AeA%CD%A8%CC%83P'%09%09%0A*%7B%5E%E3-%B3%E1%88%12%C1%18%0B%D9w~%AA%CA%26%89%C3t%2B%DE%7D%AE%1C%1C%BC%E8%CAScw%C2%EC%E3%C6%0C%10%F3%BE%B9p%C5C%15%BEw%ED%E7'%E3%DB%E3%C3%97%95%BB%80%FD%B6%153u3%BA%1ALo%9F%C4%93%FB%C8Z%85J%60A%1F*%7C%0C%14%23%F03LF%D1%60%D7%C6%3BAu%B8%B9x%A3%5C%9F%BA%06%97l%CE%8E%D2%D7%DF4%8BM%10%87%C1%DEV%BA3kG%936%19%D4aZT%D1%23%8A*h%CF%06%B7%60%CA%22%CA%CB%F4%FE%3Bk%E5%23PDP%0E%C5%D6%5BgL%8DX%CC%CF%17BL%3E%20%2B%83u6%A7%E7%E7o%BDv%F4%F2%D7%8B%B3%A3j9G%3D%0E%15%5E%0C%1C%0F%A3%81%B5I%18%8DF%D10U%A0I(!af%40%60%20%B0%10%60%A8%D8%D1%08%C2%AE%23%01%0D5%FB%7D%B9%09%13%97%9FW%AB%15%10%AF%5C%9E%81%E7%2C%1F%DE%AFVKWCBB%40%B3%0A%80%C6%82U%86q%12S%9C%1B%E5%DB%10%C2%10%15%DB%B5n%BD%C6%ED%86%F04%C8i%09%BA%85%1A%D0%85C%3F%D8%EF%A6O%FBd%07%F1~%84HOg%9F%B4%F1Uh%94js%D4%B8%0DxD%14O%82v%DET%C7%81Z%B6%CD%1C%90oL%EC%3D*%5Ce%01%B3%E1%96%B1%D7u%BC_%ACO%97'%DF%00%9Fue%C0V2%22%DB4Q%A65%5B%90%01C%BDAI%D2%9B%C5%F0K_6%C7%E7%D9(M%D6%EBE%D3U%DB3%7D%E3%C0nM%BB4k%C2%A4%09C%A2%A0k%C2%C6%25%9B%22z%EB%0D%B7%9E%FB%89A%5Ex%D8F%93K%02%E7%93%F1%EC%20%1Df%3F%F7o%FF%CD%F6%CF%BC%F0%012fstv%FF%CF%BEt%FC%FA7%AA%E5%B9%85%D1%9Bz%98%A1%1C%A8h%9C%C4%19%9C1%B41%F0%24%0D%92%AD%88%FD%1F%E8%02%05*%AA%C9h%A3%96%22%11%25%B7%AA%9B%A2%A9%3Db%1F%FF%2C%1F%DD%03%7C%AC%8F%1E%BA%0Dhe%89l%00q%EA%82%905%DFxh%F2%A0%B1%10%98%00%87Q%94%404teea%1AX%A3%BA%F0%AEB%00%02!%C1%E8.%16'*%D2%E9%BE%DEz%DAOo4%E9vebd%18%E2n%AA%93%17%D2%ADO%07z%BC%3C%FC%C2f%FEz%95%AF%20B%95%22%B2F%83%ED%E1%D6G%C2%D0%AA%EA%24%1C%0FZ%B7%822%0A%93k%10%A5*%08%AB%FC%D1%FA%C1%97%8B%D5q%B9%D2e%9E%15%EB%B0%2CA%A2%83(r%E9%B0%82%AD5.%05%F9%5D%22%EA%D3%B7%DF1%A7%C7j%7F%DC%05%CD%85E%CE%EBd~%D6%5E%5C%D4%DB%3B%EA%FAA%04oA%D4%22%1A%40%17O%E7%ED%FD%FBy%95%ABI%0C%D2%D7%B2G%04K(%D5%B2%1F%60%96%EB%E5%EE%B3%1F%1A%DF%B8%FD%FDfk%DF%ED%98%F2bu%EF%AB_%7D%FC%E2%9F%94%A7%8FmP%0FF6N%0D%C3%3FV%CA%A2%D6%A1%06%92%D9%EAx%60%D2%A9%B1%13%85%8FkJ%C5%FED%B4%3E%7DP%ACVZ9H%F7%BA%AC%AA%D5%85%8DF%B0%EA%E2%F8%04Y%85%A4%10%9Dh%7D%87t%8B%C3app'%9Cn%CD%E38%87%8E(%97%E1%F2%AE%5E%BEg%BA%0B%D0%A4%0BT~x%0F%A5%07%B4%15z%9B%5E%EC%BAt%96%1D%FC%9C%D9y%AA%CCv7T%11%5D%A6%A2%2B6%BA%A2%EDV%A0%87Uq4%7F%F0G%E5%FAq%5D%CD%5D%E9%ABUXW%90%08%3EJ%5D%9C%3FDBDQ%82%8BL%A7O!KH%E8%CB%BC.%0F%EB%F5Q%B99r%85%AB%F2t3%1F%1C%1E%DB%87G%DD%F9%B2%01L%5D%3D%08%B7%C7a%9246j%C0%A5%5B%9F%3C~%DC%BE%F2%8AC%16%A9%AA%40%C5EY%89L%9B%84%E1%A6%D4G%8F%DC%D9Y%3D%1A%E8(f%E6%AF%D6%10%0B%3AVA%16%83wk%C4%15%3B%7C%C0G%40%8EQ5%23%A2%DB~%FA%23%E1p%AB%FB%3EcO%FB%ED%D8u%FF%CF%BE%FA%CE%1F%FFA9%7F%14Gj%BAe%C0%9E(%E9%12%D4%0Ci%01%B27U%B0M%07%CE%17%9C%BB%FC%D4%0C%9E%40%25%AF%F3U%B1%5C%20L%DCr1%7Fp7%99%5D_%3E%3C%8C%B2a%BE%A8%93A%11gY%5B%E3r%83%F1tV-%D6%BE('%07%E9%EC%D6rz%7D%19F%9CD)%5E%C3%3A%DE)%C7%BB%83%8B%FD%C1%E1%8B~y%BFDbQ%C6%C0%93%E4q6%BB%A2v%9F1%5BwV%C9%08A0%D2%D1s(%D1%1D%A1%1C%DC%F0%A8%CE_%AE%8B%F3%A6%5E%B7u%03%2B%B4%CEV%EB%F8%F88%3C9%D5%C6%F8%C98%9AN%DB4s6%5E%85q%B79%3BV%9A%25%8At%06%3F%EF%B4s%B6)%C7%EBE%F2%DA%1B%C1%9B%EF%D6%C01%0B%EA%D24%F3%85%BF%BA%AFgc%1B%85%B6i%D4%C9Y%F5%DE%7B.%03%8B%CF%02%0D%D6%11Z%0E%D1%20%81%95%CF%90%F9J%E7%95%3F%D9%B0%8E%00%07%81%CBY%D4%A51%87%0A%AE%09h3~%22%5E%CC%C6%AA%EF%F2l%B0%BF%F7%EC%B3B%AAXM%80%CE(%C0Jz%E0%DFQc%40%24%BF%F6_%FF%CB%F17%BE%94%0D%0Cg%0D!%042j%3B%0A%07Q%9D%97%06%D0G%C9pk%98%A3%DE%14M%0EN%15%DB%DDgT%18%D5%9B%1C%95%03%08%A6%BA%B8%98%1Fe%C3%CDx%2BH%C7%A3%F5%91%5B%BF%977%8B%86%C1R%E4%06DaW%ED%3E%A7FW%0E%B5-%A3%C1GL%FC%24%D0%06%01A%A6%60%A3%F2%E2k%AEx%15*rs%3C%3EyE%17%E7%E0%C2*%DD%AD%B7%9Fi%B3%D99.%C0F7m%F6t~%FEv%B19%AE6%E7%A4%AD%15%60%12%F4%047%AB%DA%16B%D2B.%D4.9%3B%F5%2F%BD%A5%EAv%08%ABE%B6%DA%1AW%07%3Bv%3C%EE%E2%10%E1%DFJW%B1%93%A6%10%8A_%D44%F1%F9E%F7%D2%AB%D5%D9Y7%89U%0Ci%85%EA%D8%A9%D2u%9B%D2%95%60q%C0%20V45%CE%EC(%81%16%20%BB%C7%8F%07%D4%C9%20%FD%01%B0%D8Q%8Dj%D6J%80%95g%83%5B%03%A4%C1%5D%3A%0DR%0E_%90%14%00W%B4%1EO%06%93%E9%E0%C3%9F%F9%CC3%BF%F8%C9r%B9L'%3B%9B%C3wV%E7%87%B3%DB%9F%DC%FF%E4%AF%A9%F7I%9A%F2%8C%D9%E0%B5%DF%FF%FC%DB_%F8%9F%93%ABS%DB%95%5D%9D%DB0%EAj%FC%A6%88G%99%0E%3D%EA%BC%89b%A9%24%BE)%7D%10%0E%EB%BC%5C%3C84q%1Af%C3%A0%F6%9B%A3Sh%C5%FDg%CD%F4%EAa6%D8%80w%E2%F2%B4%1D%B7U%B69%CB6%C7%0D%04%E2pw%13%CF%D6%26t%D6%5E%8D%86%1Fi%5Cwq%F4%17%E5%EA1%A2%0243%9B%5E%1Fn%3F%07%82P%AF%5E%F2%D5%7B%BE%2B%5D%D5%E2%AF%8C%AD%C1%8F%A2%EC%F9(%BD%95%AF%1E%AF%CF_%D9%9C%1F%96k%E3%AA%A8.%C3%B2Pu%1D%3A%0E%5C%60%3C%24%90%87%DA9%3Dk%CF%E7%C1h%B0%B5%3D%CA%10vy%DD%3E%3Ef%96%0CG~61%5B%13%F6%19%20%1E%10%CC%88%E5%D5%AA%B9%FF%B8y%F0%C8%E9Fm%8D%A3%18aM%DCD%25%00_%D6E%D5%3A%D4%B9%96S%E4%08%A5%CFj2%01d%25%82%B4%EFr%C8%7F%40%B3%88%BB%D0)%CC%25b%0F%BE%8F%DC%E1hY%E9%D1(%99M%D2A%A6'%B3%D1%EC%60k4%B4%D90%C6%F5x%15U%05X%0D%02%C5%82%9B%87%D9%F6%FE%F3%BF%BA%FD%D1%9F%FFV%C6%1C%BE%FA%EA%2B%BF%FD%9F%5C%B1%8A%C7%91%0Ep%89%15%99v%0D%ECr%D9t%18%0F%23H%E8j%83%9A%AD%AB%0D%F4%A3%E3%C2%01q%80%FD*%A4%B0%AF%BB%E1~%B8%FF%7C%99N%EF%E3gpA%20mQ%9CU%C5)h%04%C3%1EqB%85%8A%D7N%92%C9'%1Dx%F1%C9K%F9%C5)%E8q%B1%8E9O%CA%9A8%DB%24%A3dr%E5%D3%E9%F8%B6%05%D9%AAO%DB%EA1%F8%8B%B2%C30%DEo%5D9%7F%F8%87%9B%F9%3B%A0%B2%EB%F9%F8b%1E%9D%5D%A8%F9B%AD6AQ%B4%8C2%807%DB%3C%16%E556!%90%3D%D3.b%11n%806e%AB6%A5%2FjP9X%C0%C7q%60-%03%B8%AE%FDj%83%7CP%83H%B3%1Da!%8A%09%F7(%D5%FD%BAE%0D%B7%04%7Cc%98%9C%ED%FC%EEr%C9%82%FE%E8%98%1Dpo%C0%1F%81%8F9%04%82G%F0b%94%E18%0E%B3%2C%BDvm%B2%B5%3D%DC%D9%CDF%D3A%D0%14%06*%D8%800H1%F0%9CM4%B5*s%A0%9C%ACv%A4%A3%C1%FE%9D%9B%BF%F6%5B%F1x%C6%1A%03G%BF%F5%85%DF3Q%95%8ES%3B%18%18Dz%9B%B7%D2FB%40%D5%A06%E7my%0Ei%06%96%19%8D%C2%01%3Ey3%3FG%40EI%5C%C3*a%B3%FD%B4%B9%FA%02%E0%BB5%F1G%CA%D5%89s%F7%20%80%D3%F1%8D%F1%F8c%BEY%E2%97%D2%A9%C6E%A57%5D%BDZ%9F%BF%B4%3Cy%23_7%9By%F6%E0%5Ex%7C%CA%AA%3E%9BEW%F6%C3%D9vYn%FEw%92%24%D1%F8%CAp%F63ar%03%D4%09r%E0%E2%F0%2B%9B%F9%9B(c%F5%3A%5D%2F%D2%BB%EF%DA%87%C7f%BD%0EF%C3%D9l%B4%9D%04%AC%EA%B0W%BEY%82%C7%9B%AE%B5%81%EF%5C%19%07%06%B7%E6%11%8FA%10%B3-%D2%24%A9r%40%FCV%17%05%F8%A2%80%8EVCp%E7%14%F5B%2C%DEu%A0%EET%FC%88fOt%60W%82i%60%D90mZ%11%834%A2T%EB%96%FDq8%84~j%93%2C%89%E38%CD%92%ADi%B6%B53%D8%DEJ%86%83(%1B%E8%0E%3F%C1%9F%C2%8B%E9%3C%FC%D3%D1%83%C8%AF%00%D9%ED%CA%C6%D5%9A%9D'8%B8Z%A9%F0pu%EF%DD%F89%3AF-%1E%BE%F7%E2%7F%FF%F7%3AA%AE%94%90%CA%B1%AE%BAr%A3c%8B%B8%CF%1F%17%D51o%02%B5%A5%AD%2B%C4%9E5%1D%89H%D3%95%AB%0D%12p%EB%89%E8%F6%2F%14%C9%E8%22%1E%DE%89'%BF%90%9F%DF%3D%BD%F7G%9D%AF%0C%14F%92d%5B%CF%24%83%1B%26%DEfG3%3F%AA%D6%F7%8A%E5%C3z%3D%DF%2C%D3%F3%A3%F4%E5%D7%5B%95%3C%7D%EB%CEG%90%14o%BD%F4%A7%AB%F5%FD'n%A8%5B7%FD%60%5C%84(%D4%A6%0DqET%F8%08z%94F%D4%F3%E4%E2%22y%F1Uuzj%AElMS%03%AD%B7%06%C2%24%E0L%8DcG%DA%D5d%B5bA%F6%3A%C1%858H%A1%BD%01%2F%88%7D%E9%7Dq%D5%08a%8E%3F%C2R%AC%13%FC%11%FE%86%EB%15%C4C%C4%BC%7C%1F%1A%87e%1CP%EF%F9%26%9E%C6%14%E8%0A%FA2%80%A2%82%EFl%EF%CD%AE%DD%BEv%E3%F6%5E%D4%AD'%DB6%1BO%94%2F%BB%BE%97QW%A8A%EC%F2i%8BW%E3%1B%C0%97%AE%03%D1p(%8D(%3Cx'%A4%2Cdt%0B%05%005%1EE%F1t6%BA%F1%E1g%FE%D9%BF%C6%7DY%14%ED%D1%B5%2B%E0%1D%D5%A2%ACWeI%FA%DF%D6'%ED%FA%E1iP5%B8%A4%3A%CF%BB%B6Bn%EF%7F8%BA%F6Q%15%C6%AE%5C%81%8Ed%C9%B0M%B6%CFp%3F%D9%F83*%DC%3B%BB%FF%87%CB%C3W%F3%A5m%1BHL%17C%06%17_3%FAEd%3A%01%B7%A9%3B%C7%E8%A8%D6%E9%E1%E3%E4%E5W%DBkw%3E%FB%E9%CF%FD%D3fu%B6%3E%7C%D0%1D%EC%3E8V%F7%1E-%17%EB%D5%ED%EB%C3%F1%B8%89%E22%8CZX%CC%83%A7%3A%05%E2%BBX%84_%7F%A9%5C%AF%B3'%AF%ED%B8%8BCh%E8%98X%046%DEv%B89%A3dq%A2%25%BC%90%DC%90%FB8%16%5D%C4g%07%F2%12%F0%AD(d%05%97P%94%C4%FA%9A%06a%87%A6%07C-%10%05%A3%E3m8%BD%A4%3B%BC%D4%12xZ%B1%E1%8Cw%E0%1C'%8A%C3%D1dv%E7%A3O%BC%F0%F3ON%C6%B1%81B(2%DD%95AW5%8E%3D%26z%93%CDd%A7%A0a%0A%F6%16%1B%E0O%10rb%87%2Bv%F0%B1%E6%0B%5B%B6_%EB%AE%C1%D5%C5%A0%06%25%24%F8%89%DB%E4%D1p%60%E3%C1D%051%90%A5Y%2C%E0%89%D5%85%03%CF%A9NWA%1D%D4U%EE%8A%9C%D8%1A%98%EB%3Fk%9F%F8%F4Y%C7%7D%AA6%9D%86%D2-0Q%FAd%3A%FD%94%AB%16g%F7%FE%603%7F%BC%9E%0F%1F%3F%8C%D7%B9%DF%DD2%93-%17'%40%7F%07%2B%C14l%E4%D5QS'%F3s%FB%DA%9B~%EF%E0%F9%A7%9Fx%F2%CD%DF%FB%8FGw_G%00%22%BDfI%9A%9A%C9%DB%0F%D7%F3%8B%E6%C65%BB%BB3Kc%5E%AE%10%CA%F0%F1%89%7F%E5%F5%AA%DCt%5B%A8%5Cg%0F%2C%0A%5B%17%F4%B7%1F%D0%00%40%08%BE2%D0%B2s%C41%7FoQ%A9%CFZ%3B%A2%3FyX'%3B%60%A2%1C%3A%2BZ%8F%AE%C2%C7x%D8%AD%93B%25%15%E4%FD%DA%CD%B6%23%FE%91%94!%82%05j%3C%1B%3F%FB%A1%2B%CF%BE%F0%C4%EE%C1V%8A%A2%D4.%853%D7%8AU7%E4%3E%8Dfi%E3%A4%87%CD%EE%C0%F27%DC%03%00%95%25%B4%12%FF%D8%7C%C0%7F%A9%B2%03%D3v%0EY%D5iS%3B%AF%8A%DATU%B5%5E%D11%09%81z%FF%F4%8Dw%AA%25%5Da%C1W%D6%DCS%BBX%9E%20s%0C%D7%AB%94%1Av%B3%3B%10%2Bk%E8%E8(%9D%85%83%E78%D9%0DT4x%FA%E2%F1%FF%5D%1F%FFy%B9%01u%C8%DE%7D'%7C%ED%1D%DCI%F8%F8%C8%3Fq%0Bh%0B%939%F2%3ENG%A2%3C7g%E7%ED%FD%87ng%7C%2Bs%8B%97%3F%FF%DF%D8%E2%E02%8B%AF%2F%16mw%0E%157K%EC%3A7%AF%BF%DA%3C%1C%FB%BD%5D%1B%86%F8%C1n%B1p%0F%1FU%C6%07%B3%814%EB%01%D4%B4%248*1%88%F3EN!9%98%A6%7C%E3%CC%23%E8%2Bv%3F%2F%00i%E5%E0%81%0B%60%B0I%80%17k%CD%BE(%92%D8%B7%7D%0F%99%92%B0%87%AC%96%DC%85%8B.N%40%D0%40%26%24v%3A%1Bo%ED%8D'%B3%C1%EE%CE%60k%D4%EE%DF%DC%D1%60%AD%C1%26%A8A%95%91%5D%9A%0B%7F%0C~%CEdioH%A1%C6C%95%B3y%B4Z%02%97%AA%3C%07%82%A1%BCy%5E%00Y6%7C%D4%093%F3%5C%9Ab%9ABT%99%A6s5%12%A3f%F1%C7u%0Fw%F7%1E%FC%D9%CAUx%5B%B0eS%AF%F3%F9%E9i%ED%EAP%2Ba%C8%90%80z%B3%F0%CEr%D7%B0%CE%E7%9B%F9%9F%E0%CD%3DGO_D%F5%A9rU%E4%A3G%0F%BB%FB%C7%93%CF%7C%EE7%EB%93%F7N%0F%1F%BF%F9%E6%BD%24%CB'%E3%146)%2B%7F%3Ao%D7%E7%10%F0%01%CAs%D1%DC%EB%2C%1B%E50%82%92m%1Fv%DE%15%F7%17a%BC%B1%F1%89R%C5%AA%7Dg%E1%05%AB%C9%D2%07%A1N-%A9%A0%97y%80%2C%9E%B2%89OY%EC%DA%3Em%98%5D%10%86%E0%5D%CA%D2%3D%9Co%12%B1hvG%18%A3%0BXE%BC%A0%2B7%8D8%C8%84%19%D9of%DF%D9%86f0%1E%1D%EC!Y%F1%F6%C1%FE%B5%BD%83%FD%C1%D6L%0F%A0%A0%C0%94U%83%94A%AD%15%E9%84%14%89H%18%14%3F%BB%ADV%BC%8DV%D1%26%F8%24%17%B4%15%AE%C2V%E7s%00%9F7%05%CA%01%90%AC%91O%E7%AF%96%95L%FA%99%92%F3%A8%FC%10%EF%3A!E%81%C0%AD%CAK%E5%1Ff%A3(%8Ck%9F%3B%1F%FAM%B9%5E%AD%E0%B6%167%EA%09%19%802x%FD%FE%DB%EA%E0jj%82J%E9%96%FB%89%08A%40p%0B%3E%9A%3A%97%9E%9E%05o%DE%AD%0Fv%B6%83%8B%7Bnq%A4%ABy%A6%A2%D3%C7%E5%E3%7B%85%D0J%CD%B9%09%D4J%DC%85%BA%8BL%C4BM%F0%E1%E4%0A%1E%E9%CB*%BF%D3%F1jc%C3%82%1C%13%89%20%D6%10N%B2%15L%15%DCJ%FAsMO%96%C4%88-%9E3%5B%BC%D2%B2B%A0Vsp%C9%BD%8EN%06%97r%F3%2C%FE%AC%E4%5C4%EBX%96%20M8%9BD8%F84MF%D3%14tng%7B%FC%E4S(%E3%DBI%EC%11Lq(iF%94%C3G9%E0%95%C7%0F%D1%7C%C8b%24-%22%03%F1%84%90wA%07e%17%E1%16%DA%CD%9A%8C%02%A4%23%2F%CAUY%E7%C7lYB%AB%826%D5%1D%07%0EB%B2%9Dk%24A%2Ck%2F%92%17%17%CD%09%09B%94Q%85%A81Qr%E9%18%A0%7C%0D%13s%CE%0BX!%A3%EB%F3%18%3A%05%02%AB%81Mt%F8%C6%CBMYf%BB%7BC%10%1C%E9%CD%F4%B33SV%E6%E4%B4~%EF%3D%1F%06%83%CD%F1%DD%D7%1F%BD)0J5%3F%B4%5D%CC%AC%C5G%A9%10r%1A%88%D21'%82%A6f%B2w%B2%0B%10PE%D2n%90%EE%8C%1E%E2%BC%ECa%F7%E5B%A8P%ED%83%C4Pz%13%FE%B9%96%C29%26%AB%3C%97R%5B%CE%85%89%20%AC%15%1D%DF%8D%FF%E2%1CTR)%20TB%BE%F7%D6%80%C9g%5B%5B%BB%D3%C1p%92l%EF%8C%F0%D2%9B%D7!5%B28%D1%E9%20fc%AE%5E%C3%A9%14%F1q%DC%A9(h%0B%08w%9A%8F%1E%22Ec%F6%81h%E1%E3%1Bn%EAx%AE%D7%C2%3D9%FB%0Eu%85%D8rE%CB%FEm%C9%15%9C%AA%83%264V%EB%B2%26%E7h%D9l%A5%B7%F9%E3%8A%8B%3DA%FF%1B%EEE%18%7C%0A%2F7L%B3%E9%F4%D21%26II%AB%C1m%1A%C0%0BXC%0D%FC%C6'%CB%88Js_%04Fr%E1%2B%2F%15%83%11n%00%BC%CE%08%88we%D9%2C%E6%E5f%D9fa%90%25%B2l%40B%24%5D.%1A%0D%B5%0D(H87M%C39-%B2%5E%B2%83%10%20%0E%A0Tf%CF%037%AE%DB%3E%B9%60%05%A4N%884%89%9C%ECe%E3%D3%5BvlM%10Gl%BDx%89%3De%1C%F8h%D7%B30%A9%1EL%2F%82%12%3F%02%1Fnm%98%EAd%90%E1%AF%D3Q%3C%99%8E%AF%5C%DD%19M%D2%AD%DDA%16k*%7F%25%AD%5E%B9%14%A9t%25%DB%2C.%E7%3E%86!%B5%60%B0%DB%0C%C2P%EA%0E%97%C5Z%0Ex%F0!%AEeG%CA0%D6%B9f%0B%83%FB%B6b63%3Cj%06%01n%B7%E9%8C%E3%18%969%C5%F1%0C%23%DC%083!%123%2C9%E6%20%A9%B0b%06%DCA%18'%D9%CE%5E%3C%1C%BE%0Fe%1Cp%029%F0%9B%C1p6%2C%40J%97%05%10%B9%17%B3%08%07%EDm%24%3C(%3Fk%16'%12%96%BC%3E%82%09%AA%DE8%81%ECa%7Dha%F7%86TJ%7C%D2%D1%A3%90%F5%C0%3E%BC%98%01B%93qD%C0%5DaF%3A%9B%1F%842%AA%08%D0%92V%BD%EF%80%88%CD%02%DEv%BF%C7%8D%7B%14%1CCxz%E1L2N%0D%FA%3A%E1%F9*NO%D2A8L%E3l4%18%8E%D2%E9%F6h%F7%EAl8LQ3%A2%C10B%BEj%07%16%A9%3B%AE%0F%FA6%0F%D8%A3s%92%9D!M'%83l%AE2%A3%8Csc%90%8CJ!%E2U%D2)%8A%DC%B6*%89%96%9D%2CS%80%E7Vl%8B%04%88f%B0c%D6q%C0%26~H%92%82%92S%86%D2-%15%3AMU%B3%C2%E1%9B%3D%02*%16%83%40%FA8%86%E5%8E%E1i%88l%DC%0F%B2%5Bw%9E%91%F9%BA8%06.%1A%1F%5C%5D%3F%7C'%DC%DD%A3%24%08%B3F%AD%F8q%5D%7F%EF%1D%C4%1B%8C%86%9FNm%97t%82%D5Z0%DE%E8%3E%5E-%C3U%C6%0D%C29%05L%88g%12k4%9C%12%96%D3w%8B%1B%F6%03-%FB%82(%D6%80l%CD%D8%04%5E4%A8%9C%97%A7I%C0N%14%89%BF%EA%8FJp%C0%E1%BD!%E9%A5r%E3'%86%E4K%10%B1%F1%D6%CEp4%19%25i2%D9%1ELwF%40%A4%08%D5%2Cf_%17o.%DB%E2%11%C0%12u%B9%A3%CE%80%7D%2Bv%93%82%8A%14%02%97%A8jJB!%DB%BE%93%06%222%1Be%08%18%C5%0D%99e%C0%ED%85%84%B5%A3*%3Cc%07%E2%09X%E1%9A%12!(%01%E39Bc%2B%8A%92%96%B7%CCp%11W%40%FC%B1%D8w%BD%F5%C9W%80%B7%AC%A4%14Nl%09%40Gjn%86F%8A%EB%EC%E1h%EF%E0%DAG%3F%F6%1Dm%FF%2B%1F%FE%D8%E3%AF%7C%11%E9l%C3%AC%AE%0A%F2m%0A.%E1q%88jn%85%C8%5D%B0%FA%19%D2T%D2v2L%EE%07%B3%AB%CA%82)%C8%A4%25%7B%1BA%7F2%3A%BE%09%0F%FC%E0%E7B%C3s%24%86%94%11%EF%C7%0E%AE%E6J%17%E7%E0%B5%17%D1!%7C%05%DF%E0%92%04%A5%07%AB%08%3Bm%60E%D90U%1C%AED%D3%E9%60%7B%7F2%DB%99N%B6%C7%83Q%0A%B0%E2b%24C%04%D7SizZ%CB%3D%7B%96%06%A8%16_%B2D%FB%9A%BF%E0%92%A6%22Ly%A9%17H%A0%3A%07%84%04d%99p%B9%A48%19%5DH%FEP%E4%24X%8D%AC2A%1BB%D1or%26-%95'%97%CE%A8DQ%F3%A1%E6-%E7%02%B5Pe%DF%F3%60%A2*%CD%D1J%D6%23%22%1B%B9%1D%18L6%B0x%FC%89(%A2%B8p%2B%24%80%0B%B7%D7%7F%F63%F1p%F0%1D%8E%D9%7B%FE%85%9Dg%3E%B1%B8%F7j%04%D9.%5D%F8%A2!%7D%D6%24%A8N%A4Y%20%A5%D9HK%95-iY%DCfE1%DC%F8R%92%A6%2CXtC%18%014%C1%97%88%86J%B8)%BB%80%91%E3)!a%FB%9C%19%89gy%D1%04L%81FvD%F0%96%A3%E9t%3A%1A%26)w%3A%F6ol%8F%A6%93t8%8C%8C7%AAL%B3%04%BE%81%97%D8%3C%E4%F0%8E%A7Qh%E6%80%92%08n%E8x%5E%A8%EA%F77%3Ao%82f%D3%AF%BA!%AC%95%AC5%A1%86%82%03%F0%C0%18%8D%87%0F%16%9E)%FA%14%85%04%9E%F4A%CE%B2W%03%A3%2C%D0%AE%AD%E4%C0%06%E3%3El%91%2C%8E%E5%1A%F6w%D0M%81.%AB%0A%3F%19%92%8BhfR%D7%AB%22%2F%A7%C9%90%40dn%C04%10q%19%60%06%82%06%F0%0DP%91%91%87o%0A%C9%8A%10%B2%B3%DBO%5D%F9%D8%C7%BF%7BP%06%8Cy%E6%1F%FF%D6%D7%FE%DD%2B%26Xl%DDx%AA%7Bx%B7%3C%3D%A2%F1iq%2FH%2F%84G%F3%A4%01%F7%F4%98O%12%05%5D%17%25%9C%0Cz%B1%B1c%1B%84%D4%89P%EE%FB%2B%94%CA%82%14)%8BN%E2%8B%F0HRK%24eI%B1%E1p2%1DmM%07%A3d%7Bw2%DD%9B%ED_%99%06nc%BA%3C%C9%82d8%8E%D3!%E2%98%CD%95%60%5Bu%15%A1%0D%B6%13%99(%60%C4%A8%05%9D%F2%DC%E8d%C9%E2%90D%D1%F1%9E%D8!%20%E6k%D6%24%7C*%0782%A9r%B5t%ABX%F7%D9.%EAc%07o%D7r%9B%10o%E0%AB%A6-KQR%92N%E4%26%F0%89%25%BB%F3%F0%13%05i%23m%1B%88PaGJ%3A%0E%BA_%3B%95%F7%D2%FD%B0%0B7H%DB%E0z%C9l%98%1C%81%14%7D%1B%C6%80rh%D5%10%16%D8%DE%7D%EAW%FF!%9B%A9%DF%E5%18%FC%FC%F8%C6%AD%AB%2F%FC%D2%E3%AF%FC%5E2%DA%1A%ED%5E%07%B3%5Bn%16eU%B6J%84%19e%A6eH%03%1Fd%06%84%9Bp%92D%C8%2C%5C%AA%F0'%E9l%B0%13%24*%B8%EFdHhH%F9gQ%C2mL%B6%C6%D3%AD%C9lw2%9E%A2RG%E3Y6%DDJ%E3%24l%AA2%C9%18%3B%AEZ%B4e%85%F0L%06c%1B%A5%9C%8Fx%F6-p%13%08p-%C5JQ%3FoT%E0%C8%FC%D8%E1%60wK%14%9Fn%EA%8A%F7%CEv%99%0D%B8%CC%D7rq%08%D8(%18%C0%EA%05I%AC%FA%D3zN%FC%04%90%EBo%85%8D%06_%D5l%8DE%11%176%3C%E9A%BF%91%D9%08%11jX6L%CFW%25%16%AD%23i%E0%E0%B2%EB%BB%3E%DE%F4%F9%22%24%95%87%CD%1A%C2%00%D1%1Cj%0C%BFgI%C5%C5%85q%18%C76%8A%F1%9A%C1d%F2%D4%AF%FF%93%D9%AD%1B%DFc%B4%DC%0F%9D%EF%FC%C6%BFl%F3%8B%C5%9B%7F%11f%FB%B5%8A%406%87%D9%90b%B3!)%07%BD%87%A7%15%D8%8B6%FD6%05%23%0F%40%D7%BA%BE5%D8%90%A2%B0%40%1B%F6%14%015%C4PX%7C4%8A%F7%AEn%ED%1C%ECA%C8%8EF%E9l%0FI%90%B5%AE%E0%DAM4%60%81%A9a%E2%3A%B4%B4Y%D7%C5Q%94%AAh%88%CF%24%F0%FB%B6%3F%BA%D8%F9%BC%F3%85%E2%A7%E4Z6%CCE%05%15%A2*%A5%B3%02%94h%2B%8En%91(%15%25%90%D4_%E9%E32f(l%C0%C5%EAM%05U%DC1%AE%14_%40%B5%D3R%98%F1%3DxG%A2%A6pc%3D%FER%ABs%EDR1%C7%88%3Fl%A9%88%C3%BA%CBSSl%04%7B%19%8E%F1Pm%C3%BD%5C%1A%9F)-%89%03%0Dg%5B%09RH0%7C%2C%D8H%18E%9A%8EI%60%F6t%3C%BD%FE%C9_%B8%FA%B1%8F%FF%25%EBK%B8%91%A3%2F%FDn%F1%F8%EDE%B5%F7%F2%17%BFp%7CzD%F2%0E%DB%23%E1%CB%82t%85%BC%92%5B%AC%1D%9D%0F3%F5%8D9v%18%26%93l%3C%1B%CE%B6%40.%F6%B2%81%1ELP%09%5C%3ALG%03%13%C6%CC%F1%86%E8%E1%A5%BA%22%1E%1B%0E%E5LD%01%CF%3BF%EC%B7%26%1C%CBLU%93%8Cu%14%D5%B8%ED%BE%B0%F9%B6%94%99%14%E2%13%BA%AF%12%0D%DC%90h%F27%B8%9E%86%A0%84%9A%C0%9F%876B*x%E4A%C0%CD%A9%86%20D%CE%D86E%D3%94%7C%8D%DC%B7z%FF%E2%FBB%D7O%8A%EDe%B7L%C8%0A9%16%B9%89%92%DE%9A4%8C%91(%BD%C7%A8%13y%E1Dw%14%F0%26%E8Y%2C%AB%02%0B%15O2%234HF%24VxV!%60%2B%0A%12%92%E6%60%B9%0F%D3Qv%F5%13%9F%BD%F3%B9%7F%60%93%E8%07%DA%2B%93V%8E%9E%BFs%EFk%BF%FD%3F%5E%F9%EA%9F%1E%3Ez%90%975%F3%9E%0B%C2B%C8E%D2%C1Ri%16O%B7F%FBW%F7%F6%0F%D2k%D7F%A3i%8Cp%00%DBa%F3%07%60ad%FB%80Cr%25%84%92%7C%81%1B%AD%FDj'%60E%F3%EC).%96%19%C0%9Bs%86%93%15ru%99%0DB%DF%80%EC%16%00%D2%CE7%FD%0A8%5EF%A6Mb%1E%B1~!%0B%AA%8A%B0%C1%06%3FH%1F%DB%82%8C%DD%BC%F1%FD%9EM%A7%85%3F%A2%1Ex%BA%8D%15%85%7De%CF%F3%2Fr%2C%99%5D%0F%9AL%84%2F%DFY%84!m%13Gq%3F%3AP%A2%C3%7C%CF%B2%FA%C6%87%8C3%FA%99%8D%8DBn%C7%F1U%24%C1%BC%16%FE%88%12%02%8B%3FZ6%3F%40%86x%88)T%E4%8D%F8m%94%0E%B2%DB%BF%F8%EB7%3E%FB%8B%EA%87%3B%86Qo%CA%C3%B7%EE%BE%F9%FB%FFy%FE%EE%8Bl%14%DB%B4%DCT%EBu%897%9E%EDO%F7%F6%EDl%7F'I!%DD*B%B9C%85'Ah%5C%CD%06%17Ov!%FA%A8%81%FA%13.%94%8D%0D%07-%927%DCbAjSC6N%2B%1EI!%3E%D5%8E%CCEF%B6%C8%0F%D3U%1D%BB.%0D%17%1B%00B0%3D%F3U%96%F6%BD%BA%1Ca%11q%10%F6DR%1EsE%A5%C9kW%B7%D2W3%02F%9A%9D%24%E9uW%9C3%F1%D6%E1%12aG%FD%C5%F5'F%F8%AB%EFCw%241%A05%A6%AE%5C%9F%24%14%E9%9DD%26%B90%15%00%8B%1D%C9%AE%12%11%DF%B1A%20Z%88%5C%95%B9%CE%11%0E%5B%5E%DA%24%EC%C1%81%23%C05q%0C%016%19%DF%FC%A5%7Ft%F5%13%9F%F8a%0E.%F5%0BO%B6%BD%98%99%FBO%DF%EC%EA%83%A7%5Cm%AAZ%D8G%5E%84Qc%B9%89%DF%04%F9Y%9D%F7l_f%0F%14Q%01%D4%BBNB%82%97%E3Y%F7%96%2C%C8%C9%D0%90*%07%CA%B2!e%82%11%3B%CA%87%9A%5D%84P%0B9r%2C%09%3A%86%09%B4%B4%2FDcz%91%05%40%1A%AD%1C%E7%E5%97%8F7%60%2F%13%0E%E1%80%5CD%B6%0C%01(%C1%C0%0F%CB%16*%90%B0b%04%AC%B8S%11%C8%A8%AC%9Fk*%99%D0%C8%AA%00%D5rw%B9V%11%B4%9A%A6%15%EDm9%3Dc%14%99DpU%0B%06%8A4%0C%23%12K%AE%C2%84LC.%A0F%F2%DC%06%BA%89%FE%B1%3Co%CE%C8%13%02%0D%0D%E2%99%CCa%94!S%A2%E1l%FF%DAg%7Fu%EF%23%CF%7D%E0%A3~%92%C7%5D%7D%F2%5E%FE%E8%B5%E3%97%BFXl%9C%2BJ%C4%60%E7*%A2%AC%95%BE%91%CCo%E5%3C%91%84%8D%EFI%3C%9Bt%C6%CA%AD%F3%D4V%DD%EF-HL%02%A887aU0%EC%D9%05%FD%96%03!%40Qm%B1%FBJ%ED%C6e%2C-f%E7%E19%D3%CF%1C%09%DCb%03%F2%D0%A0%2F1%AD%90%16%C1%14%E9u%D0'%14%D8%FC%03%89%18)%0A%B1%C6%91x%C9t%99Fg%C9%EC%FA%82%40%80%BA%AC%E1%A2I%C9%3F%A5%A3%D5rs%9F%9B%00%E0%B3F%16(9%ECdn%A14%22%9A%82~%B6%C9%5Dw%5E%AE%9C%E8%A1%BA%0E-%F1%94%B4X%CB%00OI%DF%82%87%95%E0%E6%D0j%3B%1E%ED%3E%FD%B1%2B%9F%FA%EC%60w%E7%879%B5%8C0%3A%7F%F1%F3%C7%AF%FC%A1%5B%2F%9A%0A%A2%D6U%2B%1E%9E%AB%D9y%F6%B2-%02%B3C%B2%02%0B%BC4Z%60%9DF%F6%12X6%05%EF%FB%07vt%92%E6%A6%95%D6%1D%24%18%87.%D2%BF%93%5E%3Dq%89%9B%B0%B8s2%15%5DW%954Z%05%7F%F8V%AD%BE%0C%14f%8EX9%E8I%9At%2B%7B%ED%D4%C9A%8E%5E%DE%D2D%8D%E3%F8%C5%86%3C%F5%DAo%18%11%08%5B!%B1%97c1%3AV%DA%AD%BD%D0%A3%A8%D2%97%2B%16%97%E5%9B%A1%C1%5E%26%CFT%F6%0D%0Eyo%E2a%9F%0A%C2%CCC%DF%92%BF%C8%7CA%F3%40%8F%92%1E%15%3D%13Jx%87%96%FC%1F%8E%09%C3%24%1B%DF%7C%FA%DA%A7%3E%3B%BEy%E3%03%3C%80%A1%9F%C2%0AY%F1%E5%FC%F8%BD%FF%F3%3B%AB%BB_G%15%EC%20%B2(%96Q)%B9%07%DF%90%FC%F0d.n%06%26%E5y%60%C4%26%07%9DF%E0%80%26%D6%14%9ED5s%89%D8%97%BD%82%96u%83%3D%CDK%D1%DF%13L%E6%1CH%AA7%DC%2C6%B5%2B%25%81%A4fv%BD%1A%17%8D%A6%8C%F4%8C%2F%A3%E6%FD%03%CDJTd%2B%B3%02O%5B%B0%7B%24%25%076%A3%10%81%FFj)%D5%B2%F7%D2w%D9.%1F%F1%A2%83%5Ey%5D%AA%05-%DDwF%3Aw9%8C%E4%AC%04%10%C0J%F7%0B%A1%22%C3%D8%CA%84%96%024Q%B7%F7%BE%EC%FF%DA%CA%16%19%F4O%C2%DB!%FD%B2%26%B2MUG%D9x%F7%D9O%1C%7C%FCS%83%ABWE%80%FD%40%0F%96%F9%A6c%18%84%F3w_%7F%F8g%9F_%BC%FBvS%E4%C4Y%C7%BE%05%FE%B2%AA8%17e%CBD%F8%AEDO%C7H%10%14e~%C8N%15'%0C%D2%3B%C4_%D5eE5%20%B9L%D0%F2%FD%8F%90b%22~X%9C%5D%25%EEa%E5%10H%90%F4%A7%7D%2Fg%0A%81%BC%B7%8C8%3D%9B(%5E%EA%02%AB%85%17%A3%19%19%DE%10Q%E4.%BC%E8%06%82%5C%1F%EF%22B%D9%87%94n%8FD%5E%D7o%12QeHLt%D2%19%BA%84%3E%C9%87%1E%82%84%03hy%93%96%A5%81%CDZy%0D%AE%1F%22%1F%A9%1C%A7%A4%FF%DE9%F9%91%90S%04%9E%A7%A1%0B5%CF8%20%CFB%84F%0A%15%7D%E7%D9%C9%ED%0F%8D%AF%DFP%1F%F01%3F%97%8EAq~%F0%A7%9F%BF%FF%E5%CF%17%CB%8D%EF%BB%D2%08%B0%A6%A2'%C0%96%5C%E99%F5C%CA%3A%25%F0Ld%E5(%5D%BA%87lU%F5%E6%15z%2F%5C%A5%F7V%20%B1%CF1%BD%F8L%16%7B%E5a9%3C%82JDa%A2%09%23%90%FBV2%A8U%12%0D%FD%9F%FB%96%2C%F3M%B1%2B%E3%84e%F7E%AB%8FV%198%F9~%DC%A4%05%A0T%1F%95%81%D8%9CGdd%86%D6%A7H%1F%E6%82eJ%5D%3E%20%89jX%0A%0F%ED%DEWw%15%F4%C9!%3B%05R%F1%FAe%3F%1E%F7%91%F4L%C2%A8%3F%A3%2C%BDG%9E%AA%E6%11s%AE%C5%04%26%89%93%D9%5Evpkv%E7%B9%D1%F5%1B%3C%EA%F6%A3%3C%16k~%F7%9DG_%FF%AA%89F%3Al%D8%C4%AE%5D%DF%87%E0%2F%C7%AE%2B%C7%AA%DC%C1m%E5V%3B%19G%F2w%F8%5C%A1%F2%2C%E2B%B9%D8%BB%C3%E5%06l%DF%F2%18%9D%A0.%C3%94%8DB%E1%B2%A2%DEyJ%1F%3F%E1%B8%C8C%94%8FS%AE%04%E3%FB%82%3B%AA%EB%EB0-%D4w%05%03%99%CE%C8%13uhP%F1%16%F9%07%23U%A0%B1%A7%B0%920L%0C%A3C%8E%96el%03%8C%943%B5%FD%8E6%89%0B%0B%B8%B6%EAr%AC%A1%C8D%2C%F7%C2Ev%B2%F2%85B%3F%0C%0F%89%C8%1CMv%3AB%84%0C%AA8l%16%92%D7x0%15%93Xe%B9lj%93%2C%9E%5D%19%DD%F8%D0%E8%D6%D3%D9%C1%81P%B7%1F%C7%F3%CAfO%3C5%DA%BD%B9%3Cy%C0G%17T%1C)%B2%0D%1AH%FF%A9%23eb%03%CEX'%DDr%19%5D%90%AF%C0%D4M%DDZ%A2%97%EC%5D%F5%85A%1E%17%05%A6%20%FD%88%A0%97%26%7D%5C%93%E14%3D%001%AB%DE%DF%A0%83%01B6%24%8D%B4%25%25%E98%D1%A1%25%AD%2C%86%5D%D6%FF%5En%F4%C3g%F1%15%B7)T%AFx%84b%F5%80O%FDH%DD%12%D8(qU%D1%D3%60%19%7BR%B42%F2%A1'%84%5B%07%3D%3CQ%84XY%B01%00H%ADy%14%D4%C8F%B8%16%91%D8o%F9%F2%22%A9%85%C1M%08%00%3C%B1%C5%7FO%93%D9%D5t%FF%E6%F0%C6%ED%C1%C1u%1D%FD%D8N%81%7F%8B%95m%8EN%BE%F1%DB%FF%A1Z%CC%DB%A2%AE%CA%0D%14%22%B52%F9L-%ED%3B%B6%C2%904lX%C8~%0An%D2%B2%83J%F0%88d%E7%A1%E5CC%98%1E%7C%60N%A0%FA%84%A3c%2F%1F%A7%C65%BC%CB%FC%F2%92Id%92%8CR%A1%9B%CC%40%CE%3Fd%8DK%40_%0E%9Cw%97rEjv%D0O%82%2F%05%8C%BF%84%9A%CB%F5%97%FE%AFYs8%2C%C2%FB%F6%8C%08%24%8D%5D%88%FEx%0EaI%F7%2C%8F%EB%DF%FCX%A9UA%3F%BB%A47T_%5E%40%3B-%1F%3F%C2f%8A%FC%85%09%8D%90L%99%EE%0D%A6%83%83'%06%07%B7%86%B7%9F%89wvzJ%F8c%7C%BC%DFw%D3%E5%93%D7%5E%7B%FB%8B%BF%5B%9D%1F7u%5D%15%9C%E2%F5%DB6%E2%1E%D7p%CFG%94H%CBI%A5%E1%00D%D6%CBi%05M%09%D27(%C4%09%FDrWK*%26CA%D5%AB%84~%01%8FM%0Ba%0A%A6%AF%0A%A2%A9M%E7%A4%91-%9D%0DI%BE%AE%F7%11%DFPJ%3F%0F7H%89V%A2%0D%BDL%9D%A4Ap%C9%A7%FBUoi%B1k%99S%F3%18%0Bw%83%5C%FB~%E2%89%D1%2F%7B%EF%9D%D0%94P%9C%24%AD%06%EEM%F0p%8C%9CsS%3D3%EBT%DF%E0%D2%D1d%96n%ED%C6%A3%E9%E0%EA%D3%D9%8D%3B%E1h(p%F7W%F5%F5%DD%3A%A6%5C%2C%DF%FE%FC%EF%9C%BF%FDr%9D%97uQxi6%F1%40%F5%A5w%9C4l%C9ICY%F9%EFwS%A5c!Z%D1%7B%D9I%EC%23%94%FD%92~B%DF%8B%ADK%F2%13%88%18%95(%C3%2B%0Cyr%D8%D4%0D%8FC)i%90%F5%7BI%EF%E3Z%F0m%22%F0%D2%05%7C%7F%D5C%187M%D8%06%0Dz%F1(%9BZ%8C%83%AE'u%92'%FDZ%26%3E%A5%DF%07%04%89%A22'q%91'%00u%24%7F%96%8F%7B%11H%96gs%18%82%12%E3%2CN%07%83%ABOn%3F%F7%E9%EC%EAu%9D%C4J%A9%E0%AF%E5%EB%7B%08L%E4%C6%A3%AF%FE%F9%FD%AF%7C%C1m%CE%5D%DD%D4%25%F7%0F%A4YE%22%C5%D9P%D7%AF%5Ew%7DOQ0%A1%15%1A%C6%C5%1C!Q%F2%C8%8F%CB%07e%5C%82%12c%BD%C7%22R1%99%87%B2%AF%17%C9%FC%D5%F1%F1%0C%22%05%84SI%A9%96%DFsY%A2W%91%97O%3F%E1FA%BF%F7m%F8%B3%E2w!v%FD%82%00%C7x%12%1F%F2%A4%13i%C8%A9~%F0%CA%A5%A4%90g%A9%7B%60%22%3D%0F%91%1D%3C%02%DA%5E%FE)%B6%22%3Ael4%18%A5%BB%D7G%D7%9E%1C%DE%BC%13o%EF%F5%97%FE%D7%F9%F5%7D%9B%98%17%EF%BEw%EF%8F%FF%60%7D%F4%1E%E5~Us%E5%80%07%A2%9B%BE!%06%FA%A4z%85F%23%91%E8%07%92%5B%B2%D9%A5%DB%1E%D1Y%06%DA~c%EA%B2%1B%25%DB%D9%02e%5E%26%C1%86%BC%89%BB%FA%9D%FE%E6%AD%CB%24%5C%06a%FDf%91%EA)2AEK%89%E99%B1%1C%A2%E8%C4%EC%BD%EA%11%B6J*%C8%8C%E1Gv2%5D'i%8A%22T%C3%B6%AC%D8%E0%89%F8x%8AP%8E%BA%932%B0I%19%F5%82%0C%E2%3C%B5%83%C9%F0%CA%93%E3'%3E%94%EC%1E%84%A3%F1%FBE%E3%C7%5B%3E~%E4gb6Eu%F6%C6k%F3%B7%BE%B1%3C%BCW%5E%CC%B9%82%CCn%87%9C%09%E1R%7B%2B%F5%5CK%DE%B4%BDF%EF%09%90%1Co%E8%E9%DB%A5p%93!5%AD%DF%BD%AF%DE%E4%C0C%2B%23zj%D5%5EY%88%E9E)H%F3%AB%EB%97%8BYr%85N%F4%DF%A6%08%E5%06%14%BD.%F5%86m%08%19v%A8oj%18%7F%19%01p%0DP%8BmD.%18s%BE%C7%07%CC%05FT%3E%1Fh%16%0D%C7%D1h%1CM%B6%07%FB%B7%87%D7nF%5B%3B6M~%12%1E%DD%F6%03%3D%7D)%3F%3E9~%E9%EB%ABG%EFT%17'%5DS%D4E-%7B%7B%9A%CF_%95%D2%CAVT%DB%3B%C6_63%015%BD%1B%04Z%A4%C2h%11%E1%B2%D7%A7d7%A4O%81%BE%ADA%EB%9B~%F7%95%CF%A3%E2%3C%AA%EB9%98%10%A1Pv%E4%C4%E0%5CM%93.%16%81%93%89%D6%93%009%14%D9%AB%11%2Fd%CDH%FA%8AL%E1%F2%9AGY%0F%93%90~%0A%82t%B67%BC%FE%A1%C1%D5%DB%83%EB7m6%E8'D%3FQ_%1F%E0%B1XmQ%AD%1F%3FZ%3Ex%7B%F5%F0.%9FAY%E7%5E%F6%B1%B5%8C%DB%B9%E9P%B7%FD6%9A%F4%83a0%E7%2F%DB%BE%B497%B8%5D%2B%EB%80%3C%23t%89%5D%1C%CC%E8%9Exu%FD%20%40%8E%AD%CAjb_%90.w%D7%FA.%B5%90Z%3E%02%85%D3%84%AE%95%D50%EE%B9%89%EA1%C2%9E%85%22%CA*%22%E5P%CDC%AA%9C%E5%A6%83p%3AM%B7%0F%06%07O%A6%BB%FB%F8%BD%CD%B2%9F%E4%E7K%FE%A0%8E%E9z%B6%DF%7B%A8n%DCrQ%9C%1C%AF%8F%1En%0E%EF%D5%CB%0BW%AD%7C%5DsST%06%ED%B0%A0%D0%E8%BE%F2%CB%09%87%A6%91%C5%2F%98%1E%B0%23%8DB%901%19v%A9P%C6%C3t%18%B7%AC%E4zd%0E%60-%BD%ED%BC%EEw%23%BD%BAl%DB%5C%9E%EB%95Me%D53oV3%99%06%F7%C7_%8Cts%8C%1Dd%E1p%3B%DB%D9%1F%DF~fp%F5%06%3C%A1%AC%0E%FE%96%7C%FD%E0%8E%E9%87~A%2F%06%BE%B5%23%E0Z%B7%5C%95%17g%D5%E2%AC%9A%2F%EB%FC%A2%A9%E4%C1%C6%F9%AA)%2B%EEi%F4%CBtT%FC%FE%92%EB~%EBt%90%8Cau%2Fr%D8%83%EF%1F%F2%CDA%88l%E8%F6%7D%81%C0%F4%5D%059%F8%22*%96%7DG11%1F%D8%04%EAK%8B%B3%C6s%EF!%1BG%C3Y%B2%B5%1B%0E%A7%D1dJ%B5a%FE%D68%E3GpL%CFI%7B%9At9%F0V%DF%23%B7%E4%FC%8E%5B%AF%DB2%07_%E0Bu%5D%F2%816%FD%F1%10y%A6%9B%EA%17%08e%E8.1%AEeOS%B1%7B%8FJmC%F5~g%9A%CCj8%E2%C1%BDV%F6%B1%C1%A8%C2Hj7%5C2%B2%3C%83%2Ck%1A%FD%937%FE%AE%7C%7D%B0G%2F%8A%A4%90N%9F%ECP%F5%ED%96%F7%5B%EA%97%83%AA%BF%01j%F9w%F1%EB%83%A5%F9%B7%F2%A3%3FT-N%FAv%3Ft%97%C7K%7F%C0G%D3u%DF%EF%F1%8D%3F%FDR%3F%FD%BF)%F9%C9%FC%FA%7F%02%0C%00%EC%80Q5%0B%5E%AD%95%00%00%00%00IEND%AEB%60%82" /></p>
<p>If you're using any modern browser (that rules out <abbr title="Internet Explorer 6">IE6</abbr> and <abbr title="Internet Explorer 7">IE7</abbr>), you should<br />
see a picture of a hot dog above.</p>
<p>But no such image file exists on my server&mdash;or on any <em>other</em> server. You're looking at a <acronym title="Portable Network Graphics">PNG</acronym> image, but there's no <acronym title="Portable Network Graphics">PNG</acronym> file anywhere.</p>
<p>How is that possible?</p>
<p>Right-click on the hot dog and view the image properties&mdash;in particular, note the image's <code>src</code>. You'll see a <acronym title="Uniform Resource Indicator">URI</acronym> that begins with <code>data:</code>, followed by a very long string of gibberish.</p>
<p><span id="more-336"></span></p>
<p>That gibberish <em>is</em> the image data. Ordinary <acronym title="Uniform Resource Indicators">URIs</acronym> simply point to data stored somewhere else. But <a href="http://en.wikipedia.org/wiki/Data_URI_scheme" class="external"><acronym title="Uniform Resource Indicators">URIs</acronym> that begin with <code>data:</code></a> contain <em>the data itself</em>, represented as <acronym title="American Standard Code for Information Interchange">ASCII</acronym> text. Instead of downloading an image file from somewhere on the Internet, the browser interprets the <acronym title="Uniform Resource Indicator">URI</acronym> itself as an image file.</p>
<p><code>data:</code> <acronym title="Uniform Resource Indicators">URIs</acronym> can be used to embed <em>any</em> kind of data&mdash;images, <a href="data:text/html;charset=utf-8,&lt;!DOCTYPE%20html%20PUBLIC%20&quot;-%2F%2FW3C%2F%2FDTD%20XHTML%201.0%20Strict%2F%2FEN&quot;%20&quot;http%3A%2F%2Fwww.w3.org%2FTR%2Fxhtml1%2FDTD%2Fxhtml1-strict.dtd&quot;&gt;&lt;html%20xmlns%3D&quot;http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml&quot;%20xml%3Alang%3D&quot;en&quot;%20lang%3D&quot;en&quot;&gt;&lt;head&gt;&lt;meta%20http-equiv%3D&quot;Content-type&quot;%20content%3D&quot;text%2Fhtml%3Bcharset%3DUTF-8&quot;%20%2F&gt;&lt;title&gt;Ghost%20Page&lt;%2Ftitle&gt;&lt;%2Fhead&gt;&lt;body&gt;&lt;p&gt;Your%20browser%20obtained%20the%20HTML%20source%20of%20this%20page%20from%20the%20text%20of%20the%20data%3A%20URI%20you%20just%20clicked%20on.%20Look%20at%20your%20address%20bar!&lt;%2Fp&gt;&lt;%2Fbody&gt;&lt;%2Fhtml&gt;"><acronym title="HyperText Markup Language">HTML</acronym></a>, JavaScript, <acronym title="Portable Document Format">PDF</acronym> files, MP3s, <em>anything</em>&mdash;and you can use them wherever you'd ordinarily use a standard <code>http:</code> <acronym title="Uniform Resource Indicator">URI</acronym>.</p>
<p>You can even use them in <acronym title="Cascading Style Sheets">CSS</acronym> files&mdash;and that's really the meat of this post. I'm going to show you how to embed image data in a stylesheet. It's actually quite simple.</p>
<p>This page contains the following inline style rule:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">p<span style="color: #6666ff;">.polka</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">background-image</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1JREFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jqch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0vr4MkhoXe0rZigAAAABJRU5ErkJggg==&quot;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<style type="text/css">
	p.polka {
		background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1JREFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jqch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0vr4MkhoXe0rZigAAAABJRU5ErkJggg==");
	}
</style>
<p>And here's a paragraph with the class <code>polka</code>:</p>
<p class="polka">Hi! I'm polka-dotted!</p>
<p>Why would you want to do this? The main advantage is speed. Ordinarily, the browser must download the stylesheet, parse it, and download each image separately. Even if the total payloads are the same, multiple <acronym title="HyperText Transfer Protocol">HTTP</acronym> requests are much slower than a single transfer. Embedding the image data <em>in</em> the stylesheet allows the browser to download everything in a single package.</p>
<p>This is the same motivation behind <a href="http://www.alistapart.com/articles/sprites/" class="external"><acronym title="Cascading Style Sheets">CSS</acronym> spriting</a>, which allows the browser to download a single image instead of many. The method illustrated here simply takes that principle to a logical (and arguably ridiculous) extreme, by eliminating the need for <em>any</em> additional downloads.</p>
<p>There are, naturally, a few limitations:</p>
<ul>
<li>
<p><code>data:</code> <acronym title="Uniform Resource Indicators">URIs</acronym> aren't supported in Internet Explorer 6 or 7. This renders them impractical for real-world use&mdash;unless you're working on an intranet, and can be sure that all users have a supporting browser.</p>
</li>
<li>
<p>Internet Explorer 8 supports <code>data:</code>, but limits <acronym title="Uniform Resource Indicators">URIs</acronym> to 32<abbr title="kilobytes">KB</abbr> in length, and disallows most content types except for images and <acronym title="Cascading Style Sheets">CSS</acronym> (for security reasons).</p>
</li>
<li>
<p>There's also maintenance to consider: new and updated images will have to be re-encoded and pasted into the stylesheet, and the next person who works on your site might look at your code and have no idea what to do with it.</p>
</li>
<li>
<p>If you use the same images in multiple style rules, you'll end up with duplicate image data&mdash;which will <em>increase</em> load times. In this case, you're better off using regular <acronym title="Uniform Resource Indicators">URIs</acronym>, pointing to real image files.</p>
</li>
<li>
<p>This technique forces the browser to download all images on the first page view, rather than as they're needed. This could be a bug or a feature, depending on the type of site you're building.</p>
</li>
</ul>
<p>So&mdash;at least until <abbr title="Internet Explorer 6">IE6</acronym> and <acronym title="Internet Explorer 7">IE7</acronym> go away&mdash;use of this method is limited to experimental projects and parlor tricks.</p>
<p>You can encode your own <code>data:</code> <acronym title="Uniform Resource Indicators">URIs</acronym> with Ian Hickson's <a href="http://software.hixie.ch/utilities/cgi/data/data" class="external"><code>data:</code> <acronym title="Uniform Resource Indicator">URI</acronym> kitchen</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.electrumdigital.com/2010/03/fun-with-hot-dogs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hiding Wordpress page links</title>
		<link>http://www.electrumdigital.com/2010/01/hiding-wordpress-page-links/</link>
		<comments>http://www.electrumdigital.com/2010/01/hiding-wordpress-page-links/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 17:23:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.electrumdigital.com/?p=306</guid>
		<description><![CDATA[When developing a custom Wordpress theme, it's necessary to provide prev/next navigation wherever there might be more than one page of posts: the main index, search results pages, and archive pages, for example.
posts_nav_link() provides the simplest way to do this—it automatically displays either or both of the links, as needed. If you need more control [...]]]></description>
			<content:encoded><![CDATA[<p>When developing a custom Wordpress theme, it's necessary to provide prev/next navigation wherever there might be more than one page of posts: the main index, search results pages, and archive pages, for example.</p>
<p><a href="http://codex.wordpress.org/Template_Tags/posts_nav_link" class="external">posts_nav_link()</a> provides the simplest way to do this—it automatically displays either or both of the links, as needed. If you need more control over the markup, <a href="http://codex.wordpress.org/Template_Tags/next_posts_link" class="external">next_posts_link()</a> and <a href="http://codex.wordpress.org/Template_Tags/previous_posts_link" class="external">previous_posts_link()</a> let you display them independently.</p>
<p><span id="more-306"></span></p>
<p>Typical usage goes something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pager&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pager-prev&quot;</span>&gt;&lt;?php next_posts_link<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'&amp;laquo; Older Entries'</span><span style="color: #66cc66;">&#41;</span>; ?&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pager-next&quot;</span>&gt;&lt;?php previous_posts_link<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Newer Entries &amp;raquo;'</span><span style="color: #66cc66;">&#41;</span>; ?&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></div></div>

<p>But there's a problem here. What if a single page of results is being displayed? Wordpress will render an empty pager:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pager&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pager-prev&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pager-next&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></div></div>

<p>In my latest Wordpress theme (the one you're looking at right now), this was throwing off my layout in some browsers. Despite enormous progress in browser standardization, there are still inconsistencies in the way browsers handle empty elements. Some will reserve vertical space for the element; some won't. Some will respect any margins that have been specified for the element; some won't.</p>
<p>Ideally, we simply wouldn't render a pager at all if one isn't needed.</p>
<p>Surprisingly, Wordpress doesn't offer a simple way to determine whether the current query result spans multiple pages. There's <a href="http://codex.wordpress.org/Conditional_Tags#A_Paged_Page" class="external">is_paged()</a>, but it always returns false for the first page of results, so it won't work.</p>
<p>Fortunately, <a href="http://codex.wordpress.org/Function_Reference/WP_Query" class="external">$wp_query</a> provides the information we need:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">found_posts</span> <span style="color: #339933;">&gt;</span> <span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'posts_per_page'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// show pager</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>This seems to work well so far!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.electrumdigital.com/2010/01/hiding-wordpress-page-links/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New look! Same great taste!</title>
		<link>http://www.electrumdigital.com/2010/01/new-look-same-great-taste/</link>
		<comments>http://www.electrumdigital.com/2010/01/new-look-same-great-taste/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 02:33:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Site News]]></category>

		<guid isPermaLink="false">http://www.electrumdigital.com/?p=304</guid>
		<description><![CDATA[If you've been here before, you'll notice that things just got a bit spiffier.
There are still some layout quirks in Internet Explorer—I'm working on it.
Let me know what you think!
]]></description>
			<content:encoded><![CDATA[<p>If you've been here before, you'll notice that things just got a bit spiffier.</p>
<p>There are still some layout quirks in Internet Explorer—I'm working on it.</p>
<p>Let me know what you think!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.electrumdigital.com/2010/01/new-look-same-great-taste/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Check out my new Flash game site</title>
		<link>http://www.electrumdigital.com/2009/11/check-out-my-new-flash-game-site/</link>
		<comments>http://www.electrumdigital.com/2009/11/check-out-my-new-flash-game-site/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 16:09:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Site News]]></category>

		<guid isPermaLink="false">http://www.electrumdigital.com/?p=272</guid>
		<description><![CDATA[If you find yourself with a few minutes to kill, check out Plastic Lounge, my new Flash gaming site. There are already hundreds of free games available, and I have hundreds more to add as time allows.
Honest feedback is always welcome—it helps me to provide a better site. Hope you find something you like!
]]></description>
			<content:encoded><![CDATA[<p>If you find yourself with a few minutes to kill, check out <a href="http://www.plasticlounge.com/">Plastic Lounge</a>, my new Flash gaming site. There are already hundreds of free games available, and I have hundreds more to add as time allows.</p>
<p>Honest feedback is always welcome—it helps me to provide a better site. Hope you find something you like!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.electrumdigital.com/2009/11/check-out-my-new-flash-game-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The $300,000,000 Button</title>
		<link>http://www.electrumdigital.com/2009/10/the-300000000-button/</link>
		<comments>http://www.electrumdigital.com/2009/10/the-300000000-button/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 17:19:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Design & User Experience]]></category>

		<guid isPermaLink="false">http://www.electrumdigital.com/?p=267</guid>
		<description><![CDATA[If you think that usability, information architecture, and user experience design are made-up disciplines for lily-gilding aesthetes, with little practical bearing on your Web site, think again.
Jared Spool explains how changing one button in a site's checkout process increased sales by $300 million per year. (He doesn't name the retailer in the article, but it [...]]]></description>
			<content:encoded><![CDATA[<p>If you think that usability, information architecture, and user experience design are made-up disciplines for lily-gilding aesthetes, with little practical bearing on your Web site, think again.</p>
<p>Jared Spool <a href="http://www.uie.com/articles/three_hund_million_button/">explains how changing one button in a site's checkout process</a> increased sales by $300 million per year. (He doesn't name the retailer in the article, but it starts with "A" and ends with "mazon.com".)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.electrumdigital.com/2009/10/the-300000000-button/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ellipses and interrobangs and em-dashes, oh my!</title>
		<link>http://www.electrumdigital.com/2009/10/ellipses-and-interrobangs-and-em-dashes-oh-my/</link>
		<comments>http://www.electrumdigital.com/2009/10/ellipses-and-interrobangs-and-em-dashes-oh-my/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 23:06:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Design & User Experience]]></category>
		<category><![CDATA[entities]]></category>
		<category><![CDATA[typography]]></category>

		<guid isPermaLink="false">http://www.electrumdigital.com/?p=150</guid>
		<description><![CDATA[Typography is one of the most overlooked aspects of Web design—and I'm not talking about fonts, kerning, and x-heights. I'm talking about proper use of glyphs—the individual letters, numerals, and (especially) punctuation marks that make up all written text. There are proper and improper ways to use each glyph&#8212;and even large, well-funded websites often get [...]]]></description>
			<content:encoded><![CDATA[<p>Typography is one of the most overlooked aspects of Web design—and I'm not talking about fonts, kerning, and x-heights. I'm talking about proper use of glyphs—the individual letters, numerals, and (especially) punctuation marks that make up all written text. There are proper and improper ways to use each glyph&#8212;and even large, well-funded websites often get it wrong.</p>
<p>This isn't surprising—even if a site's designer is trained in the specialized discipline of typography (which is unlikely), the person who actually marks up the content (or pastes it into the content management system) probably isn't. But the fact remains that poor typography is one of the most common and most easily avoided blemishes on the web.</p>
<p><span id="more-150"></span>
<p>Am I being pedantic? You may think so—but I encourage you to hear me out and give it a try. I think your pages will read more easily, and look more professional and consistent. Even if readers aren't consciously aware of the typographical subtleties, they <em>do</em> increase a text's ability to communicate—that's why the conventions were devised in the first place.</p>
<p>Rather than reinventing the wheel, I'll simply point you to <a href="http://www.alistapart.com/articles/emen/">A List Apart's excellent article</a> on the subject, with a few addenda of my own:</p>
<ul>
<li>
<p>As the <acronym title="A List Apart">ALA</acronym> article explains, a hyphen is not an em-dash or an en-dash. The hyphen is <em>also</em> not a minus sign&#8212;there's a separate glyph for that. It's <code class="html">&#38;#8722;</code>.</p>
<p>Similarly, the lowercase letter x is not a multiplication symbol&#8212;that's <code class="html">&#38;#215;</code>.</p>
<p>These glyphs are designed to align well with numerals and with each other. Here's the vernacular version:</p>
<p>
<blockquote>9 + 3 - 4 x 2</p></blockquote>
<p>And here's the correct version:</p>
<p>
<blockquote>9 + 3 &#8722; 4 &#215; 2</p></blockquote>
<p>Which one looks best to you?</p>
<p>(If you're looking for the division symbol, that's <code class="html">&#38;#247;</code>.)</p>
</li>
<li>
<p>When marking up vulgar fractions (<span lang="la">i.e.</span>, those in which the numerator and denominator are separated by a diagonal line, as in "1&#8260;2"), use the fraction slash (<code class="html">&#38;#8260;</code>) rather than the regular slash.</p>
</li>
<li>
<p>If you're using Windows, you can type exotic characters by holding down Alt and typing the character's <a href="http://en.wikipedia.org/wiki/Windows-1252#Codepage_layout">four-digit code</a> on the keypad. For example, Alt+0151 produces an em-dash.</p>
</li>
<li>
<p>If you're marking up foreign words (or English words, for that matter) which contain diacritics (commonly known as "accent marks"), then <em><a href="http://www.elizabethcastro.com/html/extras/entities.html#html">include the diacritics</a></em>! They aren't just there for decoration&#8212;they're part of the word's spelling, and if you get them wrong, you've misspelled the word as surely as if you'd substituted one letter for another. It's "jalape&#241;o", not "jalapeno"; "saut&#233;", not "saute"; "f&#234;te", not "fete".</p>
</li>
</ul>
<p>Granted, useful content and a solid technical foundation are more critical to a site's success than proper use of em-dashes—but every whole is the sum of a thousand details, and good typographical habits will become second nature after a short while.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.electrumdigital.com/2009/10/ellipses-and-interrobangs-and-em-dashes-oh-my/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Password Security for Web Applications 101</title>
		<link>http://www.electrumdigital.com/2009/10/password-security-for-web-applications-101/</link>
		<comments>http://www.electrumdigital.com/2009/10/password-security-for-web-applications-101/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 22:34:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.electrumdigital.com/?p=223</guid>
		<description><![CDATA[User registration and login is a standard feature on interactive Web sites, and passwords are the standard way to protect those accounts. But a password is only effective as long as it's kept secret—and you might not be doing everything you can to protect yours.
Let's say you've finished building the HTML and the server-side validation [...]]]></description>
			<content:encoded><![CDATA[<p>User registration and login is a standard feature on interactive Web sites, and passwords are the standard way to protect those accounts. But a password is only effective as long as it's kept secret—and you might not be doing everything you can to protect yours.</p>
<p>Let's say you've finished building the <acronym title="HyperText Markup Language">HTML</acronym> and the server-side validation code for your registration form, and you're now ready to write the code which stores the user's information (probably in a database). How should you handle the password?</p>
<p><span id="more-223"></span></p>
<p>The most obvious approach is to store it as just another column in the user table, with no special consideration. Many novice developers do exactly this—after all, you need access to the database to view the contents of the user table, so the passwords are protected, right?</p>
<p>But what happens when an attacker <em>gains</em> access to your database—for example, by guessing or intercepting your phpMyAdmin password? They have instant access to all of your user's passwords without even trying.</p>
<p>(Perhaps your application is trivial, and your users' accounts don't provide access to anything sensitive—who <em>cares</em> if an attacker gets their passwords? Well, many people use the same password for <em>all</em> of their accounts—email, bank accounts, and so forth. Our hypothetical attacker might not be able to do much damage on <em>your</em> site—but if the email addresses and passwords he just obtained allow him to gain access to other, more sensitive accounts, then you have a problem.)</p>
<p>Encrypting the password before storing it in the database is the obvious solution to this problem. Simply run it through your favorite encryption algorithm, and save the encrypted version; when the user logs in, just decrypt it to check the entered password.</p>
<p>This is also the <em>wrong</em> solution to the problem. An attacker who has access to your database probably has access to your file system, as well—which means they can easily find your encryption code and any keys it may use. Your encryption is useless in this case.</p>
<p>(Whatever you do, don't write your own home-brew encryption function, or run the password through a series of different encryption algorithms and arbitrary transformations, thinking this will make it more secure. It won't. In fact, this approach may leave telltale mathematical traces in the ciphertext which will make it <em>easier</em> for a skilled attacker to compromise your system. Leave the design of encryption algorithms to the experts.)</p>
<p>A better method is to <a href="http://en.wikipedia.org/wiki/Cryptographic_hash_function">hash</a> the password, rather than encrypting it. Hashing is a form of one-way encryption: converting a password to a hash is easy, but reconstituting the password from the hash is mathematically impossible. Think of a trap door, or running a steak through a meat grinder—once something has gone through a hash function, it can't go back.</p>
<p>(Since the original string can't be reconstituted, hashing technically <em>isn't</em> encryption, no matter what anyone may tell you. I merely described it as such for illustrative purposes.)</p>
<p>But if we aren't storing the password in a way that can be decrypted, how can we check it when the user tries to log in?</p>
<p>Simple: hash the password entered on the login form, and compare that to the hashed password stored in the database. If the two hashes are the same, we know that the user entered the correct password.</p>
<p>(Incidentally, this is why many systems can't tell you your password when you forget it—they don't <em>know</em> your password. They only know its hash value. These systems typically handle forgotten passwords by asking you to choose a new one. Any system which <em>is</em> capable of providing your password on demand must be using some kind of reversible encryption—or, God forbid, storing it in plaintext—and should be considered less secure.)</p>
<p>PHP's <code class="php"><a href="http://php.net/md5">md5()</a></code> function is the standard hash function used for this purpose, but I prefer the more cryptographically robust <a href="http://php.net/sha1">sha1()</a>.</p>
<p>This is a lot better than our original system, and it's good enough for many applications. But our system still has a weakness.</p>
<p>Again, assume that an attacker has access to our database (and therefore our password hashes). Though he can't convert the hashes back into passwords, he knows that most people choose plain English words, or minor combinations and permutations thereof, for their passwords.</p>
<p>It's easy to generate a table of English words and their corresponding hashes (known as a <a href="http://en.wikipedia.org/wiki/Rainbow_table">rainbow table</a>). With this in hand, an attacker simply has to compare your password hashes to the rainbow table until he finds a match. There are even <a href="http://gdataonline.com/seekhash.php">pregenerated rainbow tables</a> online.</p>
<p>(This is why good systems encourage you—or even <em>force</em> you—to choose complex passwords which don't appear in dictionaries. Generating a hash table based on an English dictionary is easy; generating one for every possible password-length string of ASCII characters is effectively impossible.)</p>
<p>For kicks, I once ran about 15,000 real-world password hashes (from a system I administrated) against the above-linked rainbow table. I was able to crack about two-thirds of them. Clearly, this is a serious vulnerability for any system which needs high security.</p>
<p>Fortunately, there's a simple and elegant solution: <a href="http://en.wikipedia.org/wiki/Salt_%28cryptography%29">salt</a> your passwords before hashing them, by concatenating them with a randomly generated string.</p>
<p>For example, let's say the user has chosen "ravens" as their password. If we simply hash this, it will be vulnerable to even the most basic rainbow attack.</p>
<p>So, instead, we'll generate a random string, four to ten characters long. (This is arbitrary; a few characters is sufficient.) This is known as the salt. (For convenience, I like to restrict my salts to printable ASCII characters.) Let's say our random-salt-generating function returns this:</p>
<p><code>^p]K~7</code></p>
<p>We prepend the salt to the password, and get:</p>
<p><code>^p]K~7ravens</code></p>
<p>Finally, we hash that string, and store the hash <em>and</em> the salt in the database. To check login passwords, we simply repeat the process (retrieving the original salt from the database, rather than generating it anew), and compare the hashes as before.</p>
<p>We've effectively turned a vulnerable, low-strength password into a strong one. Yes, our attacker can see the salt, and he could generate a rainbow table based on English words prefixed with that salt. But since the salt is different for every user, he'd have to generate a separate rainbow table <em>for every user</em>. The costs in time and storage space are prohibitive.</p>
<p>All of this may seem complex at first, but you're really only dealing with two database fields (the hash and the salt) and a couple of functions: one to generate a random salt, and one which accepts a plaintext password and a salt and computes the hash. Here's some sample code.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> generate_salt<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$salt</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$salt</span> <span style="color: #339933;">.=</span> <span style="color: #990000;">chr</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span> <span style="color: #cc66cc;">33</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">126</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$salt</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> hash_password<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$password</span><span style="color: #339933;">,</span> <span style="color: #000088;">$salt</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #990000;">sha1</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$salt</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$password</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// for user registration, do something like this</span>
<span style="color: #000088;">$password</span> <span style="color: #339933;">=</span> getPasswordFromRegistrationForm<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$users_pw_salt</span> <span style="color: #339933;">=</span> generate_salt<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$users_pw_hash</span> <span style="color: #339933;">=</span> hash_password<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$password</span><span style="color: #339933;">,</span> <span style="color: #000088;">$users_pw_salt</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// store $users_pw_salt and $users_pw_hash; forget $password</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// and for user login, do this</span>
<span style="color: #000088;">$users_pw_salt</span> <span style="color: #339933;">=</span> getUsersPasswordSaltFromDatabase<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$users_pw_hash</span> <span style="color: #339933;">=</span> getUsersPasswordHashFromDatabase<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$entered_password</span> <span style="color: #339933;">=</span> getPasswordFromLoginForm<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> hash_password<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$entered_password</span><span style="color: #339933;">,</span> <span style="color: #000088;">$users_pw_salt</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> <span style="color: #000088;">$users_pw_hash</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// the correct password was entered</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// the password was incorrect</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.electrumdigital.com/2009/10/password-security-for-web-applications-101/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conditional comments for iPhone</title>
		<link>http://www.electrumdigital.com/2009/10/conditional-comments-for-iphone/</link>
		<comments>http://www.electrumdigital.com/2009/10/conditional-comments-for-iphone/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 19:31:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Browser Issues]]></category>
		<category><![CDATA[XHTML & CSS]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[safari]]></category>

		<guid isPermaLink="false">http://www.electrumdigital.com/?p=217</guid>
		<description><![CDATA[You're probably familiar with IE's conditional comments. They allow us to feed special code to that special browser to overcome its many bugs and deficiencies.
Is there something similar for iPhone? Not exactly, but we can achieve the same end:

&#60;!--[if !IE]&#62;&#60;!--&#62;
	&#60;link media=&#34;only screen and (max-device-width: 480px)&#34; href=&#34;iphone.css&#34; type=&#34;text/css&#34; rel=&#34;stylesheet&#34; /&#62;
&#60;!--&#60;![endif]--&#62;


Some versions of IE will apply stylesheets [...]]]></description>
			<content:encoded><![CDATA[<p>You're probably familiar with <acronym title="Internet Explorer">IE</acronym>'s <a href="http://www.quirksmode.org/css/condcom.html">conditional comments</a>. They allow us to feed special code to that special browser to overcome its many bugs and deficiencies.</p>
<p>Is there something similar for iPhone? Not exactly, but we can achieve the same end:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">&lt;!--[if !IE]&gt;&lt;!--&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">link</span> <span style="color: #000066;">media</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;only screen and (max-device-width: 480px)&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;iphone.css&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/css&quot;</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #808080; font-style: italic;">&lt;!--&lt;![endif]--&gt;</span></pre></div></div>

<p><span id="more-217"></span></p>
<p>Some versions of <acronym title="Internet Explorer">IE</acronym> will apply stylesheets regardless of the <code class="html">media</code> attribute, so the conditional comments are here merely to tell <acronym title="Internet Explorer">IE</acronym> <em>not</em> to use this code.</p>
<p>As for the value of the <code class="html">media</code> attribute: not all browsers understand the "only" keyword; they will simply ignore this line. Of those that <em>do</em> understand it, the only one width a max-device-width of 480px is the iPhone.</p>
<p>(So I'm told. I'm taking all of this on faith. But it seems to work.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.electrumdigital.com/2009/10/conditional-comments-for-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
