<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel rdf:about="https://let.hatelabo.jp/htsign/rss">
    <link>https://let.hatelabo.jp/htsign/rss</link>
    <description></description>
    <title>Bookmarklets from htsign</title>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="https://let.hatelabo.jp/htsign/let/gYC-y8X0-sXmag"/>
        <rdf:li rdf:resource="https://let.hatelabo.jp/htsign/let/hJmc2dnm5_Q4"/>
        <rdf:li rdf:resource="https://let.hatelabo.jp/htsign/let/gYC-x9Owx5HoBA"/>
        <rdf:li rdf:resource="https://let.hatelabo.jp/htsign/let/gYC-x8Xzwej2Xw"/>
        <rdf:li rdf:resource="https://let.hatelabo.jp/htsign/let/gYC-x8astIrqSw"/>
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="https://let.hatelabo.jp/htsign/let/gYC-y8X0-sXmag">
    <link>https://let.hatelabo.jp/htsign/let/gYC-y8X0-sXmag</link>
    <dc:date>2016-10-08T17:11:46Z</dc:date>
    <description>httpやttpやtpなリンクのないURLにリンクを付ける（どこにでもあるやつだけど、標準技術のみで実装している自己満足ver）</description>
    <dc:creator>htsign</dc:creator>
    <title>[Let] リンク化</title>
    <content:encoded>&lt;a href="javascript:%22https%3A%2F%2Flet.st-hatelabo.com%2Fhtsign%2Flet%2FgYC-y8X0-sXmag.bookmarklet.js%20%28arg%29%22.replace%28%2F%28%5CS%2B%29%5Cs%2B%28%5CS%2A%29%2F%2Cfunction%28s%2Curl%2Carg%29%7Bs%3Ddocument.createElement%28%22script%22%29%3Bs.charset%3D%22utf-8%22%3Bs.src%3Durl%2B%22%3Fs%3D%22%2BencodeURIComponent%28arg%29%3Bdocument.body.appendChild%28s%29%7D%29%3Bvoid%280%29%3B"&gt;リンク化&lt;/a&gt;&lt;pre&gt;/*
 * @title リンク化
 * @description httpやttpやtpなリンクのないURLにリンクを付ける（どこにでもあるやつだけど、標準技術のみで実装している自己満足ver）
 * @include http://*
 * @license MIT License
 */


// 【最近の変更】
// ・正規表現を更に少し変更
// ・httpsのURLに対応
// ・scriptタグの中身は変更しないようにした（誤爆しやすいみたいなので）
// ・構造を大幅に変更

