<?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>嘻来嚷往国际版 &#187; PHP</title>
	<atom:link href="http://xirang.us/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>http://xirang.us</link>
	<description>if you see something, say something.</description>
	<lastBuildDate>Fri, 11 Jun 2010 14:23:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>SkyDrive 外链自动获取插件 WP-Skydrive-Outlink 完善版</title>
		<link>http://xirang.us/2009/08/wordpress-skydrive-outlink-tim-mod</link>
		<comments>http://xirang.us/2009/08/wordpress-skydrive-outlink-tim-mod#comments</comments>
		<pubDate>Fri, 07 Aug 2009 12:18:49 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[信息时代]]></category>
		<category><![CDATA[编程开发]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Skydrive]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[外链]]></category>

		<guid isPermaLink="false">http://xirang.us/?p=859</guid>
		<description><![CDATA[天下可以有免费的午餐，但是真的没有又免费又丰盛的午餐……为了防止像本站一样，长期、稳定地外链 SkyDrive 文件，微软可是做足了功夫，某个文件的外链地址随时都在改变。唯一不变的就是下载页面，为的就是让你去看广告。搜了半天，在《Skydrive外链(wp-skydrive-outlink)插件》找到了高人 Flarefox 编写的，通过分析那个不变的文件下载页面代码找出此时此刻该文件的外链地址的 WordPress 插件。Tim站在Flarefox 的肩膀上对插件做了一点小小的修改，让它工作得更棒！]]></description>
			<content:encoded><![CDATA[<p>本文发表在<a href="http://xirang.us" target="_blank">嘻来嚷往国际版</a>，作者<a href="http://xirang.us/author/tim" target="_blank">Tim</a>。您可以<a href="http://xirang.us/2009/08/wordpress-skydrive-outlink-tim-mod#comments" target="_blank">参与本文评论</a>或是follow本站的<a href="https://twitter.com/xirang" target="_blank" title="嘻来嚷往官方Twitter">Twitter帐号</a>。<br />
<hr size="1" color="#bd1016"/></p>
<p><span style="color: #ff6600;">站长提示：如果您点击本文中的链接后出现了广告画面，麻烦您等待5秒后点击右上角的</span><strong>SKIP AD</strong><span style="color: #ff6600;">按钮跳过广告继续查看链接内容。对您造成的不便我们深感歉意，但是这一点微薄的广告收入可以维持本站的正常运作，全站作者由衷地感谢您的谅解与支持。</span><br />
<hr size="1" color="#bd1016"/></p>
<p>话说为了为本站的视频文件找个家，<a href="http://xirang.us/2009/author/tim" target="_blank" title="Tim在嘻来嚷往上的所有文章">Tim</a>可是费尽心思，国内外的外链文件存储网站几乎全部注册试用了一遍，到最后还是锁定在了垂手可得的微软 25G 不限流量外链空间 <a class="toptip extlink" href="http://adf.ly/Omf" target="_blank">SkyDrive</a> 。一来是微软的服务器那是相当的稳定，二来是在我有生之年估计微软也不会倒闭，那就把视频文件存在 <a class="toptip extlink" href="http://adf.ly/Omf" target="_blank">SkyDrive</a> 吧。</p>
<p>不过，天下可以有免费的午餐，但是真的没有又免费又丰盛的午餐&hellip;&hellip;为了防止像本站一样，长期、稳定地外链 <a class="toptip extlink" href="http://adf.ly/Omf" target="_blank">SkyDrive</a> 文件，微软可是做足了功夫，某个文件的外链地址随时都在改变。唯一不变的就是下载页面，为的就是让你去看广告。搜了半天，在《<a href="http://www.mathelite.cn/archives/wordpress-skydrive-outlink-plugin.html" target="_blank" title="Skydrive外链(wp-skydrive-outlink)插件">Skydrive外链(wp-skydrive-outlink)插件</a>》这里找到了高人编写的，通过分析那个不变的文件下载页面代码找出此时此刻该文件的外链地址的 WordPress 插件。</p>
<p>但是 <a href="http://xirang.us/2009/author/tim" target="_blank" title="Tim在嘻来嚷往上的所有文章">Tim</a> 在使用的时候发现了不尽人意的地方。原插件是通过搜索页面代码的如下内容：</p>
<div class="codecolorer-container html4strict dawn" style="overflow: auto; white-space: nowrap; width: 865px;">
<table cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="line-numbers">
<div>1</div>
</td>
<td>
<div class="html4strict codecolorer" style="white-space: nowrap;"><span class="sc2">&lt;<a href="http://december.com/html/4/element/a.html"><span class="kw2">a</span></a> <span class="kw3">href</span><span class="sy0">=</span><span class="st0">&quot;http&amp;#58;&amp;#47;&amp;#47;zmmbva.bay.livefilestore.com&amp;#47y1pIqCe7pRjb5SoIojzYoEoZwIWrS4ydWQbUfVTc9AzsqDWEPyeTDpBTN2zresvpobyBvHUv1ApuBAcoojvXGkYYg&amp;#47;Breath&amp;#37;20Under&amp;#37;20Water&amp;#37;20HQ.mp4&amp;#63;download&quot;</span> <span class="kw3">title</span><span class="sy0">=</span><span class="st0">&quot;Download&quot;</span>&gt;</span></div>
</td>
</tr>
</tbody>
</table>
</div>
<p>中的 title=&rdquo;Download&rdquo; 来截取外链地址。但是 <a class="toptip extlink" href="http://adf.ly/Omf" target="_blank">SkyDrive</a> 的页面语言会根据浏览器 Cookie 和浏览者 IP 地址而做出自动选择。如果浏览者的 Windows Live 语言设置为非英文，或者是浏览者从没登录过 Windows Live ，那么他所得到的这个下载页面的 title=&rdquo;Download&rdquo; 很可能就变成 title=&rdquo;下载&rdquo;、title=&rdquo;t&eacute;l&eacute;charger&rdquo;、title=&rdquo;ダウンロードする&rdquo; 等等等等，那么这个插件也就失效了。</p>
<p>	所以，<a href="http://xirang.us/2009/author/tim" target="_blank" title="Tim在嘻来嚷往上的所有文章">Tim</a>又瞧了瞧 <a class="toptip extlink" href="http://adf.ly/Omf" target="_blank">SkyDrive</a> 文件下载页面的源码，发现在靠近底部，有一段 javascript 代码：</p>
<div class="codecolorer-container javascript dawn" style="overflow: auto; white-space: nowrap; width: 865px;">
<table cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="line-numbers">
<div>1<br />
						2<br />
						3<br />
						4<br />
						5<br />
						6<br />
						7<br />
						8<br />
						9<br />
						10<br />
						11<br />
						12<br />
						13<br />
						14<br />
						15<br />
						16<br />
						17<br />
						18<br />
						19<br />
						20</div>
</td>
<td>
<div class="javascript codecolorer" style="white-space: nowrap;"><span class="kw2">var</span> $SelfPage <span class="sy0">=</span> <span class="kw2">new</span> <span class="kw2">function</span><span class="br0">(</span><span class="br0">)</span><br />
						<span class="br0">{</span><br />
						&nbsp; &nbsp; var_download <span class="sy0">=</span> <span class="st0">&#39;http<span class="es0">\x</span>3a<span class="es0">\x</span>2f<span class="es0">\x</span>2fzmmbva.bay.livefilestore.com<span class="es0">\x</span>2fy1pIqCe7pRjb5SoIojzYoEoZwIWrS4ydWQbUfVTc9AzsqDWEPyeTDpBTN2zresvpobyBvHUv1ApuBAcoojvXGkYYg<span class="es0">\x</span>2fBreath<span class="es0">\x</span>2520Under<span class="es0">\x</span>2520Water<span class="es0">\x</span>2520HQ.mp4<span class="es0">\x</span>3fdownload&#39;</span><span class="sy0">;</span><br />
						&nbsp; &nbsp; var_demote <span class="sy0">=</span> <span class="st0">&#39;http<span class="es0">\x</span>3a<span class="es0">\x</span>2f<span class="es0">\x</span>2fzmmbva.bay.livefilestore.com<span class="es0">\x</span>2fy1pIqCe7pRjb5SoIojzYoEoZwIWrS4ydWQbUfVTc9AzsqDWEPyeTDpBTN2zresvpobyBvHUv1ApuBAcoojvXGkYYg<span class="es0">\x</span>2fBreath<span class="es0">\x</span>2520Under<span class="es0">\x</span>2520Water<span class="es0">\x</span>2520HQ.mp4<span class="es0">\x</span>3fdownload&#39;</span><span class="sy0">;</span><br />
						&nbsp; &nbsp; var_dirty <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></p>
<p>						&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">MarkDirty</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> _dirty <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span> <span class="br0">}</span><br />
						&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">Download</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">(</span><span class="br0">)</span><br />
						&nbsp; &nbsp; <span class="br0">{</span><br />
						&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">(</span>_dirty<span class="br0">)</span><br />
						&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">{</span><br />
						&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _dirty <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span><br />
						&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; window.<span class="me1">location</span> <span class="sy0">=</span> _demote<span class="sy0">;</span><br />
						&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">}</span><br />
						&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
						&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">{</span><br />
						&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; window.<span class="me1">location</span> <span class="sy0">=</span> _download<span class="sy0">;</span><br />
						&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">}</span><br />
						&nbsp; &nbsp; <span class="br0">}</span><br />
						<span class="br0">}</span></div>
</td>
</tr>
</tbody>
</table>
</div>
<p>这个地方就是生成链接地址的函数，而且这个函数的内容不随页面语言和访问者 IP 地址的改变而改变。接着<a href="http://xirang.us/2009/author/tim" target="_blank" title="Tim在嘻来嚷往上的所有文章">Tim</a>就开始修改代码。本人对 PHP 一窍不通，还好 PHP 的字符串操作和 C++ 蛮像的，这里也只用修改一下搜寻字符串的地方，原作者其它那些代码对我来说是一本天书。修改后的地方是这样的：</p>
<div class="codecolorer-container php dawn" style="overflow: auto; white-space: nowrap; width: 865px;">
<table cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="line-numbers">
<div>1<br />
						2<br />
						3<br />
						4<br />
						5<br />
						6<br />
						7<br />
						8<br />
						9<br />
						10<br />
						11<br />
						12<br />
						13<br />
						14<br />
						15<br />
						16<br />
						17<br />
						18<br />
						19<br />
						20<br />
						21<br />
						22<br />
						23<br />
						24</div>
</td>
<td>
<div class="php codecolorer" style="white-space: nowrap;"><span class="kw2">function</span> skydrive_get_outlink<span class="br0">(</span><span class="re0">$url</span><span class="br0">)</span><br />
						<span class="br0">{</span><br />
						&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">(</span> IsAbsoluteUrl<span class="br0">(</span><span class="re0">$url</span><span class="br0">)</span> <span class="sy0">===</span> <span class="kw4">false</span> <span class="br0">)</span> <span class="br0">{</span><br />
						&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$url</span> <span class="sy0">=</span> <span class="re0">$sdoldefaulturl</span> <span class="sy0">.</span> <span class="re0">$url</span><span class="sy0">;</span><br />
						&nbsp; &nbsp; <span class="br0">}</span><br />
						&nbsp; &nbsp; <span class="re0">$body</span> <span class="sy0">=</span> ffox_get_http_body<span class="br0">(</span><span class="re0">$url</span><span class="br0">)</span><span class="sy0">;</span></p>
<p>						&nbsp; &nbsp; <span class="re0">$pos</span> <span class="sy0">=</span> <a href="http://www.php.net/stripos"><span class="kw3">stripos</span></a><span class="br0">(</span><span class="re0">$body</span><span class="sy0">,</span> <span class="st_h">&#39;var _demote&#39;</span><span class="br0">)</span><span class="sy0">;</span><br />
						&nbsp; &nbsp; <span class="re0">$body</span> <span class="sy0">=</span> <a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">(</span><span class="re0">$body</span><span class="sy0">,</span> 0<span class="sy0">,</span> <span class="re0">$pos</span><span class="br0">)</span><span class="sy0">;</span><br />
						&nbsp; &nbsp; <span class="re0">$startstr</span> <span class="sy0">=</span> <span class="st_h">&#39;var _download = \&#39;&#39;</span><span class="sy0">;</span><span class="co1">//Tim modified in version 0.3: to locate the start position of the outlink</span><br />
						&nbsp; &nbsp; <span class="re0">$endstr</span> <span class="sy0">=</span> <span class="st_h">&#39;\\x3f&#39;</span><span class="sy0">;</span><span class="co1">//Tim modified in version 0.3: to locate the end position of the outlink</span><br />
						&nbsp; &nbsp; <span class="re0">$start</span> <span class="sy0">=</span> <a href="http://www.php.net/strripos"><span class="kw3">strripos</span></a><span class="br0">(</span><span class="re0">$body</span><span class="sy0">,</span> <span class="re0">$startstr</span><span class="br0">)</span> <span class="sy0">+</span> <a href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">(</span><span class="re0">$startstr</span><span class="br0">)</span><span class="sy0">;</span><br />
						&nbsp; &nbsp; <span class="re0">$end</span> <span class="sy0">=</span> <a href="http://www.php.net/strripos"><span class="kw3">strripos</span></a><span class="br0">(</span><span class="re0">$body</span><span class="sy0">,</span> <span class="re0">$endstr</span><span class="br0">)</span><span class="sy0">;</span><br />
						&nbsp; &nbsp; <span class="re0">$outlink</span> <span class="sy0">=</span> <a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">(</span><span class="re0">$body</span><span class="sy0">,</span><span class="re0">$start</span><span class="sy0">,</span> <span class="re0">$end</span><span class="sy0">-</span><span class="re0">$start</span><span class="br0">)</span><span class="sy0">;</span><br />
						&nbsp; &nbsp; <span class="re0">$outlink</span> <span class="sy0">=</span> <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">(</span><span class="st_h">&#39;\\x3a&#39;</span><span class="sy0">,</span> <span class="st_h">&#39;:&#39;</span><span class="sy0">,</span> <span class="re0">$outlink</span><span class="br0">)</span><span class="sy0">;</span><span class="co1">//Tim added in version 0.3: to replace \x3a to :</span><br />
						&nbsp; &nbsp; <span class="re0">$outlink</span> <span class="sy0">=</span> <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">(</span><span class="st_h">&#39;\\x2f&#39;</span><span class="sy0">,</span> <span class="st_h">&#39;/&#39;</span><span class="sy0">,</span> <span class="re0">$outlink</span><span class="br0">)</span><span class="sy0">;</span><span class="co1">//Tim added in version 0.3 to replace \x2f to /</span><br />
						&nbsp; &nbsp; <span class="re0">$outlink</span> <span class="sy0">=</span> <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">(</span><span class="st_h">&#39;\\x25&#39;</span><span class="sy0">,</span> <span class="st_h">&#39;%&#39;</span><span class="sy0">,</span> <span class="re0">$outlink</span><span class="br0">)</span><span class="sy0">;</span><span class="co1">//Tim added in version 0.3 to replace \x25 to %</span><br />
						&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">(</span><span class="st0">&quot;/\&amp;amp;\#([0-9]+)\;/&quot;</span><span class="sy0">,</span> <span class="re0">$outlink</span><span class="sy0">,</span> <span class="re0">$acs</span><span class="br0">)</span><span class="sy0">;</span><br />
						&nbsp; &nbsp; <span class="re0">$acs</span> <span class="sy0">=</span> <span class="re0">$acs</span><span class="br0">[</span>1<span class="br0">]</span><span class="sy0">;</span><br />
						&nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">(</span><span class="re0">$acs</span> <span class="kw1">as</span> <span class="re0">$ac</span><span class="br0">)</span> <span class="br0">{</span><br />
						&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$outlink</span> <span class="sy0">=</span> <a href="http://www.php.net/preg_replace"><span class="kw3">preg_replace</span></a><span class="br0">(</span><span class="st0">&quot;/\&amp;amp;\#([0-9]+)\;/&quot;</span><span class="sy0">,</span> <a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">(</span><span class="re0">$ac</span><span class="br0">)</span><span class="sy0">,</span> <span class="re0">$outlink</span><span class="sy0">,</span>1<span class="br0">)</span><span class="sy0">;</span><br />
						&nbsp; &nbsp; <span class="br0">}</span><br />
						&nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$outlink</span><span class="sy0">;</span><br />
						<span class="br0">}</span></div>
</td>
</tr>
</tbody>
</table>
</div>
<p>这么一修改，插件运作地就很良好了，<a href="http://xirang.us/2009/author/tim" target="_blank" title="Tim在嘻来嚷往上的所有文章">Tim</a>用Firefox、Chrome、Safari、Opera、IE都做了测试，效果非常不错！《<a href="http://xirang.us/2009/2009/08/hq-collection-of-marie-digby-from-youtube" rel="bookmark" title="Permanent Link to This Article">Mair&eacute; Digby YouTube 官方站高清 MV 合集</a>》中的所有视频都是采用 <a class="toptip extlink" href="http://adf.ly/Omf" target="_blank">SkyDrive</a> 存储，此插件获得外链地址的，您可以点过去瞧瞧效果。怎么样，这个插件的确不错吧，那么请</p>
<h1 style="text-align: center;"><span style="color: rgb(255, 0, 0);"><a class="toptip extlink" href="http://adf.ly/13mE" target="_blank" title="WP-Skydrive-Outlink Tim Mod">点击下载（2010.1.1更新，请将下载的文件的后缀名改为.zip）</a></span></h1>
<p>在这里<a href="http://xirang.us/2009/author/tim" target="_blank" title="Tim在嘻来嚷往上的所有文章">Tim</a>要感谢<a href="http://mathelite.cn/" title="Flarefox"><strong>Flarefox </strong></a>，他的所做工作是开创性的，我只是站在<a href="http://mathelite.cn/" title="Flarefox"><strong>Flarefox </strong></a>的肩膀上对插件做了一点小小的修改，让它工作得更棒！请<strong><a href="http://mathelite.cn/" title="Flarefox"><strong>Flarefox</strong></a></strong>看到此修改版、并且觉得<a href="http://xirang.us/2009/author/tim" target="_blank" title="Tim在嘻来嚷往上的所有文章">Tim</a>修改的还不错后，将我的版本合并到你的官方版本中，以让更多人更好的享受这顿&ldquo;又免费又丰盛的午餐&rdquo;！</p>
<div style="clear:both">
<h3>著作权信息（站外使用本文请保留以下内容）</h3>
<hr size="2" />
<table width="100%">
<tbody>
<tr>
<td>文章作者：<a  href="http://xirang.us/author/tim">Tim</a><br />原始站点：<a title="嘻来嚷往" href="http://xirang.us/" target="_self">嘻来嚷往 &#8211; IF YOU SEE SOMETHING, SAY SOMETHING.</a><br />原文标题：SkyDrive 外链自动获取插件 WP-Skydrive-Outlink 完善版<br />发表日期：2009年08月07日<br />原文链接：<a href="http://xirang.us/2009/08/wordpress-skydrive-outlink-tim-mod" >http://xirang.us/2009/08/wordpress-skydrive-outlink-tim-mod</a></td>
<td class="author_img"><center><img alt='' src='http://0.gravatar.com/avatar/6f9a9d5526438d3a59313a2603020217?s=100&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D100&amp;r=R' class='avatar avatar-100 photo' height='100' width='100' /></center></td>
</tr>
<tr>
<td>版权协议：本作品采用<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/2.5/cn/" target="_blank">知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议</a>进行许可，作品中的文字和图像若非明确指出著作权归属则均受到该协议<a title="知识共享协议法律文本" href="http://creativecommons.org/licenses/by-nc-nd/2.5/cn/legalcode" target="_blank">法律文本</a>的保护。站外使用请严格遵守协议，<a href="http://xirang.us/" target="_self">嘻来嚷往</a>站保留诉诸法律的权利！如有异议请与站长<a title="联系我们" href="http://xirang.us/affairs" target="_self">联系</a>。</td>
<td><center><img src="http://i.creativecommons.org/l/by-nc-nd/2.5/cn/88x31.png" alt="BY-NC-ND" /></center></td>
</tr>
</tbody>
</table>
<hr size="2" /></div>
<p style="text-align:center"><a href="http://clustrmaps.com/counter/maps.php?url=http://xirang.us" id="clustrMapsLink" title="嘻来嚷往双站总独立IP访问量" target="_blank"><img src="http://clustrmaps.com/counter/index2.php?url=http://xirang.us" alt="" id="clustrMapsImg" /></a><img src="http://nojsstats.appspot.com/UA-9442677-1/xirang.us" alt="" /></p>
<img src="http://xirang.us/?ak_action=api_record_view&id=859&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xirang.us/2009/08/wordpress-skydrive-outlink-tim-mod/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