(function() {
    
    var ElementFactory = (function() {
        function ElementFactory(tagName, attrs) {
            this.template = document.createElement(tagName);
            for (var i = 0; i &amp;lt; attrs.length; ++i) {
                var attr = attrs[i].attr, value = attrs[i].value;
                this.template[attr] = value;
            }
        }
        ElementFactory.prototype.create = function(attrs) {
            var elem = this.template.cloneNode(true);
            for (var i = 0; i &amp;lt; attrs.length; ++i) {
                var attr = attrs[i].attr, value = attrs[i].value;
                elem[attr] = value;
            }
            return elem;
        };
        return ElementFactory;
    })();
    
    
    var pattern = /(?:h?t?tp(s?):\/\/(?:[\w-]+|[^ -~｡-ﾟ]+)\.[a-zA-Z]{2,4}[^\s　&amp;quot;']*)|(?:[^/\s&amp;quot;'(（「【『]*?(?:[\w-]+|[^ -~｡-ﾟ]+)\.(?:com|org|net|edu|gov|jp|to|tv|fm|info|(?:co|or|ne|ac|go)\.(?:jp|uk|fr|de))[^\s　&amp;quot;')）」】』]*)/g;
    var anchorFactory = new ElementFactory(&amp;quot;a&amp;quot;, [{ attr: &amp;quot;target&amp;quot;, value: &amp;quot;_blank&amp;quot; }]);
    
    convertTextToLink(document.body);
    
    
    function convertTextToLink(rootNode) {
        var filter = function(node) {
            var isAnchorOrScript = node.parentNode &amp;amp;&amp;amp; [&amp;quot;A&amp;quot;, &amp;quot;SCRIPT&amp;quot;].indexOf(node.parentNode.nodeName) !== -1;
            return isAnchorOrScript ? NodeFilter.FILTER_SKIP : NodeFilter.FILTER_ACCEPT;
        };
        var iter  = document.createNodeIterator(rootNode, NodeFilter.SHOW_TEXT, filter, false);
        var range = document.createRange();
        
        var current;
        while (current = iter.nextNode()) {
            var getPathname = function(url) {
                var pattern2 = /:\/\//g;
                return pattern2.exec(url) ? url.slice(pattern2.lastIndex) : url;
            };
            var regRes, matchStack = [];
            
            while (regRes = pattern.exec(current.data)) { // マッチがなくなるまでループしてスタック
                matchStack.push({
                    mUrl   : &amp;quot;http&amp;quot; + (regRes[1] || &amp;quot;&amp;quot;) + &amp;quot;://&amp;quot; + getPathname(regRes[0]),
                    pStart : regRes.index,
                    pEnd   : pattern.lastIndex,
                });
            }
            while (matchStack.length &amp;gt; 0) { // 後ろから1つずつ取り出して変更を適用
                var item = matchStack.pop();
                var a = anchorFactory.create([{ attr: &amp;quot;href&amp;quot;, value: item.mUrl }]);
                
                range.setStart (current, item.pStart);
                range.setEnd   (current, item.pEnd  );
                range.surroundContents(a);
            }
        }
        range.detach();
    }
    
})();
&lt;/pre&gt;</content:encoded>
  </item>
  <item rdf:about="https://let.hatelabo.jp/htsign/let/hJmc2dnm5_Q4">
    <link>https://let.hatelabo.jp/htsign/let/hJmc2dnm5_Q4</link>
    <dc:date>2013-12-07T15:24:53Z</dc:date>
    <description>Wikiやブログ等の検索システムのあるCMSで作られたコンテンツ内で文字列を選択したときに、その文字列でサイト内を検索するボタンを作ります。</description>
    <dc:creator>htsign</dc:creator>
    <title>[Let] searchWiki.js</title>
    <content:encoded>&lt;a href="javascript:%22https%3A%2F%2Flet.st-hatelabo.com%2Fhtsign%2Flet%2FhJmc2dnm5_Q4.bookmarklet.js%20%28arg%29%22.replace%28%2F%28%5CS%2B%29%5Cs%2B%28%5CS%2A%29%2F%2Cfunction%28s%2Curl%2Carg%29%7Bs%3Ddocument.createElement%28%22script%22%29%3Bs.charset%3D%22utf-8%22%3Bs.src%3Durl%2B%22%3Fs%3D%22%2BencodeURIComponent%28arg%29%3Bdocument.body.appendChild%28s%29%7D%29%3Bvoid%280%29%3B"&gt;searchWiki.js&lt;/a&gt;&lt;pre&gt;/**
 * @title searchWiki.js
 * @description Wikiやブログ等の検索システムのあるCMSで作られたコンテンツ内で文字列を選択したときに、その文字列でサイト内を検索するボタンを作ります。
 *              別ブラウザ向けの拡張として作った物をほぼ丸コピペです。
 * @include *
 * @license MIT License
 */

// thanks for 商用利用可のWEB素材が無料な素材屋
// http://ec-sozai.net/


(function(global){
	var ID_PREFIX = &amp;quot;UserExtension_searchWiki_&amp;quot;,
		POSITION_GAP_X = 16,
		POSITION_GAP_Y = 16;
	
	var mouseDownFlag = false,
		mouseDragFlag = false,
		siteName = &amp;quot;&amp;quot;,
		selectedText = &amp;quot;&amp;quot;;
	
	/**
	 * テキストが選択されているかどうかを確認する
	 * @returns	{Boolean}		選択されていたらtrue
	 */
	var checkSelection = function(){
		selectedText = global.getSelection ? global.getSelection().toString()
		: document.selection ? document.selection.createRange().text
		: &amp;quot;&amp;quot;;
		return selectedText !== &amp;quot;&amp;quot;;
	}
	
	
	// ecl.js 読み込み
	loadEclJS();
	
	
	// イベント登録
	addEvent(document, &amp;quot;mousedown&amp;quot;, function(){
		mouseDownFlag = true;
		mouseDragFlag = false;
	});
	addEvent(document, &amp;quot;mouseup&amp;quot;, function(event){
		var mousePos = null;
		
		// ドラッグされていたらテキストが選択されているかどうかを確認
		if (mouseDragFlag &amp;amp;&amp;amp; checkSelection()) {
			mousePos = getMousePosition(event);
			global.setTimeout(function(){
				viewButton(mousePos.x, mousePos.y);
			}, 0);
		}
		mouseDownFlag = false;
		mouseDragFlag = false;
	});
	addEvent(document, &amp;quot;mousemove&amp;quot;, function(){
		if (mouseDownFlag) {
			mouseDragFlag = true;
		}
		else {
			mouseDragFlag = false;
		}
	});
	addEvent(document, &amp;quot;dblclick&amp;quot;, function(event){
		var mousePos = null;
		
		if (checkSelection()) {
			mousePos = getMousePosition(event);
			global.setTimeout(function(){
				viewButton(mousePos.x, mousePos.y);
			}, 0);
		}
		mouseDragFlag = false;
	});
	
	
	/**
	 * マウスの座標を取得する
	 * @param	{Object}	event	イベントオブジェクト
	 * @returns	{Object}			マウス座標
	 */
	function getMousePosition(event){
		var pos = {};
		pos.x = event.pageX || document.body.scrollLeft + event.clientX;
		pos.y = event.pageY || document.body.scrollTop  + event.clientY;
		return pos;
	}
	
	/**
	 * 検索ボタンを表示する
	 * @param	{Number}	x	マウスのX座標
	 * @param	{Number}	y	マウスのY座標
	 */
	function viewButton(x, y){
		var button, image, url, s;
		
		url = getHypertextReference();
		if (!url) return; // 文字列を取得できなかった場合は実行しない
		
		// ゴミが残っている場合は削除してから実行する
		if (document.getElementById(ID_PREFIX + &amp;quot;button&amp;quot;)) {
			removeButton();
		}
		
		button = document.createElement(&amp;quot;a&amp;quot;);
		image  = document.createElement(&amp;quot;img&amp;quot;);
		s = button.style;
		
		x += POSITION_GAP_X;
		y += POSITION_GAP_Y;
		
		button.id = ID_PREFIX + &amp;quot;button&amp;quot;;
		s.display = &amp;quot;block&amp;quot;;
		s.position = &amp;quot;absolute&amp;quot;;
		s.left = x + &amp;quot;px&amp;quot;;
		s.top  = y + &amp;quot;px&amp;quot;;
		s.padding = 0;
		s.border = 0;
		s.outline = 0;
		s.lineHeight = &amp;quot;0&amp;quot;;
		s.textDecoration = &amp;quot;none&amp;quot;;
		s.opacity = .3;
		s.transition = &amp;quot;200ms opacity ease&amp;quot;;
		
		button.href = url;
		button.onmouseover = function(){
			s.opacity = &amp;quot;1&amp;quot;;
		};
		button.onmouseout = function(){
			s.opacity = &amp;quot;.3&amp;quot;;
		};
		button.onblur = function(){
			removeButton();
		}
		
		image.id  = ID_PREFIX + &amp;quot;image&amp;quot;;
		image.alt = &amp;quot;search&amp;quot;;
		image.title = &amp;quot;検索&amp;quot;;
		image.src = 'data:image/png;base64,'+
'iVBORw0KGgoAAAANSUhEUgAAABsAAAAaCAYAAABGiCfwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz'+
'AAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwMy8xOS8xMQFBmhAAAAAYdEVYdFNv'+
'ZnR3YXJlAEFkb2JlIEZpcmV3b3Jrc0+zH04AAAKhSURBVEiJvZbNThNhFIafmWJbCnGItA6dJi5q'+
'II2sbEkEpLATgkgicSNb0ivwDrwDNi4KJm7ENGBM4QrABDCBlA2GFUaEaac/gYIlpaUzLrRFIi2l'+
'aX1X8805b57vzJzzzQiGYTDzdqYVeAOMAA7qq2/Au8BU4LXwB/YemARwuVx1JR0cHBQvXwnB2eAd'+
'IA6YXC7X38F6a1MEWv8DCMDRVG2m1WrFYXdQ0AskEgny+fyNadfCnB1O/AN+JEm6dD+mxVj5vEI6'+
'na4aJlYK+rw+xp6OIUkS2WyW/f191KhKPp+nQ+5g4vkEXZ1dVcPKVuZ2u/E+9AIQ2YqwsblxsUNR'+
'xD/gp6uzi0H/IOl0Gi2u1VaZIAj0PuoFYHVt9RIIQNd1lleW2dnZQRAEfF5fFXWVgcl3ZVpsLWia'+
'xvbX7bLmtfU1ABRFwWKx1AYrNsNR+qii+bxwjhpVEQSB9vb22mCN0pWwYju3SW0VzU2mJhSngmEY'+
'pFKp2mBaXCNzmkGWZbofdJc19/X2AaCqKmdnZ7XBDMNg/cs6AP19/fgf+y+bRJGhwSE8Hg8AUS16'+
'LQgqzNnu7i7SbQmf14fH48F9300ymcQkmnA4HIjixT57vD2kkin2fuzdvLKiIlsRwkthUqkU5ltm'+
'FKeCLMuIooiqqoSXwqXc4SfDKIpSESYEZ4P3gO/Xnfpmsxm73Y5e0Ikn4ui6DkCLrYXJl5OlvMWl'+
'xXKnyV7VrZ/L5VBVlZgWK4EAMqcZ5j7Mldbjz8bLzlxd5ixzmiE0HyqtR0dGsTXbGgMDOD4+ZuHj'+
'AtlsFqvVSrOt+Z+cqj+e1ejw6JDQfAiLxcLJyUljYfD73eZyuStjIhADcg3+/wBIiIGpQA4INpoE'+
'TBcf4yvgAHjRAMhPYDowFfj0C3Y89OFebIQWAAAAAElFTkSuQmCC';
		
		button.appendChild(image);
		document.body.appendChild(button);
		button.focus();
	}
	/**
	 * 検索ボタンを削除する
	 */
	function removeButton() {
		var button = document.getElementById(ID_PREFIX + &amp;quot;button&amp;quot;);
		if (button) {
			document.body.removeChild(button);
		}
	}
	/**
	 * 現在閲覧中のサイトのタイプを検出する
	 * @param	{String}	hostname	ドメイン
	 * @returns	{String}				サイトのID
	 */
	function getSiteName(hostname){
		if (hostname) {
			// Wikipedia
			if (/wikipedia\.org$/.test(hostname)) {
				return &amp;quot;wikipedia&amp;quot;;
			}
			// @wiki
			else if (/atwiki\.jp$/.test(hostname)) {
				return &amp;quot;@wiki&amp;quot;;
			}
			// FC2 WIKI
			else if (/wiki\.fc2\.com$/.test(hostname)) {
				return &amp;quot;fc2Wiki&amp;quot;;
			}
			// WIKIWIKI
			else if (hostname === &amp;quot;wikiwiki.jp&amp;quot;) {
				return &amp;quot;wikiwiki&amp;quot;;
			}
			// Seesaa Wiki
			else if (hostname === &amp;quot;w.livedoor.jp&amp;quot; || hostname === &amp;quot;wiki.livedoor.jp&amp;quot;) {
				return &amp;quot;seesaaWiki&amp;quot;;
			}
			
			// アメブロ
			else if (hostname === &amp;quot;ameblo.jp&amp;quot;) {
				return &amp;quot;ameblo&amp;quot;;
			}
			// Livedoor Blog
			else if (!!global.ld_blog_vars) {
				return &amp;quot;livedoorBlog&amp;quot;;
			}
			// JUGEM
			else if (/jugem\.jp$/.test(hostname)) {
				return &amp;quot;jugem&amp;quot;;
			}
			// FC2ブログ
			else if (/blog\d*?\.fc2\.com$/.test(hostname)) {
				return &amp;quot;fc2Blog&amp;quot;;
			}
			// はてなダイアリー
			else if (!!global.Hatena &amp;amp;&amp;amp;
					 !!Hatena.Diary &amp;amp;&amp;amp;
					 Hatena.Diary.BaseURL === &amp;quot;http://d.hatena.ne.jp/&amp;quot;) {
				return &amp;quot;hatenaDiary&amp;quot;;
			}
			// はてなブログ
			else if (!!global.Hatena &amp;amp;&amp;amp;
					 !!Hatena.Diary &amp;amp;&amp;amp;
					 !!Hatena.Diary.AppAPI) {
				return &amp;quot;hatenaBlog&amp;quot;;
			}
			
			// はてなキーワード
			else if (!!global.Hatena &amp;amp;&amp;amp;
					 !!Hatena.Keyword) {
				return &amp;quot;hatenaKeyword&amp;quot;;
			}
			// Mozilla Developer Network
			else if (hostname === &amp;quot;developer.mozilla.org&amp;quot;) {
				return &amp;quot;mdn&amp;quot;;
			}
		}
		return &amp;quot;&amp;quot;;
	}
	/**
	 * 検索ボタンで遷移する先のURLを返す
	 * @returns	{String}		URL
	 */
	function getHypertextReference(){
		
		var hostname = global.location.hostname,
			text = encode(selectedText);
		
		siteName = siteName || getSiteName(hostname);
		
		switch (siteName) {
			case &amp;quot;wikipedia&amp;quot;:
				return &amp;quot;/w/index.php?search=&amp;quot; + text;
			case &amp;quot;@wiki&amp;quot;:
				return &amp;quot;?cmd=search&amp;amp;keyword=&amp;quot; + text;
			case &amp;quot;fc2Wiki&amp;quot;:
				return &amp;quot;/?cmd=search&amp;amp;q=&amp;quot; + text;
			case &amp;quot;wikiwiki&amp;quot;:
				return &amp;quot;?encode_hint=%A4%D7&amp;amp;cmd=search&amp;amp;word=&amp;quot; + text;
			case &amp;quot;seesaaWiki&amp;quot;:
				return &amp;quot;/&amp;quot; + global.location.pathname.split(&amp;quot;/&amp;quot;)[1] + &amp;quot;/search?keywords=&amp;quot; + text;
			
			case &amp;quot;ameblo&amp;quot;:
				return &amp;quot;http://search.ameba.jp/search.html?q=&amp;quot; + text + &amp;quot;&amp;amp;aid=&amp;quot; + global.location.pathname.split(&amp;quot;/&amp;quot;)[1];
			case &amp;quot;livedoorBlog&amp;quot;:
				return &amp;quot;/&amp;quot; + (hostname === &amp;quot;blog.livedoor.jp&amp;quot;
					? (global.location.pathname.split(&amp;quot;/&amp;quot;)[1] + &amp;quot;/&amp;quot;)
					: &amp;quot;&amp;quot;) + &amp;quot;search?q=&amp;quot; + text;
			case &amp;quot;jugem&amp;quot;:
				return &amp;quot;/?search=&amp;quot; + text;
			case &amp;quot;fc2Blog&amp;quot;:
				return &amp;quot;/?q=&amp;quot; + text;
			case &amp;quot;hatenaDiary&amp;quot;:
				return &amp;quot;/&amp;quot; + global.location.pathname.split(&amp;quot;/&amp;quot;)[1] + &amp;quot;/searchdiary?word=&amp;quot; + text;
			case &amp;quot;hatenaBlog&amp;quot;:
				return &amp;quot;/search?q=&amp;quot; + text;
			
			case &amp;quot;hatenaKeyword&amp;quot;:
				return &amp;quot;http://search.hatena.ne.jp/search?word=&amp;quot; + text;
			case &amp;quot;mdn&amp;quot;:
				return &amp;quot;/ja/search?q=&amp;quot; + text;
			
			// いずれにも該当しない場合はとりあえずGoogleとかBingとかで検索
			default:
				//return &amp;quot;http://www.google.co.jp/search?q=&amp;quot; +
				//	encodeURIComponent(selectedText) + &amp;quot;+site%3A&amp;quot; + hostname;
				return &amp;quot;http://www.bing.com/search?q=&amp;quot; +
					encodeURIComponent(selectedText) + &amp;quot;+site%3A&amp;quot; + hostname;
		}
	}
	
	/**
	 * encodeTypeを元に文字列をURLエンコードする
	 * @param	{String}	string	変換させる文字列
	 * @returns	{String}			変換された文字列
	 */
	function encode(string){
		var charset = document.characterSet || document.charset;
		
		switch(charset.toLowerCase()) {
			case &amp;quot;euc-jp&amp;quot;:
				return EscapeEUCJP(string);
			case &amp;quot;shift_jis&amp;quot;:
				return EscapeSJIS(string);
			case &amp;quot;utf-8&amp;quot;:
			default:
				return encodeURIComponent(string);
		}
	}
	
	/**
	 * DOMオブジェクトにイベントを追加する
	 * @param	{Object}	target		イベントを適用するオブジェクト
	 * @param	{Object}	eventType	イベントオブジェクト
	 * @param	{Function}	func		実行する関数
	 */
	function addEvent(target, eventType, func){
		if (target.addEventListener) {
			target.addEventListener(eventType, func, false);
		}
		else if (target.attachEvent) {
			target.attachEvent(&amp;quot;on&amp;quot; + eventType, func);
		}
		else if (typeof target[&amp;quot;on&amp;quot; + eventType] === &amp;quot;object&amp;quot;) {
			target[&amp;quot;on&amp;quot; + eventType] = func;
		}
	}
	
	//
	// Escape Codec Library: ecl.js (Ver.041208)
	//
	// Copyright (C) http://nurucom-archives.hp.infoseek.co.jp/digital/
	//
	function loadEclJS(){
		var JCT11280=Function('var a=&amp;quot;zKV33~jZ4zN=~ji36XazM93y!{~k2y!o~k0ZlW6zN?3Wz3W?{EKzK[33[`y|;-~j^YOTz$!~kNy|L1$353~jV3zKk3~k-4P4zK_2+~jY4y!xYHR~jlz$_~jk4z$e3X5He&amp;lt;0y!wy|X3[:~l|VU[F3VZ056Hy!nz/m1XD61+1XY1E1=1y|bzKiz!H034zKj~mEz#c5ZA3-3X$1~mBz$$3~lyz#,4YN5~mEz#{ZKZ3V%7Y}!J3X-YEX_J(3~mAz =V;kE0/y|F3y!}~m&amp;gt;z/U~mI~j_2+~mA~jp2;~m@~k32;~m&amp;gt;V}2u~mEX#2x~mBy+x2242(~mBy,;2242(~may-&amp;gt;2&amp;amp;XkG2;~mIy-_2&amp;amp;NXd2;~mGz,{4&amp;lt;6:.:B*B:XC4&amp;gt;6:.&amp;gt;B*BBXSA+A:X]E&amp;amp;E&amp;lt;~r#z+625z s2+zN=`HXI@YMXIAXZYUM8X4K/:Q!Z&amp;amp;33 3YWX[~mB`{zKt4z (zV/z 3zRw2%Wd39]S11z$PAXH5Xb;ZQWU1ZgWP%3~o@{Dgl#gd}T){Uo{y5_d{e@}C(} WU9|cB{w}bzvV|)[} H|zT}d||0~{]Q|(l{|x{iv{dw}(5}[Z|kuZ }cq{{y|ij}.I{idbof%cu^d}Rj^y|-M{ESYGYfYsZslS`?ZdYO__gLYRZ&amp;amp;fvb4oKfhSf^d&amp;lt;Yeasc1f&amp;amp;a=hnYG{QY{D`Bsa|u,}Dl|_Q{C%xK|Aq}C&amp;gt;|c#ryW=}eY{L+`)][YF_Ub^h4}[X|?r|u_ex}TL@YR]j{SrXgo*|Gv|rK}B#mu{R1}hs|dP{C7|^Qt3|@P{YVV |8&amp;amp;}#D}ef{e/{Rl|&amp;gt;Hni}R1{Z#{D[}CQlQ||E}[s{SG_+i8eplY[=[|ec[$YXn#`hcm}YR|{Ci(_[ql|?8p3]-}^t{wy}4la&amp;amp;pc|3e{Rp{LqiJ],] `kc(]@chYnrM`O^,ZLYhZB]ywyfGY~aex!_Qww{a!|)*lHrM{N+n&amp;amp;YYj~Z b c#e_[hZSon|rOt`}hBXa^i{lh|&amp;lt;0||r{KJ{kni)|x,|0auY{D!^Sce{w;|@S|cA}Xn{C1h${E]Z-XgZ*XPbp]^_qbH^e[`YM|a||+=]!Lc}]vdBc=j-YSZD]YmyYLYKZ9Z&amp;gt;Xcczc2{Yh}9Fc#Z.l{}(D{G{{mRhC|L3b#|xK[Bepj#ut`H[,{E9Yr}1b{[e]{ZFk7[ZYbZ0XL]}Ye[(`d}c!|*y`Dg=b;gR]Hm=hJho}R-[n}9;{N![7k_{UbmN]rf#pTe[x8}!Qcs_rs[m`|&amp;gt;N}^V})7{^r|/E}),}HH{OYe2{Skx)e&amp;lt;_.cj.cjoMhc^d}0uYZd!^J_@g,[[[?{i@][|3S}Yl3|!1|eZ|5IYw|1D}e7|Cv{OHbnx-`wvb[6[4} =g+k:{C:}ed{S]|2M]-}WZ|/q{LF|dYu^}Gs^c{Z=}h&amp;gt;|/i|{W]:|ip{N:|zt|S&amp;lt;{DH[p_tvD{N&amp;lt;[8Axo{X4a.^o^X&amp;gt;Yfa59`#ZBYgY~_t^9`jZHZn`&amp;gt;G[oajZ;X,i)Z.^~YJe ZiZF^{][[#Zt^|]Fjx]&amp;amp;_5dddW]P0C[-]}]d|y {C_jUql] |OpaA[Z{lp|rz}:Mu#]_Yf6{Ep?f5`$[6^D][^u[$[6^.Z8]]ePc2U/=]K^_+^M{q*|9tYuZ,s(dS{i=|bNbB{uG}0jZOa:[-]dYtu3]:]&amp;lt;{DJ_SZIqr_`l=Yt`gkTnXb3d@kiq0a`Z{|!B|}e}Ww{Sp,^Z|0&amp;gt;_Z}36|]A|-t}lt{R6pi|v8hPu#{C&amp;gt;YOZHYmg/Z4nicK[}hF_Bg|YRZ7c|crkzYZY}_iXcZ.|)U|L5{R~qi^Uga@Y[xb}&amp;amp;qdbd6h5|Btw[}c&amp;lt;{Ds53[Y7]?Z&amp;lt;|e0{L[ZK]mXKZ#Z2^tavf0`PE[OSOaP`4gi`qjdYMgys/?[nc,}EEb,eL]g[n{E_b/vcvgb.{kcwi`~v%|0:|iK{Jh_vf5lb}KL|(oi=LrzhhY_^@`zgf[~g)[J_0fk_V{T)}I_{D&amp;amp;_/d9W/|MU[)f$xW}?$xr4&amp;lt;{Lb{y4}&amp;amp;u{XJ|cm{Iu{jQ}CMkD{CX|7A}G~{kt)nB|d5|&amp;lt;-}WJ}@||d@|Iy}Ts|iL|/^|no|0;}L6{Pm]7}$zf:|r2}?C_k{R(}-w|`G{Gy[g]bVje=_0|PT{^Y^yjtT[[[l!Ye_`ZN]@[n_)j3nEgMa]YtYpZy].d-Y_cjb~Y~[nc~sCi3|zg}B0}do{O^{|$`_|D{}U&amp;amp;|0+{J3|8*]iayx{a{xJ_9|,c{Ee]QXlYb]$[%YMc*]w[aafe]aVYi[fZEii[xq2YQZHg]Y~h#|Y:thre^@^|_F^CbTbG_1^qf7{L-`VFx Zr|@EZ;gkZ@slgko`[e}T:{Cu^pddZ_`yav^Ea+[#ZBbSbO`elQfLui}.F|txYcbQ`XehcGe~fc^RlV{D_0ZAej[l&amp;amp;jShxG[ipB_=u:eU}3e8[=j|{D(}dO{Do[BYUZ0/]AYE]ALYhZcYlYP/^-^{Yt_1_-;YT`P4BZG=IOZ&amp;amp;]H[e]YYd[9^F[1YdZxZ?Z{Z&amp;lt;]Ba2[5Yb[0Z4l?]d_;_)a?YGEYiYv`_XmZs4ZjY^Zb]6gqGaX^9Y}dXZr[g|]Y}K aFZp^k^F]M`^{O1Ys]ZCgCv4|E&amp;gt;}8eb7}l`{L5[Z_faQ|c2}Fj}hw^#|Ng|B||w2|Sh{v+[G}aB|MY}A{|8o}X~{E8paZ:]i^Njq]new)`-Z&amp;gt;haounWhN}c#{DfZ|fK]KqGZ=:u|fqoqcv}2ssm}.r{]{nIfV{JW)[K|,Z{Uxc|]l_KdCb%]cfobya3`p}G^|LZiSC]U|(X|kBlVg[kNo({O:g:|-N|qT}9?{MBiL}Sq{`P|3a|u.{Uaq:{_o|^S}jX{Fob0`;|#y_@[V[K|cw[&amp;lt;_ }KU|0F}d3|et{Q7{LuZttsmf^kYZ`Af`}$x}U`|Ww}d]| &amp;gt;}K,r&amp;amp;|XI|*e{C/a-bmr1fId4[;b&amp;gt;tQ_:]hk{b-pMge]gfpo.|(w[jgV{EC1Z,YhaY^q,_G[c_g[J0YX]`[h^hYK^_Yib,` {i6vf@YM^hdOKZZn(jgZ&amp;gt;bzSDc^Z%[[o9[2=/YHZ(_/Gu_`*|8z{DUZxYt^vuvZjhi^lc&amp;amp;gUd4|&amp;lt;UiA`z]$b/Z?l}YI^jaHxe|;F}l${sQ}5g}hA|e4}?o{ih}Uz{C)jPe4]H^J[Eg[|AMZMlc}:,{iz}#*|gc{Iq|/:|zK{l&amp;amp;}#u|myd{{M&amp;amp;v~nV};L|(g|I]ogddb0xsd7^V})$uQ{HzazsgxtsO^l}F&amp;gt;ZB]r|{7{j@cU^{{CbiYoHlng]f+nQ[bkTn/}&amp;lt;-d9q {KXadZYo+n|l[|lc}V2{[a{S4Zam~Za^`{HH{xx_SvF|ak=c^[v^7_rYT`ld@]:_ub%[$[m](Shu}G2{E.ZU_L_R{tz`vj(f?^}hswz}GdZ}{S:h`aD|?W|`dgG|if{a8|J1{N,}-Ao3{H#{mfsP|[ bzn+}_Q{MT{u4kHcj_q`eZj[8o0jy{p7}C|[}l){MuYY{|Ff!Ykn3{rT|m,^R|,R}$~Ykgx{P!]&amp;gt;iXh6[l[/}Jgcg{JYZ.^qYfYIZl[gZ#Xj[Pc7YyZD^+Yt;4;`e8YyZVbQ7YzZxXja.7SYl[s]2^/Ha$[6ZGYrb%XiYdf2]H]kZkZ*ZQ[ZYS^HZXcCc%Z|[(bVZ]]:OJQ_DZCg&amp;lt;[,]%Zaa [g{C00HY[c%[ChyZ,Z_`PbXa+eh`^&amp;amp;jPi0a[ggvhlekL]w{Yp^v}[e{~;k%a&amp;amp;k^|nR_z_Qng}[E}*Wq:{k^{FJZpXRhmh3^p&amp;gt;de^=_7`|ZbaAZtdhZ?n4ZL]u`9ZNc3g%[6b=e.ZVfC[ZZ^^^hD{E(9c(kyZ=bb|Sq{k`|vmr&amp;gt;izlH[u|e`}49}Y%}FT{[z{Rk}Bz{TCc/lMiAqkf(m$hDc;qooi[}^o:c^|Qm}a_{mrZ(pA`,}&amp;lt;2sY| adf_%|}`}Y5U;}/4|D&amp;gt;|$X{jw{C&amp;lt;|F.hK|*A{MRZ8Zsm?imZm_?brYWZrYx`yVZc3a@f?aK^ojEd {bN}/3ZH]/$YZhm^&amp;amp;j 9|(S|b]mF}UI{q&amp;amp;aM]LcrZ5^.|[j`T_V_Gak}9J[ ZCZD|^h{N9{~&amp;amp;[6Zd{}B}2O|cv]K}3s}Uy|l,fihW{EG`j_QOp~Z$F^zexS`dcISfhZBXP|.vn|_HYQ|)9|cr]&amp;lt;`&amp;amp;Z6]m_(ZhPcSg&amp;gt;`Z]5`~1`0Xcb4k1{O!bz|CN_T{LR|a/gFcD|j&amp;lt;{Z._[f)mPc:1`WtIaT1cgYkZOaVZOYFrEe[}T$}Ch}mk{K-^@]fH{Hdi`c*Z&amp;amp;|Kt{if[C{Q;{xYB`dYIX:ZB[}]*[{{p9|4GYRh2ao{DS|V+[zd$`F[ZXKadb*A] Ys]Maif~a/Z2bmclb8{Jro_rz|x9cHojbZ{GzZx_)]:{wAayeDlx}&amp;lt;=`g{H1{l#}9i|)=|lP{Qq}.({La|!Y{i2EZfp=c*}Cc{EDvVB|;g}2t{W4av^Bn=]ri,|y?|3+}T*ckZ*{Ffr5e%|sB{lx^0]eZb]9[SgAjS_D|uHZx]dive[c.YPkcq/}db{EQh&amp;amp;hQ|eg}G!ljil|BO]X{Qr_GkGl~YiYWu=c3eb}29v3|D|}4i||.{Mv})V{SP1{FX}CZW6{cm|vO{pS|e#}A~|1i}81|Mw}es|5[}3w{C`h9aL]o{}p[G`&amp;gt;i%a1Z@`Ln2bD[$_h`}ZOjhdTrH{[j_:k~kv[Sdu]CtL}41{I |[[{]Zp$]XjxjHt_eThoa#h&amp;gt;sSt8|gK|TVi[Y{t=}Bs|b7Zpr%{gt|Yo{CS[/{iteva|cf^hgn}($_c^wmb^Wm+|55jrbF|{9^ q6{C&amp;amp;c+ZKdJkq_xOYqZYSYXYl`8]-cxZAq/b%b*_Vsa[/Ybjac/OaGZ4fza|a)gY{P?| I|Y |,pi1n7}9bm9ad|=d{aV|2@[(}B`d&amp;amp;|Uz}B}{`q|/H|!JkM{FU|CB|.{}Az}#P|lk}K{|2rk7{^8^?`/|k&amp;gt;|Ka{Sq}Gz}io{DxZh[yK_#}9&amp;lt;{TRdgc]`~Z&amp;gt;JYmYJ]|`!ZKZ]gUcx|^E[rZCd`f9oQ[NcD_$ZlZ;Zr}mX|=!|$6ZPZYtIo%fj}CpcN|B,{VDw~gb}@hZg`Q{LcmA[(bo`&amp;lt;|@$|o1|Ss}9Z_}tC|G`{F/|9nd}i=}V-{L8aaeST]daRbujh^xlpq8|}zs4bj[S`J|]?G{P#{rD{]I`OlH{Hm]VYuSYUbRc*6[j`8]pZ[bt_/^Jc*[&amp;lt;Z?YE|Xb|?_Z^Vcas]h{t9|Uwd)_(=0^6Zb{Nc} E[qZAeX[a]P^|_J&amp;gt;e8`W^j_Y}R{{Jp__]Ee#e:iWb9q_wKbujrbR}CY`,{mJ}gz{Q^{t~N|? gSga`V_||:#mi}3t|/I`X{N*|ct|2g{km}gi|{={jC}F;|E}{ZZjYf*frmu}8Tdroi{T[|+~}HG{cJ}DM{Lp{Ctd&amp;amp;}$hi3|FZ| m}Kr|38}^c|m_|Tr{Qv|36}?Up&amp;gt;|;S{DV{k_as}BK{P}}9p|t`jR{sAm4{D=b4pWa[}Xi{EjwEkI}3S|E?u=X0{jf} S|NM|JC{qo^3cm]-|JUx/{Cj{s&amp;gt;{Crt[UXuv|D~|j|d{YXZR}Aq}0r}(_{pJfi_z}0b|-vi)Z mFe,{f4|q`b{}^Z{HM{rbeHZ|^x_o|XM|L%|uFXm}@C_{{Hhp%a7|0p[Xp+^K}9U{bP}: tT}B|}+$|b2|[^|~h{FAby[`{}xgygrt~h1[li`c4vz|,7p~b(|mviN}^pg[{N/|g3|^0c,gE|f%|7N{q[|tc|TKA{LU}I@|AZp(}G-sz{F |qZ{}F|f-}RGn6{Z]_5})B}UJ{FFb2]4ZI@v=k,]t_Dg5Bj]Z-]L]vrpdvdGlk|gF}G]|IW}Y0[G| /bo|Te^,_B}#n^^{QHYI[?hxg{[`]D^IYRYTb&amp;amp;kJ[cri[g_9]Ud~^_]&amp;lt;p@_e_XdNm-^/|5)|h_{J;{kacVopf!q;asqd}n)|.m|bf{QW|U)}b+{tL|w``N|to{t ZO|T]jF}CB|0Q{e5Zw|k |We}5:{HO{tPwf_uajjBfX}-V_C_{{r~gg|Ude;s+}KNXH}! `K}eW{Upwbk%ogaW}9EYN}YY|&amp;amp;v|SL{C3[5s.]Y]I]u{M6{pYZ`^,`ZbCYR[1mNg&amp;gt;rsk0Ym[jrE]RYiZTr*YJ{Ge|%-lf|y(`=[t}E6{k!|3)}Zk} ][G{E~cF{u3U.rJ|a9p#o#ZE|?|{sYc#vv{E=|LC}cu{N8`/`3`9rt[4|He{cq|iSYxY`}V |(Q|t4{C?]k_Vlvk)BZ^r&amp;lt;{CL}#h}R+[&amp;lt;|i=}X|{KAo]|W&amp;lt;`K{NW|Zx}#;|fe{IMr&amp;lt;|K~tJ_x}AyLZ?{GvbLnRgN}X&amp;amp;{H7|x~}Jm{]-| GpNu0}.ok&amp;gt;|c4{PYisrDZ|fwh9|hfo@{H~XSbO]Odv]%`N]b1Y]]|eIZ}_-ZA]aj,&amp;gt;eFn+j[aQ_+]h[J_m_g]%_wf.`%k1e#Z?{CvYu_B^|gk`Xfh^M3`afGZ-Z|[m{L}|k3cp[it ^&amp;gt;YUi~d&amp;gt;{T*}YJ{Q5{Jxa$hg|%4`}|LAgvb }G}{P=|&amp;lt;;Ux{_skR{cV|-*|s-{Mp|XP|$G|_J}c6cM{_=_D|*9^$ec{V;|4S{qO|w_|.7}d0|/D}e}|0G{Dq]Kdp{}dfDi&amp;gt;}B%{Gd|nl}lf{C-{y}|ANZr}#={T~|-(}c&amp;amp;{pI|ft{lsVP}){|@u}!W|bcmB{d?|iW|:dxj{PSkO|Hl]Li:}VYk@|2={fnWt{M3`cZ6|)}|Xj}BYa?vo{e4|L7|B7{L7|1W|lvYO}W8nJ|$Vih|{T{d*_1|:-n2dblk``fT{Ky|-%}m!|Xy|-a{Pz}[l{kFjz|iH}9N{WE{x,|jz}R {P|{D)c=nX|Kq|si}Ge{sh|[X{RF{t`|jsr*fYf,rK|/9}$}}Nf{y!1|&amp;lt;Std}4Wez{W${Fd_/^O[ooqaw_z[L`Nbv[;l7V[ii3_PeM}.h^viqYjZ*j1}+3{bt{DR[;UG}3Og,rS{JO{qw{d&amp;lt;_zbAh&amp;lt;R[1_r`iZTbv^^a}c{iEgQZ&amp;lt;exZFg.^Rb+`Uj{a+{z&amp;lt;[~r!]`[[|rZYR|?F|qppp]L|-d|}K}YZUM|=Y|ktm*}F]{D;g{uI|7kg^}%?Z%ca{N[_&amp;lt;q4xC]i|PqZC]n}.bDrnh0Wq{tr|OMn6tM|!6|T`{O`|&amp;gt;!]ji+]_bTeU}Tq|ds}n|{Gm{z,f)}&amp;amp;s{DPYJ`%{CGd5v4tvb*hUh~bf]z`jajiFqAii]bfy^U{Or|m+{I)cS|.9k:e3`^|xN}@Dnlis`B|Qo{`W|&amp;gt;||kA}Y}{ERYuYx`%[exd`]|OyiHtb}HofUYbFo![5|+]gD{NIZR|Go}.T{rh^4]S|C9_}xO^i`vfQ}C)bK{TL}cQ|79iu}9a];sj{P.o!f[Y]pM``Jda^Wc9ZarteBZClxtM{LW}l9|a.mU}KX}4@{I+f1}37|8u}9c|v${xGlz}jP{Dd1}e:}31}%3X$|22i&amp;lt;v+r@~mf{sN{C67G97855F4YL5}8f{DT|xy{sO{DXB334@55J1)4.G9A#JDYtXTYM4, YQD9;XbXm9SX]IB^4UN=Xn&amp;lt;5(;(F3YW@XkH-X_VM[DYM:5XP!T&amp;amp;Y`6|,^{IS-*D.H&amp;gt;:LXjYQ0I3XhAF:9:(==.F*3F1189K/7163D,:@|e2{LS36D4hq{Lw/84443@4.933:0307::6D7}&amp;amp;l{Mx657;89;,K5678H&amp;amp;93D(H&amp;lt;&amp;amp;&amp;lt;&amp;gt;0B90X^I;}Ag1{P%3A+&amp;gt;&amp;gt;&amp;lt;975}[S{PZE453?4|T2{Q+5187;&amp;gt;447:81{C=hL6{Me^:=7ii{R=.=F&amp;lt;81;48?|h8}Uh{SE|,VxL{ST,7?9Y_5Xk3A#:$%YSYdXeKXOD8+TXh7(@&amp;gt;(YdXYHXl9J6X_5IXaL0N?3YK7Xh!1?XgYz9YEXhXaYPXhC3X`-YLY_XfVf[EGXZ5L8BXL9YHX]SYTXjLXdJ: YcXbQXg1PX]Yx4|Jr{Ys4.8YU+XIY`0N,&amp;lt;H%-H;:0@,74/:8546I=9177154870UC]d&amp;lt;C3HXl7ALYzXFXWP&amp;lt;&amp;lt;?E!88E5@03YYXJ?YJ@6YxX-YdXhYG|9o{`iXjY_&amp;gt;YVXe&amp;gt;AYFX[/(I@0841?):-B=14337:8=|14{c&amp;amp;93788|di{cW-0&amp;gt;0&amp;lt;097/A;N{FqYpugAFT%X/Yo3Yn,#=XlCYHYNX[Xk3YN:YRT4?)-YH%A5XlYF3C1=NWyY}&amp;gt;:74-C673&amp;lt;69545v {iT85YED=64=.F4..9878/D4378?48B3:7:7/1VX[f4{D,{l&amp;lt;5E75{dAbRB-8-@+;DBF/$ZfW8S&amp;lt;4YhXA.(5@*11YV8./S95C/0R-A4AXQYI7?68167B95HA1*&amp;lt;M3?1/@;/=54XbYP36}lc{qzSS38:19?,/39193574/66878Yw1X-87E6=;964X`T734:&amp;gt;86&amp;gt;1/=0;(I-1::7ALYGXhF+Xk[@W%TYbX7)KXdYEXi,H-XhYMRXfYK?XgXj.9HX_SX]YL1XmYJ&amp;gt;Y}WwIXiI-3-GXcYyXUYJ$X`Vs[7;XnYEZ;XF! 3;%8;PXX(N3Y[)Xi1YE&amp;amp;/ :;74YQ6X`33C;-(&amp;gt;Xm0(TYF/!YGXg8 9L5P01YPXO-5%C|qd{{/K/E6,=0144:361:955;6443@?B7*7:F89&amp;amp;F35YaX-CYf,XiFYRXE_e{}sF 0*7XRYPYfXa5YXXY8Xf8Y~XmA[9VjYj*#YMXIYOXk,HHX40YxYMXU8OXe;YFXLYuPXP?EB[QV0CXfY{:9XV[FWE0D6X^YVP*$4%OXiYQ(|xp|%c3{}V`1&amp;gt;Y`XH00:8/M6XhQ1:;3414|TE|&amp;amp;o@1*=81G8&amp;lt;3}6&amp;lt;|(f6&amp;gt;&amp;gt;&amp;gt;5-5:8;093B^3U*+*^*UT30XgYU&amp;amp;7*O1953)5@E78--F7YF*B&amp;amp;0:%P68W9Zn5974J9::3}Vk|-,C)=)1AJ4+&amp;lt;3YGXfY[XQXmT1M-XcYTYZXCYZXEYXXMYN,17&amp;gt;XIG*SaS|/eYJXbI?XdNZ+WRYP&amp;lt;F:R PXf;0Xg`$|1GX9YdXjLYxWX!ZIXGYaXNYm6X9YMX?9EXmZ&amp;amp;XZ#XQ&amp;gt;YeXRXfAY[4 ;0X!Zz0XdN$XhYL XIY^XGNXUYS/1YFXhYk.TXn4DXjB{jg|4DEX]:XcZMW=A.+QYL&amp;lt;LKXc[vV$+&amp;amp;PX*Z3XMYIXUQ:ZvW&amp;lt; YSXFZ,XBYeXMM)?Xa XiZ4/EXcP3%}&amp;amp;-|6~:1(-+YT$@XIYRBC&amp;lt;}&amp;amp;,|7aJ6}bp|8)K1|Xg|8C}[T|8Q.89;-964I38361&amp;lt;=/;883651467&amp;lt;7:&amp;gt;?1:.}le|:Z=39;1Y^)?:J=?XfLXbXi=Q0YVYOXaXiLXmJXO5?.SFXiCYW}-;|=u&amp;amp;D-X`N0X^,YzYRXO(QX_YW9`I|&amp;gt;hZ:N&amp;amp;X)DQXP@YH#XmNXi$YWX^=!G6YbYdX&amp;gt;XjY|XlX^XdYkX&amp;gt;YnXUXPYF)FXT[EVTMYmYJXmYSXmNXi#GXmT3X8HOX[ZiXN]IU2&amp;gt;8YdX1YbX&amp;lt;YfWuZ8XSXcZU%0;1XnXkZ_WTG,XZYX5YSX Yp 05G?XcYW(IXg6K/XlYP4XnI @XnO1W4Zp-9C@%QDYX+OYeX9&amp;gt;--YSXkD.YR%Q/Yo YUX].Xi&amp;lt;HYEZ2WdCE6YMXa7F)=,D&amp;gt;-@9/8@5=?7164;35387?N&amp;lt;618=6&amp;gt;7D+C50&amp;lt;6B03J0{Hj|N9$D,9I-,.KB3}m |NzE0::/81YqXjMXl7YG; [.W=Z0X4XQY]:MXiR,XgM?9$9&amp;gt;:?E;YE77VS[Y564760391?14941:0=:8B:;/1DXjFA-564=0B3XlH1+D85:0Q!B#:-6&amp;amp;N/:9&amp;lt;-R3/7Xn&amp;lt;*3J4.H:+334B.=&amp;gt;30H.;3833/76464665755:/83H6633:=;.&amp;gt;5645}&amp;amp;E|Y)?1/YG-,93&amp;amp;N3AE@5 &amp;lt;L1-G/8A0D858/30&amp;gt;8&amp;lt;549=@B8] V0[uVQYlXeD(P#ID&amp;amp;7T&amp;amp;7;Xi0;7T-$YE)E=1:E1GR):--0YI7=E&amp;lt;}n9|aT6783A&amp;gt;D7&amp;amp;4YG7=391W;Zx&amp;lt;5+&amp;gt;F#J39}o/|cc;6=A050EQXg8A1-}D-|d^5548083563695D?-.YOXd37I$@LYLWeYlX&amp;lt;Yd+YR A$;3-4YQ-9XmA0!9/XLY_YT(=5XdDI&amp;gt;YJ5XP1ZAW{9&amp;gt;X_6R(XhYO65&amp;amp;J%DA)C-!B:97#A9;@?F;&amp;amp;;(9=11/=657/H,&amp;lt;8}bz|j^5446&amp;gt;.L+&amp;amp;Y^8Xb6?(CYOXb*YF(8X`FYR(XPYVXmPQ%&amp;amp;DD(XmZXW??YOXZXfCYJ79,O)XnYF7K0!QXmXi4IYFRXS,6&amp;lt;%-:YO(+:-3Q!1E1:W,Zo}Am|n~;3580534*?3Zc4=9334361693:30C&amp;lt;6/717:&amp;lt;1/;&amp;gt;59&amp;amp;:4}6!|rS36=1?75&amp;lt;8}[B|s809983579I.A.&amp;gt;84758=108564741H*9E{L{|u%YQ&amp;lt;%6XfH.YUXe4YL@,&amp;gt;N}Tv|ve*G0X)Z;/)3@A74(4P&amp;amp;A1X:YVH97;,754*A66:1 D739E3553545558E4?-?K17/770843XAYf838A7K%N!YW4.$T19Z`WJ*0XdYJXTYOXNZ 1XaN1A+I&amp;amp;Xi.Xk3Z3GB&amp;amp;5%WhZ1+5#Y[X&amp;lt;4YMXhQYoQXVXbYQ8XSYUX4YXBXWDMG0WxZA[8V+Z8X;D],Va$%YeX?FXfX[XeYf&amp;lt;X:Z[WsYz8X_Y]%XmQ(!7BXIZFX]&amp;amp;YE3F$(1XgYgYE&amp;amp; +[+W!&amp;lt;YMYFXc;+PXCYI9YrWxGXY9DY[!GXiI7::)OC;*$.&amp;gt;N*HA@{C|}&amp;amp;k=:&amp;lt;TB83X`3YL+G4XiK]i}(fYK&amp;lt;=5$.FYE%4*5*H*6XkCYL=*6Xi6!Yi1KXR4YHXbC8Xj,B9ZbWx/XbYON#5B}Ue}+QKXnF1&amp;amp;YV5XmYQ0!*3IXBYb71?1B75XmF;0B976;H/RXU:YZX;BG-NXj;XjI&amp;gt;A#D3B636N;,*%&amp;lt;D:0;YRXY973H5)-4FXOYf0:0;/7759774;7;:/855:543L43&amp;lt;?6=E,.A4:C=L)%4YV!1(YE/4YF+ F3%;S;&amp;amp;JC:%/?YEXJ4GXf/YS-EXEYW,9;E}X$}547EXiK=51-?71C%?57;5&amp;gt;463553Zg90;6447?&amp;lt;&amp;gt;4:9.7538XgN{|!}9K/E&amp;amp;3-:D+YE1)YE/3;37/:05}n&amp;lt;}:UX8Yj4Yt864@JYK..G=.(A Q3%6K&amp;gt;3(P3#AYE$-6H/456*C=.XHY[#S.&amp;lt;780191;057C)=6HXj?955B:K1 E&amp;gt;-B/9,;5.!L?:0&amp;gt;/.@//:;7833YZ56&amp;lt;4:YE=/:7Z_WGC%3I6&amp;gt;XkC*&amp;amp;NA16X=Yz2$X:Y^&amp;amp;J48&amp;lt;99k8}CyB-61&amp;lt;18K946YO4{|N}E)YIB9K0L&amp;gt;4=46&amp;lt;1K0+R;6-=1883:478;4,S+3YJX`GJXh.Yp+Xm6MXcYpX(&amp;gt;7Yo,/:X=Z;Xi0YTYHXjYmXiXj;*;I-8S6N#XgY}.3XfYGO3C/$XjL$*NYX,1 6;YH&amp;amp;&amp;lt;XkK9C#I74.&amp;gt;}Hd`A748X[T450[n75&amp;lt;4439:18A107&amp;gt;|ET}Rf&amp;lt;1;14876/Yb983E&amp;lt;5.YNXd4149&amp;gt;,S=/4E/&amp;lt;306443G/06}0&amp;amp;}UkYSXFYF=44=-5095=88;63844,9E6644{PL}WA8:&amp;gt;)7+&amp;gt;763&amp;gt;&amp;gt;0/B3A545CCnT}Xm|dv}Xq1L/YNXk/H8;;.R63351YY747@15YE4J8;46;.38.&amp;gt;4A369.=-83,;Ye3?:3@YE.4-+N353;/;@(X[YYD&amp;gt;@/05-I*@.:551741Yf5&amp;gt;6A443&amp;lt;3535;.58/86=D4753442$635D1&amp;gt;0359NQ @73:3:&amp;gt;&amp;gt;&amp;lt;Xn?;43C14 ?Y|X611YG1&amp;amp;&amp;lt;+,4&amp;lt;*,YLXl&amp;lt;1/AIXjF*N89A4Z576K1XbJ5YF.ZOWN.YGXO/YQ01:4G38Xl1;KI0YFXB=R&amp;lt;7;D/,/4&amp;gt;;$I,YGXm94@O35Yz66695385.&amp;gt;:6A#5}W7n^4336:4157597434433&amp;lt;3|XA}m`&amp;gt;=D&amp;gt;:4A.337370?-6Q96{`E|4A}C`|Qs{Mk|J+~r&amp;gt;|o,wHv&amp;gt;Vw}!c{H!|Gb|*Ca5}J||,U{t+{CN[!M65YXOY_*B,Y[Z9XaX[QYJYLXPYuZ%XcZ8LY[SYPYKZM&amp;lt;LMYG9OYqSQYM~[e{UJXmQYyZM_)&amp;gt;YjN1~[f3{aXFY|Yk:48YdH^NZ0|T){jVFYTZNFY^YTYN~[h{nPYMYn3I]`EYUYsYIZEYJ7Yw)YnXPQYH+Z.ZAZY]^Z1Y`YSZFZyGYHXLYG 8Yd#4~[i|+)YH9D?Y^F~Y7|-eYxZ^WHYdYfZQ~[j|3&amp;gt;~[k|3oYmYqY^XYYO=Z*4[]Z/OYLXhZ1YLZIXgYIHYEYK,&amp;lt;Y`YEXIGZI[3YOYcB4SZ!YHZ*&amp;amp;Y{Xi3~[l|JSY`Zz?Z,~[m|O=Yi&amp;gt;??XnYWXmYS617YVYIHZ(Z4[~L4/=~[n|Yu{P)|];YOHHZ}~[o33|a&amp;gt;~[r|aE]DH~[s|e$Zz~[t|kZFY~XhYXZB[`Y}~[u|{SZ&amp;amp;OYkYQYuZ2Zf8D~[v}% ~[w3},Q[X]+YGYeYPIS~[y}4aZ!YN^!6PZ*~[z}?E~[{3}CnZ=~[}}EdDZz/9A3(3S&amp;lt;,YR8.D=*XgYPYcXN3Z5 4)~[~}JW=$Yu.XX~] }KDX`PXdZ4XfYpTJLY[F5]X~[2Yp}U+DZJ::&amp;lt;446[m@~]#3}]1~]%}^LZwZQ5Z`/OT&amp;lt;Yh^ -~]&amp;amp;}jx[ ~m&amp;lt;z!%2+~ly4VY-~o&amp;gt;}p62yz!%2+Xf2+~ly4VY-zQ`z (=] 2z~o2&amp;quot;,C={&amp;quot; &amp;quot;:0,&amp;quot;!&amp;quot;:1},c=34,i=2,p,s=&amp;quot;&amp;quot;,u=String.fromCharCode,t=u(12539);while(++c&amp;lt;127)C[u(c)]=c^39&amp;amp;&amp;amp;c^92?i++:0;i=0;while(0&amp;lt;=(c=C[a.charAt(i++)]))if(16==c)if((c=C[a.charAt(i++)])&amp;lt;87){if(86==c)c=1879;while(c--)s+=u(++p)}else s+=s.substr(8272,360);else if(c&amp;lt;86)s+=u(p+=c&amp;lt;51?c-16:(c-55)*92+C[a.charAt(i++)]);else if((c=((c-86)*92+C[a.charAt(i++)])*92+C[a.charAt(i++)])&amp;lt;49152)s+=u(p=c&amp;lt;40960?c:c|57344);else{c&amp;amp;=511;while(c--)s+=t;p=12539}return s')();
		var JCT8836=JCT11280.substring(0,8836);
		
		global.EscapeSJIS=function(str){
			return str.replace(/[^*+.-9A-Z_a-z-]/g,function(s){
				var c=s.charCodeAt(0),m;
				return c&amp;lt;128?(c&amp;lt;16?&amp;quot;%0&amp;quot;:&amp;quot;%&amp;quot;)+c.toString(16).toUpperCase():65376&amp;lt;c&amp;amp;&amp;amp;c&amp;lt;65440?&amp;quot;%&amp;quot;+(c-65216).toString(16).toUpperCase():(c=JCT11280.indexOf(s))&amp;lt;0?&amp;quot;%81E&amp;quot;:&amp;quot;%&amp;quot;+((m=((c&amp;lt;8272?c:(c=JCT11280.lastIndexOf(s)))-(c%=188))/188)&amp;lt;31?m+129:m+193).toString(16).toUpperCase()+(64&amp;lt;(c+=c&amp;lt;63?64:65)&amp;amp;&amp;amp;c&amp;lt;91||95==c||96&amp;lt;c&amp;amp;&amp;amp;c&amp;lt;123?String.fromCharCode(c):&amp;quot;%&amp;quot;+c.toString(16).toUpperCase())
			})
		};
		global.EscapeEUCJP=function(str){
			return str.replace(/[^*+.-9A-Z_a-z-]/g,function(s){
				var c=s.charCodeAt(0);
				return (c&amp;lt;128?(c&amp;lt;16?&amp;quot;%0&amp;quot;:&amp;quot;%&amp;quot;)+c.toString(16):65376&amp;lt;c&amp;amp;&amp;amp;c&amp;lt;65440?&amp;quot;%8E%&amp;quot;+(c-65216).toString(16):(c=JCT8836.indexOf(s))&amp;lt;0?&amp;quot;%A1%A6&amp;quot;:&amp;quot;%&amp;quot;+((c-(c%=94))/94+161).toString(16)+&amp;quot;%&amp;quot;+(c+161).toString(16)).toUpperCase()
			})
		};
	}
})(window);
&lt;/pre&gt;</content:encoded>
  </item>
  <item rdf:about="https://let.hatelabo.jp/htsign/let/gYC-x9Owx5HoBA">
    <link>https://let.hatelabo.jp/htsign/let/gYC-x9Owx5HoBA</link>
    <dc:date>2013-05-27T18:43:42Z</dc:date>
    <description>niconicoにおいて、検索ワードのサジェストを表示します</description>
    <dc:creator>htsign</dc:creator>
    <title>[Let] nicosearchで自動補完</title>
    <content:encoded>&lt;a href="javascript:%22https%3A%2F%2Flet.st-hatelabo.com%2Fhtsign%2Flet%2FgYC-x9Owx5HoBA.bookmarklet.js%20%28arg%29%22.replace%28%2F%28%5CS%2B%29%5Cs%2B%28%5CS%2A%29%2F%2Cfunction%28s%2Curl%2Carg%29%7Bs%3Ddocument.createElement%28%22script%22%29%3Bs.charset%3D%22utf-8%22%3Bs.src%3Durl%2B%22%3Fs%3D%22%2BencodeURIComponent%28arg%29%3Bdocument.body.appendChild%28s%29%7D%29%3Bvoid%280%29%3B"&gt;nicosearchで自動補完&lt;/a&gt;&lt;pre&gt;/*
 * @title nicosearchで自動補完
 * @description niconicoにおいて、検索ワードのサジェストを表示します
 * @include http://www.nicovideo.jp/*
 * @include http://seiga.nicovideo.jp/*
 * @include http://live.nicovideo.jp/*
 * @include http://ch.nicovideo.jp/*
 * @include http://com.nicovideo.jp/*
 * @include http://dic.nicovideo.jp/*
 * @include http://sp.nicovideo.jp/*
 * @include http://sp.live.nicovideo.jp/*
 * @include http://sp.ch.nicovideo.jp/*
 * @license MIT License
 */


// 個人的にニコニコ静画、ニコニコ生放送などの&amp;quot;ニコニコ動画以外&amp;quot;を全く使わないので、動作検証は不十分です。
// IE9以降と最新のFirefox, Chromeで動作すると思います。Operaは知りません。

// 【直近の変更】
// ・選択中の候補をカーソルキーで切り替える場合の上下端の処理を変更し、ループできるようにしました。


if (!Element.prototype.matchesSelector) {
	Object.defineProperty(Element.prototype, &amp;quot;matchesSelector&amp;quot;, {
		enumerable: false,
		configurable: true,
		value: function(property){
			if (this.webkitMatchesSelector) {
				return this.webkitMatchesSelector(property);
			}
			else if (this.mozMatchesSelector) {
				return this.mozMatchesSelector(property);
			}
			else if (this.msMatchesSelector) {
				return this.msMatchesSelector(property);
			}
			else if (this.oMatchesSelector) {
				return this.oMatchesSelector(property);
			}
			else
				return null;
		}
	});
}


// ref: http://nicoapi.com/docs/nicosearchapi.html
// ref: https://chrome.google.com/webstore/detail/pafehjbkojbbenbdklnlajbmlojnecjl
(function main(){

var REQUEST_METHOD  = &amp;quot;post&amp;quot;;
var REQUEST_URL     = &amp;quot;http://www.nicoapi.com/ns/suggest.xml&amp;quot;;
var RESPONSE_LENGTH = 10;
var QUERY_DELIMITER = /[\s　]/;

var cache  = {};       // 検索ワードと結果のペアを保持
var walker = null;     // カーソルキーで動かした場合のTreeWalkerを保持
var tID    = null;     // sendRequestのtimeout用

(function createStyle(){
	if (document.querySelector(&amp;quot;#nicosearch-style&amp;quot;)) {
		return false;
	}
	var style = document.createElement(&amp;quot;style&amp;quot;), i = 0;
	style.id = &amp;quot;nicosearch-style&amp;quot;;
	document.getElementsByTagName(&amp;quot;head&amp;quot;)[0].appendChild(style);
	([
		&amp;quot;#nicosearch-suggestbox {\
			position: absolute;\
			border:  1px solid #778899;\
			background-color: #fff;\
			z-index: 100000;\
			-webkit-box-sizing:  border-box;\
			   -moz-box-sizing:  border-box;\
			    -ms-box-sizing:  border-box;\
			     -o-box-sizing:  border-box;\
			        box-sizing:  border-box;\
			-webkit-user-select: none;\
			 -khtml-user-select: none;\
			   -moz-user-select: none;\
			    -ms-user-select: none;\
			     -o-user-select: none;\
			        user-select: none;\
		}&amp;quot;,
		&amp;quot;#nicosearch-suggestbox * {\
			text-align: left;\
		}&amp;quot;,
		&amp;quot;#nicosearch-suggestbox &amp;gt; div {\
			position: relative;\
			line-height: normal;\
			overflow:    hidden;\
		}&amp;quot;,
		&amp;quot;#nicosearch-suggestbox &amp;gt; div.selected\
		,#nicosearch-suggestbox &amp;gt; div:hover {\
			background-color: #afeeee;\
		}&amp;quot;,
		&amp;quot;#nicosearch-suggestbox a {\
			display: block;\
		}&amp;quot;,
		&amp;quot;.nicosearch-dic-icon {\
			padding-top:    1px;\
			padding-bottom: 1px;\
		}&amp;quot;,
		&amp;quot;.nicosearch-name {\
			position:      absolute;\
			top:           0;\
			left:          18px;\
			width:         calc(100% - 18px);\
			height:        18px;\
			font-size:     14px;\
			text-overflow: ellipsis;\
			word-wrap:     normal;\
			white-space:   nowrap;\
			overflow:      hidden;\
			cursor:        pointer;\
		}&amp;quot;
	]).forEach(function(val){
		style.sheet.insertRule(val, i++);
	});
})();

var searchBox = (function getSearchBox(){
	var target = document.getElementById(&amp;quot;searchWord&amp;quot;)                    // トップページ
	|| document.getElementById(&amp;quot;bar_search&amp;quot;)                              // ニコニコ動画
	|| document.getElementById(&amp;quot;search_united&amp;quot;)                           // 検索結果
	|| document.querySelector(&amp;quot;.searchText input&amp;quot;)                        // 動画ページ
	|| document.getElementById(&amp;quot;bar_search&amp;quot;)                              // ニコニコ静画
	|| document.querySelector(&amp;quot;.search_program .search_word&amp;quot;)             // ニコニコ生放送
	|| document.getElementById(&amp;quot;searchtxt&amp;quot;)                               // ニコニコチャンネル
	|| document.getElementById(&amp;quot;search_text&amp;quot;)                             // ニコニココミュニティ
	|| document.getElementById(&amp;quot;search-box&amp;quot;)                              // ニコニコ大百科
	|| document.getElementById(&amp;quot;jsSearchText&amp;quot;)                            // SP版ニコニコ動画
	|| document.querySelector(&amp;quot;#globalSearch .searchString&amp;quot;)              // SP版ニコニコチャンネル
	;
	return target;
})();
if (searchBox === null) {
	window.alert(&amp;quot;入力欄が見つかりません。&amp;quot;);
	return false;
}

var XmlHttp = function(word){
	var xhr = new XMLHttpRequest();
	xhr.open(REQUEST_METHOD, REQUEST_URL, true);
	xhr.setRequestHeader(&amp;quot;Content-Type&amp;quot;, &amp;quot;application/x-www-form-urlencoded; charset=UTF-8&amp;quot;);
	xhr.addEventListener(&amp;quot;readystatechange&amp;quot;, function(evt){
		if (xhr.readyState === 4) {
			switch(xhr.status) {
				case 200:
					cache[word.toLowerCase()] = xhr.responseXML; // キャッシュに追加
					createSuggestWindow(xhr.responseXML);
					break;
			}
		}
	}, false);
	return xhr;
};
// どうやらIE9はXMLHttpRequestをクロスドメインには使えないみたいで…
var Xdr = function(word, query){
	var xdr = new XDomainRequest();
	xdr.open(&amp;quot;GET&amp;quot;, REQUEST_URL + &amp;quot;?&amp;quot; + query);
	xdr.onload = function(){
		var xml = DOMParser().parseFromString(xdr.responseText, &amp;quot;application/xml&amp;quot;);
		cache[word.toLowerCase()] = xml; // キャッシュに追加
		createSuggestWindow(xml);
	};
	return xdr;
};


// 枠外をクリックした時に suggestbox を削除
document.addEventListener(&amp;quot;click&amp;quot;, function(evt){
	if (!evt.target.matchesSelector(&amp;quot;#nicosearch-suggestbox&amp;quot;) || evt.target !== searchBox) {
		removeSuggestWindow();
	}
}, false);

searchBox.addEventListener(&amp;quot;keydown&amp;quot;, function(evt){
	var valueArr = searchBox.value.split(QUERY_DELIMITER);
	valueArr.pop();
	
	var suggestbox = document.getElementById(&amp;quot;nicosearch-suggestbox&amp;quot;);
	if (suggestbox) {
		if (!walker) walker = document.createTreeWalker(
			suggestbox,
			NodeFilter.SHOW_ELEMENT,
			function(node){
				return node.parentElement === suggestbox
				? NodeFilter.FILTER_ACCEPT
				: NodeFilter.FILTER_SKIP;
			},
			false
		);
		switch(evt.keyCode) {
			case 38: // ↑
				evt.preventDefault();
				if (!suggestbox.querySelector(&amp;quot;.selected&amp;quot;)) {
					walker.lastChild();
					walker.currentNode.className = &amp;quot;selected&amp;quot;;
				}
				else if (walker.previousNode()) {
					walker.currentNode.nextElementSibling.className = &amp;quot;&amp;quot;;
					walker.currentNode.className = &amp;quot;selected&amp;quot;;
				}
				else {
					walker.currentNode.className = &amp;quot;&amp;quot;;
					while (walker.nextNode()){} // 最後まで移動
					walker.currentNode.className = &amp;quot;selected&amp;quot;;
				}
				valueArr.push(walker.currentNode.textContent);
				searchBox.value = valueArr.join(&amp;quot; &amp;quot;);
				break;
			case 40: // ↓
				evt.preventDefault();
				if (!suggestbox.querySelector(&amp;quot;.selected&amp;quot;)) {
					walker.firstChild();
					walker.currentNode.className = &amp;quot;selected&amp;quot;;
				}
				else if (walker.nextNode()) {
					walker.currentNode.previousElementSibling.className = &amp;quot;&amp;quot;;
					walker.currentNode.className = &amp;quot;selected&amp;quot;;
				}
				else {
					walker.currentNode.className = &amp;quot;&amp;quot;;
					while (walker.previousNode()){} // 最初まで移動
					walker.currentNode.className = &amp;quot;selected&amp;quot;;
				}
				valueArr.push(walker.currentNode.textContent);
				searchBox.value = valueArr.join(&amp;quot; &amp;quot;);
				break;
			case 13: // Enter
				if (suggestbox.querySelector(&amp;quot;.selected&amp;quot;)) {
					walker.currentNode.getElementsByTagName(&amp;quot;p&amp;quot;)[0].click();
				}
				break;
			default:
				if (suggestbox.querySelector(&amp;quot;.selected&amp;quot;)) {
					suggestbox.getElementsByClassName(&amp;quot;selected&amp;quot;)[0].className = &amp;quot;&amp;quot;;
				}
		}
	}
}, false);

searchBox.addEventListener(&amp;quot;keyup&amp;quot;, function(evt){
	window.clearTimeout(tID);
	
	// 選択状態の場合はなにもしない
	var suggestbox = document.getElementById(&amp;quot;nicosearch-suggestbox&amp;quot;);
	if (suggestbox &amp;amp;&amp;amp; suggestbox.querySelector(&amp;quot;.selected&amp;quot;)) {
		return false;
	}
	
	// 空白で区切った配列の最後を代入（AND検索用）
	var word = evt.target.value.split(QUERY_DELIMITER).pop();
	// 文字列が空の場合はサジェストを消す
	if (word.length === 0) {
		removeSuggestWindow();
		return false;
	}
	// キャッシュをチェック
	// 既に結果をもらっている場合は二度送らない
	if (cache[word.toLowerCase()]) {
		createSuggestWindow(cache[word.toLowerCase()]);
	}
	else {
		tID = window.setTimeout(function(){
			sendRequest(word);
		}, 500);
	}
}, false);


function sendRequest(word){
	var xhr;
	var query = &amp;quot;i=&amp;quot; + encodeURI(word) + &amp;quot;&amp;amp;l=&amp;quot; + RESPONSE_LENGTH;
	try {
		xhr = new XmlHttp(word);
	} catch(e) {
		xhr = new Xdr(word, query); // IE9用
	}
	xhr.send(query);
}

function removeSuggestWindow(){
	var suggestbox = document.getElementById(&amp;quot;nicosearch-suggestbox&amp;quot;);
	walker = null;
	if (suggestbox) {
		suggestbox.parentElement.removeChild(suggestbox);
	}
}

function createSuggestWindow(xml){
	if (xml.documentElement.getAttribute(&amp;quot;status&amp;quot;) !== &amp;quot;ok&amp;quot;) return false;
	
	walker = null;
	var wrapper = document.getElementById(&amp;quot;nicosearch-suggestbox&amp;quot;);
	if (!wrapper) {
		wrapper = (function createWrapper(){
			var wrapper = document.createElement(&amp;quot;div&amp;quot;);
			var boxRect = searchBox.getBoundingClientRect();
			wrapper.id = &amp;quot;nicosearch-suggestbox&amp;quot;;
			wrapper.style.top      = boxRect.top + boxRect.height + &amp;quot;px&amp;quot;;
			wrapper.style.left     = boxRect.left + &amp;quot;px&amp;quot;;
			wrapper.style.minWidth = searchBox.offsetWidth  + &amp;quot;px&amp;quot;;
			return wrapper;
		})();
	}
	else {
		while (wrapper.hasChildNodes()) {
			wrapper.removeChild(wrapper.firstChild);
		}
	}
	
	var img = (function createImage(){
		var img = document.createElement(&amp;quot;img&amp;quot;);
		img.className = &amp;quot;nicosearch-dic-icon&amp;quot;;
		img.src = &amp;quot;data:image/png;base64,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&amp;quot;;
		return img;
	})();
	
	Array.prototype.slice.call(xml.getElementsByTagName(&amp;quot;item&amp;quot;))
	.map(function(val){
		return val.textContent.split(QUERY_DELIMITER).join(&amp;quot;_&amp;quot;);
	}).forEach(function(val){
		var div = document.createElement(&amp;quot;div&amp;quot;);
		if (document.ontouchstart) {
			div.style.padding = &amp;quot;4px 0&amp;quot;; // SP版の場合ちょっと縦に幅を持たせる
		}
		var a = (function createAnchor(){
			var a = document.createElement(&amp;quot;a&amp;quot;);
			a.href   = &amp;quot;http://dic.nicovideo.jp/a/&amp;quot; + encodeURIComponent(val);
			a.target = &amp;quot;_blank&amp;quot;;
			return a;
		})();
		var p = (function createParagraph(){
			var p = document.createElement(&amp;quot;p&amp;quot;);
			p.className = &amp;quot;nicosearch-name&amp;quot;;
			return p;
		})();
		p.addEventListener(&amp;quot;click&amp;quot;, function(evt){
			searchBox.value = val;
			removeSuggestWindow();
		}, false);
		a.appendChild(img.cloneNode(false));
		div.appendChild(a);
		p.appendChild(document.createTextNode(val));
		div.appendChild(p);
		wrapper.appendChild(div);
	});
	document.body.appendChild(wrapper);
}

})();&lt;/pre&gt;</content:encoded>
  </item>
  <item rdf:about="https://let.hatelabo.jp/htsign/let/gYC-x8Xzwej2Xw">
    <link>https://let.hatelabo.jp/htsign/let/gYC-x8Xzwej2Xw</link>
    <dc:date>2013-04-28T09:17:21Z</dc:date>
    <description>マルチメディア要素へのリンクのクリックイベントに&lt;audio&gt;や&lt;video&gt;なウィンドウをポップアップする機能をオーバーライドする</description>
    <dc:creator>htsign</dc:creator>
    <title>[Let] メディア再生窓生成</title>
    <content:encoded>&lt;a href="javascript:%22https%3A%2F%2Flet.st-hatelabo.com%2Fhtsign%2Flet%2FgYC-x8Xzwej2Xw.bookmarklet.js%20%28arg%29%22.replace%28%2F%28%5CS%2B%29%5Cs%2B%28%5CS%2A%29%2F%2Cfunction%28s%2Curl%2Carg%29%7Bs%3Ddocument.createElement%28%22script%22%29%3Bs.charset%3D%22utf-8%22%3Bs.src%3Durl%2B%22%3Fs%3D%22%2BencodeURIComponent%28arg%29%3Bdocument.body.appendChild%28s%29%7D%29%3Bvoid%280%29%3B"&gt;メディア再生窓生成&lt;/a&gt;&lt;pre&gt;/*
 * @title メディア再生窓生成
 * @description マルチメディア要素へのリンクのクリックイベントに&amp;lt;audio&amp;gt;や&amp;lt;video&amp;gt;なウィンドウをポップアップする機能をオーバーライドする
 * @include http://*
 * @license NYSL
 */


// 一つのウィンドウでaudioとvideoを同時再生するとウィンドウのサイズがえらいことになりますが、
// 非常にレアケースだと思われるので無視しています。「運用回避してください。」


(function(){
  var checked = [];        // 同じURLに複数回リクエストを送るのを防ぐためのリストを格納
  var timeout = 30 * 1000; // タイムアウトになるまでの時間（単位：ms）
  
  var allowList = [&amp;quot;audio&amp;quot;, &amp;quot;video&amp;quot;];

  if (!HTMLElement.prototype.addPopup) { // addPopupメソッドを要素に追加

    Object.defineProperty(HTMLElement.prototype, &amp;quot;addPopup&amp;quot;, {
      value: function(url){
        var self = this;

        var xhr = new XMLHttpRequest(); // HEADリクエストを送る
        xhr.open(&amp;quot;HEAD&amp;quot;, url, true);
        xhr.onreadystatechange = function(){
          if (xhr.readyState === 4) {
            console.log(xhr.status + &amp;quot; : &amp;quot; + url);

            if (xhr.status !== 200) return;

            var header = xhr.getResponseHeader(&amp;quot;Content-Type&amp;quot;);
            var type   = header.split(&amp;quot;/&amp;quot;)[0];

            if (allowList.some(function(v){ return v === type })) { // いずれかにヒットすれば true
              console.log(header + &amp;quot; - OK&amp;quot;);
              addPopupItem(self, type);
            }
          }
        };
        xhr.send(null);

        window.setTimeout(function(){ // 一定時間でタイムアウト
          xhr.abort();
        }, timeout);
      }
    });
  }
  else {
    return false;
  }

  var elems = document.querySelectorAll(&amp;quot;a[href], area[href]&amp;quot;);
  elems = Array.prototype.slice.call(elems); // リンカブル要素を全て抽出

  for (var i in elems) {
    var url = elems[i].href;

    if (url.indexOf(&amp;quot;http&amp;quot;) === 0) {

      url = url.split(&amp;quot;#&amp;quot;)[0]; // URLに # を含む場合は除去

      if (checked.every(function(li){ return url !== li })) { // 全てとアンマッチなら true
        checked.push(url);
        elems[i].addPopup(url);
      }
    }
  }

  function addPopupItem(target, mediaType) { // ポップアップを生成
    target.onclick = function(evt){
      if (evt.ctrlKey &amp;amp;&amp;amp; evt.altKey) {
        return true; // Ctrl+Alt を押しながらクリックすれば普段のクリックと同じ効果
      }
      else {
        openPopup();
        evt.preventDefault();
      }
    };

    function openPopup() {
      var popup = window.open(&amp;quot;&amp;quot;, &amp;quot;media-popup&amp;quot;, &amp;quot;titlebar=no,menubar=no,toolbar=no,location=no,status=no,scrollbars=no&amp;quot;);
      var doc   = popup.document;
      var rect;
      var element;

      var diff = {
        width:  popup.outerWidth  - doc.documentElement.clientWidth,
        height: popup.outerHeight - doc.documentElement.clientHeight
      };

      if (!rect) {
        element = doc.createElement(mediaType);
        element.setAttribute(&amp;quot;controls&amp;quot;, &amp;quot;controls&amp;quot;);
        doc.body.appendChild(element);
        rect = element.getBoundingClientRect();
        doc.body.removeChild(element);
      }
      
      doc.body.addEventListener(&amp;quot;DOMSubtreeModified&amp;quot;, function(){ // 要素数が変化したらウィンドウサイズを変える
        var len = this.childNodes.length;
        popup.resizeTo( rect.width + diff.width, rect.height * len + diff.height );
      }, false);

      var style = doc.createElement(&amp;quot;style&amp;quot;);
      doc.querySelector(&amp;quot;head&amp;quot;).appendChild(style);
      var s = style.sheet, i = 0;
      [
        &amp;quot;body {&amp;quot;
        + &amp;quot;margin: 0;&amp;quot;
        + &amp;quot;padding: 0;&amp;quot;
        + &amp;quot;}&amp;quot;,
        &amp;quot;audio {&amp;quot;
        + &amp;quot;display: block;&amp;quot;
        + &amp;quot;margin: auto;&amp;quot;
        + &amp;quot;}&amp;quot;
      ].forEach(function(value){
        s.insertRule(value, i++);
      });

      element = doc.createElement(mediaType);
      element.setAttribute(&amp;quot;src&amp;quot;, target.href);
      element.setAttribute(&amp;quot;autoplay&amp;quot;, &amp;quot;autoplay&amp;quot;);
      element.setAttribute(&amp;quot;controls&amp;quot;, &amp;quot;controls&amp;quot;);
      element.addEventListener(&amp;quot;ended&amp;quot;, function(){ // 終端まで移動したら自らを削除する
        this.parentElement.removeChild(this);
        close();
      }, false);

      /*
        末尾に挿入する
        appendChildでないのはIEがDOMSubtreeModifiedに反応しない（らしい）ため
        http://msdn.microsoft.com/en-us/library/gg558014(v=vs.85).aspx
      */
      doc.body.insertBefore(element, null);

      function close() { // ポップアップ内のメディアがゼロのとき、子ウィンドウを閉じる
        doc.querySelectorAll( allowList.join(&amp;quot;,&amp;quot;) ).length === 0
        ? popup.close() : 0;
      }
    }
  }

})();
&lt;/pre&gt;</content:encoded>
  </item>
  <item rdf:about="https://let.hatelabo.jp/htsign/let/gYC-x8astIrqSw">
    <link>https://let.hatelabo.jp/htsign/let/gYC-x8astIrqSw</link>
    <dc:date>2013-04-22T17:26:37Z</dc:date>
    <description>選択範囲、またはアクティブなテキストボックス・テキストエリアの文字数を表示する小窓を作成する。小窓はドラッグ可能。練習を兼ねて作った過去作なのでコードはぐちゃぐちゃです。</description>
    <dc:creator>htsign</dc:creator>
    <title>[Let] 文字数カウント</title>
    <content:encoded>&lt;a href="javascript:%22https%3A%2F%2Flet.st-hatelabo.com%2Fhtsign%2Flet%2FgYC-x8astIrqSw.bookmarklet.js%20%28arg%29%22.replace%28%2F%28%5CS%2B%29%5Cs%2B%28%5CS%2A%29%2F%2Cfunction%28s%2Curl%2Carg%29%7Bs%3Ddocument.createElement%28%22script%22%29%3Bs.charset%3D%22utf-8%22%3Bs.src%3Durl%2B%22%3Fs%3D%22%2BencodeURIComponent%28arg%29%3Bdocument.body.appendChild%28s%29%7D%29%3Bvoid%280%29%3B"&gt;文字数カウント&lt;/a&gt;&lt;pre&gt;/*
 * @title 文字数カウント
 * @description 選択範囲、またはアクティブなテキストボックス・テキストエリアの文字数を表示する小窓を作成する。小窓はドラッグ可能。練習を兼ねて作った過去作なのでコードはぐちゃぐちゃです。
 * @include http://*
 * @license NYSL
 */


if (document.getElementById(&amp;quot;strLenChkDiv&amp;quot;)==null) var strLenChkWnd = &amp;quot;&amp;quot;, strLenChkWndStyle = &amp;quot;&amp;quot;;
(function (w, d) { // w=window, d=document

var str = &amp;quot;&amp;quot;;
var TIMER = d.all ? 200 : 100; // IE系のみ更新間隔を延ばす
var divPadding = &amp;quot;8px&amp;quot;;

// イベントリスナ追加
var addEvent = function(target, evt, func) {
  if (w.addEventListener) {
    return target.addEventListener(evt, func, false);
  }
  else if (w.attachEvent) {
    if (target===w) target = d;
    return target.attachEvent(&amp;quot;on&amp;quot;+evt, func);
  }
  else return false;
};

try {
  d.body.removeChild(d.getElementById(&amp;quot;strLenChkDiv&amp;quot;));
  return false;
}
catch (e) {}

// http://misttrap.s101.xrea.com/sample/bytelength_for_mbstring.htm
String.prototype.getByteLenUTF8 = function() {
  for(var i = this.length, num, res = i * 2; i-- &amp;gt; 0;) {
    if((num = this.charCodeAt(i)) &amp;gt; 0x7ff &amp;amp;&amp;amp; (num &amp;lt; 0xd800 || num &amp;gt; 0xdfff)) {
      res++;
    } else if(num &amp;lt; 0x80) {
      res--;
    }
  }
  return res;
};

(function () {
  var mouse = {};
  mouse.X = 0;
  mouse.Y = 0;
  var draggable = false;
  
  strLenChkWnd = d.createElement(&amp;quot;div&amp;quot;);
  strLenChkWnd.id = &amp;quot;strLenChkDiv&amp;quot;;
  strLenChkWnd.setAttribute(&amp;quot;style&amp;quot;
  ,  &amp;quot;position: fixed !important;&amp;quot;
  +  &amp;quot;z-index: 999999 !important;&amp;quot;
  +  &amp;quot;left: 8px;&amp;quot;
  +  &amp;quot;top: 8px;&amp;quot;
  +  &amp;quot;width: 200px !important;&amp;quot;
  +  &amp;quot;height: 100px !important;&amp;quot;
  +  &amp;quot;border: 6px double silver !important;&amp;quot;
  +  &amp;quot;border-radius: 6px !important;&amp;quot;
  +  &amp;quot;background-color: white !important;&amp;quot;
  +  &amp;quot;margin: 0 !important;&amp;quot;
  +  &amp;quot;padding: 6px !important;&amp;quot;
  +  &amp;quot;color: black !important;&amp;quot;
  +  &amp;quot;font-size: 16px !important;&amp;quot;
  +  &amp;quot;font-family: 'メイリオ', 'ヒラギノ角ゴ Pro W3', 'ＭＳ Ｐゴシック', sans-serif !important;&amp;quot;
  +  &amp;quot;font-style: normal !important;&amp;quot;
  +  &amp;quot;font-weight: normal !important;&amp;quot;
  +  &amp;quot;text-align: left !important;&amp;quot;
  +  &amp;quot;line-height: 24px !important;&amp;quot;
  +  &amp;quot;cursor: move;&amp;quot;
  +  &amp;quot;user-select: none;&amp;quot;
  +  &amp;quot;float: none !important;&amp;quot;
  +  &amp;quot;display: block !important;&amp;quot;);
  strLenChkWnd.onmousedown = function() { return false };
  addEvent(strLenChkWnd, &amp;quot;mousedown&amp;quot;, function(evt) {
    evt = evt || window.event;
    draggable = true;
    mouse.X = evt.clientX;
    mouse.Y = evt.clientY;
    return false;
  });
  addEvent(window, &amp;quot;mouseup&amp;quot;, function() {
    draggable = false;
    return false;
  });
  addEvent(strLenChkWnd, &amp;quot;mousemove&amp;quot;, function(evt) {
    var left, top;
    evt = evt || window.event;
    var s = (w.addEventListener ? this : strLenChkWnd).style; // IEだとthisがwindowを指すので
    if (draggable) {
      left = parseInt(s.left, 10);
      top  = parseInt(s.top , 10);
      s.left = left + evt.clientX - mouse.X + &amp;quot;px&amp;quot;;
      s.top  = top  + evt.clientY - mouse.Y + &amp;quot;px&amp;quot;;
    }
    mouse.X = evt.clientX;
    mouse.Y = evt.clientY;
    return false;
  });
  d.body.appendChild(strLenChkWnd);
})();

var getStr = function () {
  var ret = &amp;quot;&amp;quot;;
  var selectStr
    = w.getSelection  ? w.getSelection().toString()
    : d.getSelection  ? d.getSelection()
    : d.selection    ? d.selection.createRange().text
    : &amp;quot;&amp;quot;;
  
  
  if (!selectStr) {
    var a = d.activeElement;
    try {
      if (a.selectionEnd - a.selectionStart)
        return a.selectionEnd - a.selectionStart;
    }
    catch (e) {
      if (a.tagName==&amp;quot;textarea&amp;quot; || a.tagName==&amp;quot;input&amp;quot;)
        return a.value || a.innerHTML || &amp;quot;&amp;quot;;
      else selectStr = &amp;quot;&amp;quot;;
    }
  }
  
  if (selectStr) ret = selectStr;
  else {
    var obj = d.activeElement;
    if (obj) {
      if (obj.tagName.toLowerCase() == &amp;quot;textarea&amp;quot;) {
        ret = obj.value;
        if (!ret) ret = obj.innerHTML;
      }
      if (obj.tagName.toLowerCase() == &amp;quot;input&amp;quot;
      &amp;amp;&amp;amp; ( !obj.type || obj.type.toLowerCase() == &amp;quot;text&amp;quot;)) ret = obj.value;
    }
  }
  return ret;
};

//
// ここがメイン
//******************************************************
function loop() {
  str = getStr(window);
  if (d.getElementById(&amp;quot;strLenChkDiv&amp;quot;)==null) {
    clearInterval(iv);
    return false;
  }
  writeText(str);
}
function writeText(str) {
  var obj = strLenChkWnd;
  
  if (str &amp;amp;&amp;amp; typeof(str) != &amp;quot;number&amp;quot;) {
    var c = str.split(&amp;quot;\n&amp;quot;).length-1;
    obj.innerHTML = &amp;quot;&amp;lt;p&amp;gt;文字列長 : &amp;quot;+str.length+&amp;quot; 文字&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;改行数 : &amp;quot;+c+&amp;quot; 個&amp;lt;/p&amp;gt;&amp;quot;;
  }
  else if (typeof(str) == &amp;quot;number&amp;quot;)
    obj.innerHTML = &amp;quot;&amp;lt;p&amp;gt;文字列長 : &amp;quot;+str+&amp;quot; 文字&amp;lt;/p&amp;gt;&amp;quot;;
  else
    obj.innerHTML = &amp;quot;&amp;lt;p&amp;gt;文字列長 : &amp;quot;+str.length+&amp;quot; 文字&amp;lt;/p&amp;gt;&amp;quot;;
  if (getCharset().toUpperCase() == &amp;quot;UTF-8&amp;quot;) {
    var bytes = str.getByteLenUTF8();
    obj.innerHTML += &amp;quot;&amp;lt;p&amp;gt;バイト数 : &amp;quot;+bytes+&amp;quot; bytes&amp;lt;/p&amp;gt;&amp;quot;;
  }
  
  var cn = obj.childNodes;
  for (var i=0; i&amp;lt;cn.length; i++) {
    if (cn[i].nodeType == 1) {
      cn[i].setAttribute(&amp;quot;style&amp;quot;,
        &amp;quot;margin: 0 !important;&amp;quot;
      +  &amp;quot;padding: 4px 0 !important;&amp;quot;
      +  &amp;quot;color: black !important;&amp;quot;
      +  &amp;quot;font-size: 16px !important;&amp;quot;
      +  &amp;quot;font-family: 'メイリオ', 'ヒラギノ角ゴ Pro W3', 'ＭＳ Ｐゴシック', sans-serif !important;&amp;quot;
      +  &amp;quot;font-style: normal !important;&amp;quot;
      +  &amp;quot;font-weight: normal !important;&amp;quot;
      +  &amp;quot;text-align: left !important;&amp;quot;
      +  &amp;quot;line-height: 24px !important;&amp;quot;
      +  &amp;quot;z-index: inherit !important;&amp;quot;);
    }
  }
}

function getCharset() {
  if (d.characterSet)
    return d.characterSet;
  else if (d.charset)
    return d.charset;
}

if (strLenChkWnd) {
  var iv;
  loop();
  iv = setInterval(loop, TIMER);
}

})(window, document);
&lt;/pre&gt;</content:encoded>
  </item>
</rdf:RDF>
